Comment journaliser l’activité des utilisateurs Windows sur un partage Samba avec VFS
- Mise à jour le 27 juil. 2025
Introduction
Suivre l’activité des utilisateurs Windows sur un partage de serveur Samba est très utile pour l’audit et le dépannage. Ce guide vous montre comment enregistrer des informations essentielles telles que le nom d’utilisateur, l’adresse IP, le nom d’hôte, le nom du fichier et le type d’opération à l’aide du module VFS audit.
Configuration
- Système : Debian GNU/Linux 12 (Bookworm)
- Version de Samba : 4.17
Modifier /etc/samba/smb.conf pour activer la journalisation des activités
- Ajoutez les lignes de configuration suivantes :
prefix
: définit le format du journalsuccess
: spécifie les opérations à enregistrerfacility
: définit la facility syslog utilisée parrsyslog
[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 unlink rmdir pwrite #For samba version < 4.17
full_audit:success = mkdirat renameat unlinkat pwrite #For samba version < 4.17
full_audit:failure = none
full_audit:facility = local7
full_audit:priority = NOTICE
Vérifier la configuration et recharger Samba
Exécutez les commandes suivantes pour valider la syntaxe de votre fichier smb.conf
et recharger la configuration de Samba sans redémarrer le service :
root@host:~# testparm
root@host:~# smbcontrol all reload-config
Configurer rsyslog pour gérer les journaux Samba
Assurez-vous que le paquet rsyslog
est installé. Sur Debian 12, vous pouvez l’installer avec la commande suivante :
root@host:~# apt update && apt install rsyslog
- Modifiez le fichier
/etc/rsyslog.conf
pour définir une règle utilisant la facilitylocal7
.
###############
#### 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
#samba log will be sent to /var/log/samba_vfs.log file
local7.* /var/log/samba_vfs.log
[…]
#we disable local7 logs to /var/log/messages
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail.none;local7.none -/var/log/messages
Après avoir modifié la configuration de rsyslog
, redémarrez le service pour appliquer les changements :
root@host:~# systemctl restart rsyslog
- Vérifiez que les journaux Samba sont bien enregistrés :
root@host:~# tail -f /var/log/samba_vfs.log
Gestion du fichier de journal
Le mode full audit est très verbeux, ce qui signifie que le fichier de journal peut grossir rapidement. Pour gérer cela, j'ai développé un script qui archive automatiquement les journaux.
⚠️Cette solution fonctionne uniquement avec les systèmes de fichiers ext4
.
- Chemin du script :
/usr/local/sbin/log_samba.sh
#! /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
Planifier une tâche cron
Créez le fichier suivant pour automatiser la rotation des journaux chaque nuit à 3h00 :
/etc/cron.d/samba_logs
0 3 * * * root /usr/local/sbin/log_samba.sh
Références
- Un grand merci à moiristo : https://moiristo.wordpress.com/