Par défaut un serveur Samba ne logue pas l'activité des utilisateurs comme la création ou la suppression de fichiers ou dossiers. Or il peut être utile de disposer de ces informations sur un serveur en production.
Nous allons donc voir comment loguer les noms d'utilisateur, les addresses ip, les noms de machines, les fichiers et le type d'opérations associé. Tout cela grace au module vfs.
[global] workgroup = WORKGROUP server string = serv bind interfaces only = yes vfs objects = full_audit full_audit:prefix = %u|%I|%m|%S full_audit:success = mkdir rename unkink rmdir pwrite full_audit:failure = none full_audit:facility = local7 full_audit:priority = NOTICE
root@host:~# testparm
root@host:~# smbcontrol all reload-config
############### #### RULES #### ############### # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log #*.*;auth,authpriv.none -/var/log/syslog # local7.none prevent to have local7 facility log inside syslog file *.*;auth,authpriv.none;local7.none -/var/log/syslog #cron.* /var/log/cron.log daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log local7.* /var/log/samba_vfs.log
root@host:~# systemctl restart rsyslog
root@host:~# tail -f /var/log/samba_vfs.log
Le mode Full audit est excrément verbeux, donc ce dernier va rapidement être très volumineux. Afin de réduire l'espace occupé par ce dernier j'ai développé un script qui va se charger de créer des archives .gz avec un système de roulement. L'associer à une tache cron afin de rendre tout ça autonome.
Le script ne fonctionne que pour un système de fichiers ext4.
#! /bin/bash SDE=$(/bin/date --date='2 days ago' +%s) #two days epoch INO=$(stat -c %i /var/log/samba_vfs.log) #get inode number of /var/log/samba_vfs.log file DEV=/dev/sda1 #device where /var has been mounted CRE=$(/bin/date --date="$(/sbin/debugfs -R 'stat <"'"$INO"'">' $DEV 2>/dev/null | grep 'crtime:' | sed 's/.*-- //')" +%s) #get epoch time of last /var/log/samba_vfs.log modification A=6 B=7 if [ "$SDE" -gt "$CRE" ]; then while [ "$A" -ge 1 ]; do mv /var/log/samba_vfs."$A".gz /var/log/samba_vfs."$B".gz ((A-=1)) #ou A=$((A-1)) ((B-=1)) done gzip -c /var/log/samba_vfs.log > /var/log/samba_vfs.1.gz rm /var/log/samba_vfs.log systemctl restart rsyslog fi
0 3 * * * root /usr/local/sbin/log_samba.sh
Contact :