logo rss

Comment journaliser l’activité des utilisateurs Windows sur un partage Samba avec VFS

samba linux logo

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 journal
    • success : spécifie les opérations à enregistrer
    • facility : définit la facility syslog utilisée par rsyslog
[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 facility local7.
###############
#### 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