Samba: Registro de actividad

Por normal general, tarde o temprano, al trabajar sobre unidades de red y ficheros compartidos, la pregunta ¿quién ha borrado el fichero ...? llega al administrador de sistemas. Es en este momento cuando un samba mal configurado o con unas opciones de auditoría malas puede complicarte la vida.
Por suerte, samba nativamente ofrece dicha posibilidad, y únicamente para usarlo hay que emplear el módulo full_audit que viene incluido ya en las últimas versiones de samba. La forma en la que yo lo implementé creo que es la más sencilla y fácil de gestionar, y permite más modularidad. Para ello, comenzamos creando el fichero /etc/samba/audit.conf con el siguiente contenido,
vfs objects         = full_audit
 
full_audit:prefix   = %u|%I|%m|%S
full_audit:success  = mkdir rename unlink rmdir pwrite
full_audit:failure  = none
full_audit:facility = local0
full_audit:priority = INFO
Con el fichero creado, únicamente debemos de incluir este método de auditoría en aquellas carpetas compartidas que deseemos. Para hacerlo, nada más sencillo que en el fichero /etc/samba/samba.conf, añadir la siguiente línea las unidades que deseemos,
[UNIDAD DE RED]
  include   = /etc/samba/audit.conf
  path      = /srv/data
  read only = no
  ...
Tras ello, y antes de reiniciar el servicio, podemos comprobar con testparm que el fichero de configuración es válido. Si todo está correcto, entonces ya podemos reiniciar el servicio.
shell> testparm
shell> service smbd restart
shell> service nmbd restart
Desde este momento, aparecerán líneas en syslog indicando la actividad de los usuarios en el sistema.
shell> tail -f /var/log/syslog
mail|192.168.0.20|304j|user|pwrite|ok|data/file.text
fran|192.168.0.14|71aj|user|pwrite|ok|data/file.text
fran|192.168.0.14|712j|user|pwrite|ok|data/file.text
mail|192.168.0.20|304j|user|pwrite|ok|data/file.text
javier|192.168.0.25|304j|user|pwrite|ok|javier/file.text
javier|192.168.0.25|304j|user|pwrite|ok|javier/file.text
javier|192.168.0.25|304j|user|pwrite|ok|javier/file.text
Espero que os sea de utilidad. En esta salida, buscar un evento, como veis es muy sencillo.

Nota:

Significado de las líneas del fichero de auditoría:
  • vfs objects
    Indicamos que use el módulo full_audit
  • full_audit:success
    Especifica las acciones en las cuales realizar la escritura de auditoría.
    • mkdir: Creación de directorios
    • rename: Cambio de nombres
    • unlink: Borrado de ficheros
    • rmdir: Borrado de directorios
    • pwrite: Nuevos ficheros (creados o subidos)
    Aquí puedes encontrar toda la lista de opciones soportadas.
  • full_audit:failure
    Indica qué acciones se deben de escribir a auditoría en caso de que fallen.
  • full_audit:facility
    full_audit envía todo a syslog, pero permite configurarlo por si nos interesa separar o poder filtrar dichas acciones. En este caso, hemos optado por poner la facility local0, ya que suele ser de las no usadas en el sistema.
  • full_audit:priority
    Al igual que nos permite indicar la facility, también se permite indicar la prioridad. Para nosotros INFO.
  • full_audit:prefix
    Indica cómo queremos escribir la línea de log, para hacerla más legible. A continuación os deja la tabla de las variables soportadas por full_audit.
    Variable Definition
    Variables de cliente
    %a Arquitectura del cliente
    %I Dirección IP del cliente
    %m Nombre NetBIOS del cliente
    %M Nombre DNS del cliente
    Variables de usuario
    %u Nombre de usuario
    %U Nombre de usuario que el cliente solicita
    %H Directorio ~ de %u
    %g Grupo primario de %u
    %G Grupo primario de %U
    Variables de compartido
    %S Nombre del compartido
    %P Directorio del compartido
    %p Punto de montaje del compartido
    Variables del servidor
    %d ID del proceso del servidor
    %h Nombre DNS del servidor
    %L Nombre NetBIOS del servidor
    %N Directorio raís del servidor
    %v Versión de samba
    Miscellaneous variables
    %R Nivel de protocolo SMB negociado
    %T Fecha
    var Valor de una variable de entorno var


17 comentarios :

  1. muy bueno, pero como hago para que los logs no salgan en syslog y tenerlos en otro archivo log independiente (/var/log/samba-audit.log)???
    gracias

    ResponderEliminar
    Respuestas
    1. Hola,

      Empleando "full_audit:facility = local0" crea una regla en tu syslog que lo haga. Para rsyslog, sería algo como crear el siguiente fichero: /etc/rsyslog.d/70-samba.conf y ponerle este contenido:
      local0.* -/var/log/samba-audit.log

      Reinicias rsyslog, y listo.

      Gracias por el comentario! :-D

      Eliminar
  2. gracias por tu rápida respuesta, pero no funciona. Hice esto:

    1. cree el /etc/samba/audit.conf
    # Full audit and recycle
    vfs object = recycle full_audit

    # full_audit
    full_audit:prefix = %I|%m|%S
    full_audit:success = mkdir rmdir read pread write pwrite rename unlink connect disconnect
    full_audit:failure = connect
    full_audit:facility = local0
    full_audit:priority = INFO

    # papelera
    recycle:repository = /home/user/recycle
    recycle:versions = TRUE
    recycle:keeptree = TRUE
    recycle:touch = FALSE
    recycle:exclude = *.tmp | *.o | ~$* | *.~?? | *.log
    recycle:excludedir = /tmp | /cache
    recycle:noversions = *.dat | *.ini
    recycle:minsize = 512
    recycle:maxsize = 51200
    2. en el smb.conf
    [compartida]
    comment = compartida
    delete readonly = yes
    writeable = yes
    path = /home/user/compartida
    veto files = /*.mp3/*.wmv/*.wma/*.mpg/*.3gp/*.mpeg/*.mkv/*.rmvb/*.flv/*.avi/
    ; browseable = yes
    valid users = nobody
    security = share
    guest ok = yes
    include = /etc/samba/audit.conf

    3. cree /etc/rsyslog.d/70-samba.conf
    local0.* -/var/log/audit.log

    4. reinicie
    service rsyslog restart
    service smbd restart

    No sale nada en audit.conf y siguen saliendo algunos logs en /var/log/syslog

    gracias

    ResponderEliminar
    Respuestas
    1. Imagino que incluirías una línea similar a esta:
      $IncludeConfig /etc/rsyslog.d/*.conf
      en tu fichero de configuración de rsyslog y también que en rsyslog estarás a descartar todos los mensajes con facility "local0". Para esto último puedes añadir a la línea
      de: *.*;auth,authpriv.none -/var/log/syslog
      a: *.*;auth,authpriv.none;local0.none -/var/log/syslog
      del fichero /etc/rsyslog.d/50-default.conf
      la nueva facility, local0.

      Si te salen en syslog es que está funcionando, lo que te falta es configurar rsyslog correctamente para que haga lo que tú quieres.

      Eliminar
    2. En la referencia de Javier Terceiro lo que está erróneo es que agrego un ";" y corresponde ",".
      "a: *.*;auth,authpriv.none;local0.none -/var/log/syslog"

      De todas formas sólo realicé lo siguiente:
      "*.*;auth,authpriv.none,local0.none -/var/log/syslog" y funciona perfecto.


      Por eso no te habrá funcionado.
      Gracias Javier, estaba preocupado porque mis log estaban registrándose en syslog y en el que elegí para auditoria. Ahora sólo registra donde corresponde.

      Eliminar
  3. hola gracias por la asesoria. No funciona.

    Adicionalmente a lo anterior:
    en /etc/rsyslog.d/50-default.conf
    *.*;auth,authpriv.none;local0.none -/var/log/syslog
    local0.info /var/log/audit.log

    y en rsyslog.conf
    $IncludeConfig /etc/rsyslog.d/*.conf

    *.none /var/log/ulog/syslogemu.log
    *.none /var/log/iptraf.log
    *.none /var/log/audit.log

    no se que mas ponerle. gracias

    ResponderEliminar
    Respuestas
    1. *.none /var/log/audit.log? Para qué esto?

      Eliminar
    2. cambia el ";" por "," en local0none:
      *.*;auth,authpriv.none,local0.none -/var/log/syslog

      Yo utilizo local7.
      Sldos

      Eliminar
  4. algo adicional. tuve que cambiar a local7 porque con local0 no estan saliendo los mensajes en ningun lado.
    Ahora ya salen pero en syslog
    Feb 5 09:52:08 localhost smbd_audit: 192.168.1.141|user1|compartida|disconnect|ok|compartida
    Feb 5 09:52:08 localhost smbd_audit: 192.168.1.129|user2|compartida|disconnect|ok|compartida
    Feb 5 09:52:08 localhost smbd_audit: 192.168.1.121|user4|compartida|disconnect|ok|compartida
    Feb 5 09:52:08 localhost smbd_audit: 192.168.1.127|umata3|compartida|disconnect|ok|compartida
    Feb 5 09:52:08 localhost smbd_audit: 192.168.1.203|andrea|compartida|disconnect|ok|compartida
    Utilizo ubuntu 14.04 samba 4.1.6
    gracias

    ResponderEliminar
  5. rsylog genera esa linea. pero la quite y de todas maneras sigue sucediendo lo mismo

    ResponderEliminar
    Respuestas
    1. Sin poder verlo es complicado, te recomiendo leer acerca de la configuración de rsyslog. Samba audit te está funcionando correctamente, sólo te falla la parte de enviarlo a donde quieras.

      Eliminar
  6. gracias. Ya lo solucione con un comando (grep smbd_audit /var/log/syslog > /var/log/audit.log) y así no dependo de rsyslog
    Una consulta: me preocupa lo de la papelera de reciclaje.
    En otro post mencionas ejemplo recycle:repository = /home/usuario/recycle (si esta linea no se encuentra entonces lo manda para .recycle.
    El asunto es que en Ubuntu 14.04 la papelera de reciclaje esta en la ruta: ~/.local/share/Trash/files/* entonces las preguntas son:
    1. Todo lo que se elimine de la carpeta compartida va a parar por defecto a esa carpeta?? (en el caso de que se elimine la linea recycle:repository)
    2. el crontab quedaría así: 30 2 * * * root find ~/.local/share/Trash/files/* -mtime +30 -exec rm {} \;
    gracias por tu ayuda

    ResponderEliminar
    Respuestas
    1. Imagino que si tu sistema comparte las rutas del usuario con las rutas de samba, lo que dices será correcto, aunque no suele ser lo habitual. La configuración de la que hablas es de samba, recuérdalo.
      Respecto del comando de crontab, así únicamente borrarías los datos del usuario root, que es quien ejecuta el comando y ~ hace referencia a su home.

      Eliminar
  7. gracias por tu ayuda. una cosa mas.
    En la configuración tengo pread y pwrite, sin embargo si un usuario abre una carpeta con muchos archivos en la compartida, el log me registra que este usuario "abrió" todos los archivos de esa carpeta (con pread), sin embargo esto nunca sucedió. El usuario no visualizó ningún archivo (solo abrio la carpeta)
    La pregunta es: Cómo puedo registrar cuando el usuario abre (visualiza) un archivo (por ejemplo de word o pdf) y lo modifica y guarda los cambios o solo lo abre. Gracias

    ResponderEliminar
    Respuestas
    1. Te recomiendo que mires la lista de todas las opciones que samba puede registrar en: https://www.samba.org/samba/docs/man/manpages/vfs_full_audit.8.html

      Eliminar
  8. si en ese enlace salieran las opciones y su significado, no habrìa necesidad de preguntar en este blog (fue lo primero que consulte antes de preguntar aquí). Gracias de todas maneras

    ResponderEliminar
    Respuestas
    1. Imagino que para lo que tú necesitas, lo ideal sería write, read y probablemente open. Con pread, registra todo al estilo "ls".

      Eliminar

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios