Аудит Samba через vfs_full_audit: настройка, отдельный лог и проверка
vfs_full_audit записывает файловые операции Samba в системный журнал. Ниже — практическая настройка для одной share: значимые события, отдельный log-файл, проверка обычным пользователем и откат.
1. Проверяем версию и доступные операции
smbd --version
man vfs_full_audit
testparm -sИмена VFS-операций меняются между версиями Samba. Список для вашей системы берите из локальной команды man vfs_full_audit, а не из старой статьи.
2. Сохраняем конфигурацию
install -d -m 700 /root/samba-backup
cp -a /etc/samba/smb.conf /root/samba-backup/smb.conf.$(date +%F-%H%M)
testparm -s > /root/samba-backup/testparm-before.txt3. Включаем аудит только на нужной share
[files]
path = /srv/samba/files
read only = no
vfs objects = full_audit
full_audit:prefix = user=%u|ip=%I|machine=%m|share=%S
full_audit:success = mkdir rmdir rename unlink pwrite chmod chown
full_audit:failure = all
full_audit:facility = local5
full_audit:priority = NOTICEЕсли в share уже используются recycle, acl_xattr и другие модули, укажите их в одной строке, например vfs objects = acl_xattr recycle full_audit. Не заменяйте существующий список.
4. Проверяем конфигурацию
testparm -s
testparm -s --section-name=filesЕсли Samba сообщает Unknown operation, вернитесь к локальной man page и исправьте имя операции.
5. Направляем local5 в отдельный журнал rsyslog
cat > /etc/rsyslog.d/30-samba-audit.conf <<'EOF'
local5.notice /var/log/samba/audit.log
& stop
EOF
install -d -o root -g adm -m 0750 /var/log/samba
touch /var/log/samba/audit.log
chown root:adm /var/log/samba/audit.log
chmod 0640 /var/log/samba/audit.log
rsyslogd -N1
systemctl restart rsyslogНа системе только с journald отдельный rsyslog может отсутствовать. Тогда сначала проверьте события через journalctl и настройте экспорт в соответствии с вашей схемой логирования.
6. Применяем Samba-конфигурацию
smbcontrol all reload-config
# либо
systemctl reload smbd
systemctl status smbd --no-pager7. Выполняем тестовые операции через SMB
echo 'audit test' > /tmp/audit-test.txt
smbclient //127.0.0.1/files -U testuser -c 'mkdir audit-dir; put /tmp/audit-test.txt audit-dir/audit-test.txt; rename audit-dir/audit-test.txt audit-dir/renamed.txt; del audit-dir/renamed.txt; rmdir audit-dir'Тестируйте обычным пользователем с другого клиента, если хотите проверить реальный IP и machine name.
8. Проверяем журнал
tail -n 100 /var/log/samba/audit.log
grep 'testuser' /var/log/samba/audit.log | tail -50
grep -E 'unlink|rename|mkdir|rmdir' /var/log/samba/audit.log | tail -50В строках должны присутствовать username, IP, share, операция, результат и путь.
9. Проверяем неуспешную операцию
smbclient //127.0.0.1/files -U testuser -c 'del protected-file.txt'
grep 'protected-file.txt' /var/log/samba/audit.log | tailНеуспешная попытка должна попасть в журнал из-за full_audit:failure = all.
10. Настраиваем logrotate
cat > /etc/logrotate.d/samba-audit <<'EOF'
/var/log/samba/audit.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 root adm
postrotate
systemctl kill -s HUP rsyslog.service 2>/dev/null || true
endscript
}
EOF
logrotate -d /etc/logrotate.d/samba-auditСначала используйте -d. Принудительный запуск -f делайте только после проверки.
11. Контролируем объём и нагрузку
du -h /var/log/samba/audit.log
wc -l /var/log/samba/audit.log
journalctl -u smbd --since '1 hour ago' --no-pager
pidstat -p $(pidof smbd | tr ' ' ',') 5 3 2>/dev/null || trueЕсли журнал растёт слишком быстро, сократите список success-операций. Аудит каждого open/stat/read на активной share может создать лавину событий.
12. Rollback
cp -a /root/samba-backup/smb.conf.YYYY-MM-DD-HHMM /etc/samba/smb.conf
rm -f /etc/rsyslog.d/30-samba-audit.conf
rsyslogd -N1
systemctl restart rsyslog
testparm -s
smbcontrol all reload-configКритерий успеха: нужные операции обычного пользователя появляются в отдельном журнале с корректными username/IP/path, ошибки тоже фиксируются, Samba проходит testparm, а logrotate не выдаёт ошибок.