Samba Full Audit
En Compartición de Archivos, hablamos de Samba y cómo compartir un directorio en nuestra red local (a ver si algún día los usuarios finalmente dejan de usar memorias usb para pasarse los archivos... y de paso, malware).
Hoy le tocó el turno a full_audit. Este módulo nos permite registrar en un log todo los que sucede con nuestro recurso compartido, los usuarios que acceden, crean, eliminan, modifican archivos y directorios, entre otros parámetros.
Pero, antes de comenzar, debemos asegurarnos de lo siguiente:
1. Instalar samba y componentes (puede variar en dependencia de sus necesidades):
sudo apt -y install samba samba-common smbclient winbind cifs-utils
Nota: Para eliminar:
sudo apt -y remove --purge samba samba-common cifs-utils smbclient sudo rm -rf /var/cache/samba /etc/samba /run/samba /var/lib/samba /var/log/samba
2. Crear la carpeta que vamos a usar como compartida en nuestra red local (reemplace "your_user" por su usuario y "shared" por el nombre de su carpeta compartida):
mkdir -p /home/your_user/shared sudo chown -R nobody.nogroup /home/your_user/shared sudo chmod -R 777 /home/your_user/shared
3. Eventualmente Samba puede crear durante la instalación la carpeta
usershares
(herencia de versiones anteriores) y en el caso de que no lo haga es mejor tenerla que no tenerla, pero dejarla solo para uso del usuario de sistema, activando Sticky Bit (para mayor información consulte Compartición de archivos y Samba Usershares): if [ ! -d /var/lib/samba/usershares ]; then sudo mkdir -p /var/lib/samba/usershares; fi sudo chmod 1775 /var/lib/samba/usershares/ sudo chmod +t /var/lib/samba/usershares/
4. Activar reglas en su firewall que permita el acceso a los puertos samba (opcional NetBios):
# NETBios (137,138,139), Microsoft-DS and SMB (445) lan=enp2s0 # cámbielo por su interfaz de red for protocol in $(echo tcp udp); do iptables -A INPUT -i $lan -p $protocol -m multiport --dports 137,138,139,445 -j ACCEPT iptables -A FORWARD -i $lan -p $protocol -m multiport --dports 137,138,139,445 -j ACCEPT done
5. Tener declarado en nuestro archivo de configuración
/etc/samba/smb.conf
los paŕametros básicos globales (las configuraciones pueden variar en dependencia de las necesidades del usuario) (en interfaces
reemplace eth1
por su interfaz de red y el rango 192.168.0.0/24
por el de su red local). Puede ver un ejemplo AQUÍ: workgroup = WORKGROUP server string = %h server dns proxy = no domain master = no prefered master = no local master = no unix extensions = no invalid users = root bin daemon adm sync shutdown halt mail news uucp operator interfaces = lo eth1 127.0.0.1 192.168.0.0/24 max log size = 1000 server role = standalone server obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* map to guest = bad password security = user valid users = nobody guest account = nobody log file = /var/log/samba/audit.log
6. Declarar nuestra carpeta compartida (reemplace el "path" y nombre de su recurso compartido):
[shared] comment = shared # change path path = /home/your_user/shared public = yes read only = no writeable = yes browseable = yes valid users = nobody guest ok = yes available = yes printable = no create mask = 0777 directory mask = 0777
Nota
: Tenga presente que hasta aquí hemos creando un recurso compartido de acceso público. Si es lo que quiere, salte al punto 8
Para aplicar restricciones al recurso debe ponerle credenciales y para esto debe crear un usuario samba. Tenga en cuenta que a partir de la versión 4.x, Samba tiene la capacidad de ejecutarse como un controlador de dominio AD, por tanto no es necesario tener un usuario estándar de Linux/Unix para cada usuario de Samba que se crea. Para mayor información consulte Cómo agregar un usuario de Samba en Linux.
Una vez agregado el/los usuario/s verifique con:
sudo pdbedit -L
Si no sale nada es porque no lo agregó a samba
sudo smbpasswd -a usuario # cambie 'usuario' por el nombre del usuario a agregar a samba New SMB password: Retype new SMB password:
Si se equivoca puede eliminarlo
sudo smbpasswd -x usuario
Ahora debe agregar los usuarios que van a ingresar al recurso. Por tanto debe reemplazar:
valid users = nobody
por el/los usuario/s. Ejemplo:
valid users = user1, user2, user3
Para administrar el recurso, reemplace "your_user" por el usuario administrador (pueden ser varios pero no se recomienda):
admin users = your_user
Opcional: puede utilizar un solo usuario Unix para todos los usuarios que se conecten a este servicio. Para hacerlo, reemplace "your_user" por el usuario elegido:
force user = your_user
Al final quedaría el recurso configurado más o menos así (ejemplo: carpeta compartida "download" con restricciones):
[download] comment = download path = /home/user/download writeable = yes read only = no create mask = 0774 directory mask = 0777 # todos los usuarios con acceso a la carpeta valid users = user1, user2, user3 # usuario administrador admin users = your_user # Opcional: Todos los archivos se escriben como este usuario force_user = your_user
8. Si quiere agregar un veto de extensiones de archivos en su recurso compartido consulte Veto Files
9. Si va a usar firma SMB ( SMB sign) (recomendado), ejecute con privilegios administrativos los siguientes comandos en la consola
cmd
de sus equipos Windows (consulte la documentación AQUÍ): reg add "HKLM\System\CurrentControlSet\services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 1 /f reg add "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 1 /f reg add "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters" /v "EnableSecuritySignature" /t REG_DWORD /d 1 /f
Importante:
- Windows 7/8/10/11 ya trae por defecto
1
en EnableSecuritySignature
para LanmanWorkstation
por tanto lo anterior no es necesario para esta clave - Para deshabilitar la firma cambie el
1
por 0.
- Si ejecuta los anteriores comandos y no está presente la activación de la firma en
smb.conf
sus equipos perderán la conexión con el recurso compartido. Para activarla agregue lo siguiente debajo de la plantilla [global]
: # smb v4.14 and later server signing = mandatory server min protocol = SMB3 server smb encrypt = required # smb v4.13 or earlier smb encrypt = required
Opciones por defecto según manual:
server signing = # default, auto, mandatory, disabled server min protocol = # SMB2, SMB3, LANMAN1, LANMAN2, NT1 server smb encrypt = # default, off, if_required, desired, required
Importante:
- Las opciones de
min protocol
y max protocol
son: SMB2 (incluye SMB2_02, SMB2_10 -win7 default-), SMB3 (incluye: SMB3_00 -win8-, SMB3_02 -win8.1-, SMB3_11 -win10 default-), LANMAN1 y LANMAN2 (Soporte de nombre de archivo largo) y NT1 (conocido como CIFS -winNT-) . La opción SMB está descontinuada - A partir del protocolo SMB2 ya no se puede deshabilitar la firma (o sea no se puede usar el parámetro
server signing = disable
y si se establece en deshabilitado, se tratará como automático) y tampoco se puede usar security = share
y server signing
al mismo tiempo.
- Cuando se establece en automático (auto) o predeterminado (default), se ofrece cifrado, pero no se aplica. Cuando se establece en obligatorio (mandatory), se requiere el cifrado.
- A partir de SMB3 (y superior) soporta cifrado completo (autenticación, transporte de datos, etc.), pero puede generar incompatibilidades con algunos equipos y sistemas operativos antiguos (anterior a Windows 8 y Windows Server 2012) o desactualizados. Si quiere garantizar retro-compatibilidad en su red local utilice SMB2, pero no tendrá cifrado completo.
- Si no tiene en cuenta la versión de Samba al usar el parámetro
smb encrypt
saldrá el mensaje de error Unknown parameter encountered: "server smb encrypt"
. - Para mayor información sobre los parámetros en
smb.conf
ejecute en el terminal man smb.conf
Activando módulo full_audit
Y al fin llegamos a lo que nos interesa. Para activar el módulo debemos editar
/etc/samba/smb.conf
y agregar a la plantilla [global]
: vfs object = full_audit full_audit:prefix = %I|%m|%S full_audit:success = mkdirat pread pwrite renameat unlinkat create_file full_audit:failure = none full_audit:facility = LOCAL7 full_audit:priority = notice
Nomenclatura:
-
vfs objects
: Carga del módulo full_audit -
full_audit:prefix
: Variables que se almacenarán en el log (usuario, IP, nombre del equipo, nombre de la carpeta compartida, etc.) -
full_audit:failure
: Operaciones a registrar si hay error (se usan los mismos valores que full_audit:success
). En el ejemplo usamos la opción none
para no dejar registros de los fallos -
full_audit:facility
: LOCAL5
(si va a registrar en un LOG individual) o LOCAL7
(en syslog
) -
full_audit:priority
: Niveles de registro (notice, info, debug, warning, alert) -
full_audit:success
: Operaciones que se registrarán en el log (obtenga la lista completa de opciones AQUÍ) -
mkdirat
: creación de carpetas -
renameat
: renombrado o manipulación de archivos -
unlinkat
: borrado de archivos y carpetas -
create_file
: creación archivos (genera mucha información basura) -
pwrite
: escritura de archivos -
pread
: apertura de archivos
-
%I
: Dirección IP del cliente -
%m
: NetBIOS del cliente -
%S
recurso solicitado (en este caso la carpeta compartida)
Importante:
- Si tiene varias carpetas en
smb.conf
y la cláusula los parámetros full audit están debajo de la plantilla [global]
pero encima de las configuraciones de sus carpetas, entonces auditará todas las carpetas configuradas en smb.conf
. Si desea limitar la auditoría a una carpeta específica (ejemplo: la compartida), entonces pase la cláusula vfs object = full_audit
(o full_audit recycle
si tiene papelera de reciclaje) al final de los parámetros de dicha carpeta en smb.conf
- A partir de Samba 4 y si agrega un parámetro inexistente o descontinuado (como
rmdir
, rename
o mkdir
) aparecerá en el log el registro el mensaje Could not find opname rename, logging all
y se activarán todas las opciones de full_audit y su log se llenará de datos (inservibles). Para mayor información consulte Bug Samba vfs_full_audit reports everything - El parámetro
%m
trabaja conjuntamente con el demonio nmbd
y para que funcione debe activar smb ports = 139
en smb.conf
. Tenga en cuenta que esto hará que Samba no escuche en el puerto 445
y permitirá que la funcionalidad de inclusión funcione como hizo con Samba 2.x, pero su red local puede perder el acceso al recurso compartido (A partir de la version 4.13.14 ya no es necesario activar este puerto en smb.conf
para que muestre en audit.log
el nombre de los equipos que se conectan al recurso compartido).
LOCAL5 vs LOCAL7
Con
LOCAL7
los registros se guardan en syslog
. Para independizar los registros de auditoría es más cómodo LOCAL5
: full_audit:facility = LOCAL5
Para esto editamos:
/etc/rsyslog.d/50-default.conf
Y agregamos la siguiente línea (preferentemente en la cabecera para que sea prioritaria):
local5.* /var/log/samba/audit.log & stop
O abreviando:
echo -e "local5.* /var/log/samba/audit.log\n& stop" | sudo tee -a /etc/rsyslog.d/50-default.conf
Lo anterior significa que todos los registros se almacenan en
/var/log/samba/audit.log
y la segunda línea evita que se guarden en syslog
.
Nota: Antes de Samba 4 se utilizaba el estado
~
pero ya está descontinuado y si lo usa saldrá el error 2307
No olvidemos crear el log si no existe:
if [ ! -d /var/log/samba ]; then sudo mkdir -p /var/log/samba; fi sudo touch /var/log/samba/audit.log
Reiniciamos los servicios:
sudo systemctl restart rsyslog smbd nmbd winbind
o recargarlos:
sudo smbcontrol all reload-config && sudo /etc/init.d/rsyslog force-reload
Nota: Al hacer este cambio
rsyslog
puede generar un registro bastante molesto, que si se deja así puede llenar nuestro log rápidamente:
rsyslogd: action 'action-1-builtin:omfile' suspended (module 'builtin:omfile'), retry 0
Para solucionarlo, comente las siguientes líneas en
/etc/rsyslog.conf
(ejecute los comandos en el terminal): sudo cp -f /etc/rsyslog.conf{,.bak} sudo sed 's/^[^#]*\($FileOwner syslog\|$FileGroup adm\|$FileCreateMode 0640\|$FileCreateMode 0640\|$DirCreateMode 0755\|$Umask 0022\|$PrivDropToUser syslog\|$PrivDropToGroup syslog\)$/#\1/' -i /etc/rsyslog.conf
No olvide asegurarse que al final del archivo
/etc/rsyslog.conf
se encuentre declarado audit.log
(ejecute el siguiente comando en el terminal): grep -qxF '*.none /var/log/samba/audit.log' /etc/rsyslog.conf || echo '*.none /var/log/samba/audit.log' | sudo tee -a /etc/rsyslog.conf
Nota: También podemos usar Apache y publicar el log para verlo en el navegador, o supervisarlo con webmin
Rotación del log
Para rotar el log edite el archivo:
/etc/logrotate.d/samba
Y agregue la siguiente información:
/var/log/samba/audit.log { weekly missingok rotate 7 postrotate reload rsyslog > /dev/null 2>&1 || true endscript compress notifempty }
Bonus: Full Audit con Papelera de Reciclaje
Para activar full audit con papelera de reciclaje (Recycle Bin) en la carpeta compartida agregue lo siguiente (los parámetros pueden cambiar según sus necesidades). Para mayor información consulte
Cómo configurar Samba con Papelera de Reciclaje:
## SAMBA FULL AUDIT AND RECYCLE BIN ### vfs object = full_audit recycle full_audit:prefix = %I|%m|%S full_audit:success = mkdirat pread pwrite renameat unlinkat full_audit:failure = none full_audit:facility = LOCAL5 full_audit:priority = notice recycle:repository = recycle/%U recycle:directory_mode = 0777 recycle:touch = yes recycle:keeptree = yes recycle:versions = yes recycle:noversions = *.doc*/*.ppt*/*.xls*/*.pdf/*.dat/*.ini recycle:exclude = *.tmp|*.temp|*.o|~$*|*.~??|*.log|*.trace|*.TMP|*.asv recycle:exclude_dir = /temp|/tmp|/cache|/.Trash-1000 recycle:maxsize = 0 recycle:mode = KEEP_DIRECTORIES|VERSION|TOUCH hide files = /recycle/
Vaciado de la Papelera de Reciclaje cada 7 días en crontab:
@weekly find ~/shared/recycle/* -mtime +7 -exec rm -rf "{}" \; >/dev/null
Concluyendo, este módulo es bastante útil, pero no espere milagros. Samba cambia los parámetros con cada versión (a veces son necesarios y a veces no), los manuales no los actualizan a tiempo y en ocasiones los cambios son tantos que es difícil seguirles el paso.
Actualización
Tenga en cuenta la nueva vulnerabilidad de Samba a la hora de configurarlo
Post a Comment