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.textEspero 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 objectsIndicamos que use el módulo full_audit
- full_audit:successEspecifica 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)
- full_audit:failureIndica qué acciones se deben de escribir a auditoría en caso de que fallen.
- full_audit:facilityfull_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:priorityAl igual que nos permite indicar la facility, también se permite indicar la prioridad. Para nosotros INFO.
- full_audit:prefixIndica 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
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)???
ResponderEliminargracias
Hola,
EliminarEmpleando "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
gracias por tu rápida respuesta, pero no funciona. Hice esto:
ResponderEliminar1. 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
Imagino que incluirías una línea similar a esta:
Eliminar$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.
En la referencia de Javier Terceiro lo que está erróneo es que agrego un ";" y corresponde ",".
Eliminar"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.
hola gracias por la asesoria. No funciona.
ResponderEliminarAdicionalmente 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
*.none /var/log/audit.log? Para qué esto?
Eliminarcambia el ";" por "," en local0none:
Eliminar*.*;auth,authpriv.none,local0.none -/var/log/syslog
Yo utilizo local7.
Sldos
algo adicional. tuve que cambiar a local7 porque con local0 no estan saliendo los mensajes en ningun lado.
ResponderEliminarAhora 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
rsylog genera esa linea. pero la quite y de todas maneras sigue sucediendo lo mismo
ResponderEliminarSin 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.
Eliminargracias. Ya lo solucione con un comando (grep smbd_audit /var/log/syslog > /var/log/audit.log) y así no dependo de rsyslog
ResponderEliminarUna 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
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.
EliminarRespecto 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.
gracias por tu ayuda. una cosa mas.
ResponderEliminarEn 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
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
Eliminarsi 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
ResponderEliminarImagino que para lo que tú necesitas, lo ideal sería write, read y probablemente open. Con pread, registra todo al estilo "ls".
Eliminar