Actualización: Desde la versión de samba 4.13.14 de noviembre de 2021 en Ubuntu 20.04, se cambió el nombre de algunas operaciones (como mkdir por mkdirat), por lo que el contenido del fichero audit.conf daba problemas: registraba el error "Could not find opname" en el log especifico del equipo cliente samba y registraba TODAS las operaciones realizadas, por lo que en poco tiempo el audit.log ocupaba gigas. Hemos actualizado el artículo con la sintaxis correcta.
Si tenemos un servidor de archivos donde se manejan datos personales, con la entrada en vigor del RGPD (la nueva LOPD), es obligatorio mantener un registro de actividad de los usuarios: debemos saber cuando y quien accede a cada archivo y qué hace con él.
Para esto podemos añadir a Samba el módulo vfs_full_audit. Esto es un VFS (Stackable VFS Modules), que son módulos que añaden funcionalidades extra a Samba desde la versión 3, como este full_audit, que nos permite registrar toda la actividad de los usuarios Samba.
Vamos a ver como activarlo:
Creamos el fichero /etc/samba/audit.conf con este contenido:
vfs objects = full_audit
full_audit:prefix = %u|%I|%m|%S
full_audit:success = mkdirat renameat linkat unlinkat pwrite pread connect disconnect pwrite_recv
full_audit:failure = mkdirat renameat linkat unlinkat pwrite pread connect disconnect pwrite_recv
full_audit:facility = local5
full_audit:priority = INFO
- vfs objects: Indicamos a samba que queremos cargar el módulo full_audit.
- full_audit:prefix: Indicamos las variables que se almacenarán en el log. En este caso serán el nombre de usuario, IP, nombre del equipo, nombre de la carpeta compartida a la que accede.
- full_audit:success: Indicamos a samba qué tipo de operaciones registraremos cuando se hayan realizado correctamente. En este caso:
- mkdirat: Registra creación de carpetas (antes mkdir)
- renameat: Registra renombrado de archivos y carpetas (antes rename)
- unlinkat: Registra borrado de archivos y carpetas (antes unlink y rmdir)
- pwrite: Registra la creación de archivos
- pread: Registra la apertura de archivos (no nos ha funcionado)
- connect: Registra la primera conexion al servidor de un cliente
- disconnect: Registra la desconexión de un cliente al servidor
- pwrite_recv: registra la creación de archivos
- full_audit:failure: Indicamos a samba qué tipo de operaciones registraremos cuando se produzcan errores. Indicamos los mismos valores que en caso de éxito, así registrará, por ejemplo, cuando un usuario sin permisos intente acceder o borrar un archivo cuando no tenga permisos para ello.
- full_audit:facility = LOCAL5: Le indicamos a Samba que queremos enviar los registros al syslog utilizando el facility LOCAL5 (ver más adelante configuración de archivos de registro).
- full_audit:priority = INFO: Aquí indicamos el tipo de gravedad con el que se registraran los mensajes en los log. Pueden ser notice, info, debug, warning, alert...
Ahora configuraremos samba para que cargue este fichero añadiendo en /etc/samba/smb.conf esta línea:
include = /etc/samba/audit.conf
Podemos añadirla en la sección [global] para que registre las actividades de todas las comparticiones, o bajo otra sección concreta que hayamos creado para registrar solo las actividades de esa sección.
Comprobamos que el smb.conf está correctamente configurado y cargando la nueva configuración con el comando testparm.
Reiniciamos samba
systemctl restart smbd nmbd
Ahora podemos comprobar que en /var/log/syslog se registran las actividades realizadas en las carpetas compartidas así:
May 2 12:14:37 sambaserver smbd_audit: usuario|192.168.0.201|workstation1|datos|pwrite|ok|qwer.txt
May 2 12:14:51 sambaserver smbd_audit: usuario|192.168.0.201|workstation1|datos|mkdir|ok|Nueva carpeta
May 2 12:14:56 sambaserver smbd_audit: usuario|192.168.0.201|workstation1|datos|rename|ok|Nueva carpeta|Nueva carpeta1
May 2 12:15:04 sambaserver smbd_audit: usuario|192.168.0.201|workstation1|datos|rename|ok|Nuevo documento de texto.txt|archivo2.txt
May 2 12:15:11 sambaserver smbd_audit: usuario|192.168.0.201|workstation1|datos|unlink|ok|asdf.txt
May 2 12:15:11 sambaserver smbd_audit: usuario|192.168.0.201|workstation1|datos|unlink|ok|qwer.txt
May 2 12:15:11 sambaserver smbd_audit: usuario|192.168.0.201|workstation1|datos|unlink|ok|poiu.txt
Configurar ficheros de registro
Ya tenemos funcionando el registro de actividad, pero se guarda todo en syslog, junto con otra mucha información del sistema. Para realizar una auditoría resultaría mucha más cómodo tener separada la información de samba. Podemos hacerlo gracias a la opción full_audit:facility = LOCAL5 que configuramos antes:
vim /etc/rsyslog.d/50-default.conf
Añadir esta línea al principio del fichero (antes del *.*):
local5.* /var/log/samba/audit.log
& ~
La primera línea indica al syslog que todos los registros originados desde el facility LOCAL5 se almacenen en /var/log/samba/audit.log, además de en syslog. La segunda línea evita que se guarden en syslog.
Reiniciamos rsyslog y samba:
systemctl restart rsyslog smbd
Comprobar que en /var/log/syslog no hay errores y que no se está guardando nada.
Si no se ha creado el archivo /var/log/samba/audit.log o no se está actualizando, comprobar que tiene los mismos permisos que /var/log/syslog (en nuestro caso es usuario syslog grupo adm).
Y así tendremos el registro de actividad de usuarios en samba en un fichero de log separado para facilitar la auditoría. Este fichero puede crecer mucho, por lo que conviene configurar logrotate para separarlo por días, comprimirlo y eliminar los antiguos.
Probado con éxito en Ubuntu 16.04, 18.04 y 20.04.
Más información: Samba
acg dice
hola. actualiza el post. full audit samba 4 en ubuntu 20.04 ya no muestra los registros deseados de mkdir rename unlink rmdir pwrite pread connect disconnect sino otro montón de basura inútil y tampoco netbios
sysadmin dice
muchas gracias por el conocimiento, funciona perfectamente.
Eraldo dice
hola amigo consulta, /var/log/samba/audit.log se debe de crear solo? no me esta funcionando
Igor García dice
Prueba a crearlo manualmente, con el mismo propietario, grupo y permisos que el resto de logs de samba.
Si no, comprueba si se está registrando los cambios de samba en /var/log/syslog. Si es así, vuelve a comprobar la segunda parte del tutorial.
Eraldo dice
muchas gracias por el apoyo, me funciono