Расскажу как я решил данный вопрос для себя. Столкнулся с тем же что и вы.
smb.conf
[global]
security = ads
realm = COMPANY.LAN
workgroup = COMPANY
netbios name = SRVFS
template shell = /bin/bash
kerberos method = system keytab
wins support = no
winbind use default domain = yes
winbind enum users = no
winbind enum groups = no
template homedir = /home/COMPANY.LAN/%U
idmap config * : range = 200000-2000200000
idmap config * : backend = sss
machine password timeout = 0
printcap name = /dev/null
load printers = no
disable spoolss = yes
printing = bsd
[share]
path = /var/data/share
browseable = yes
read only = no
# Настройки аудита
full_audit:prefix = %U|%I
full_audit:success = mkdirat, renameat, unlinkat, pwrite, pread, sendfile, create_file
full_audit:failure = none
# ACL и атрибуты (оставляем как у вас)
store dos attributes = yes
nt acl support = yes
map acl inherit = no
inherit owner = yes
inherit acls = yes
inherit permissions = yes
Далее я написал скрипт по обработке данных получаемых через journalctl -t smbd_audit -f
/home/alexey/scrypt/smd_log.sh
#!/usr/bin/env bash
set -euo pipefail
# --- НАСТРОЙКИ ---
LOG_DIR="/var/log/samba-audit"
LOG_PREFIX="smbd_audit"
DAYS_TO_KEEP=5
# ----------------
mkdir -p "$LOG_DIR"
# Функция: получить имя файла на сегодня
get_today_file() {
date +"${LOG_DIR}/${LOG_PREFIX}_%Y-%m-%d.log"
}
# Проверка: сегодня рабочий день (пн–пт)
WEEKDAY=$(date +%u) # 1=пн, ..., 5=пт, 6=сб, 7=вс
if [[ "$WEEKDAY" -gt 5 ]]; then
# В выходные ничего не пишем, но скрипт можно оставить запущенным — он просто не будет писать
exec journalctl -t smbd_audit -f --no-pager >/dev/null 2>/dev/null &
PID=$!
wait "$PID"
exit 0
fi
CURRENT_FILE="$(get_today_file)"
# Удаляем файлы старше $DAYS_TO_KEEP дней
find "$LOG_DIR" -type f -name "${LOG_PREFIX}_*.log" -mtime +"$DAYS_TO_KEEP" -delete
# Запуск journalctl и запись в файл
exec journalctl -t smbd_audit -f --no-pager | while IFS= read -r line; do
# Пересоздаём файл, если дата изменилась (на случай, если скрипт работает несколько дней)
NEW_FILE="$(get_today_file)"
if [[ "$NEW_FILE" != "$CURRENT_FILE" ]]; then
CURRENT_FILE="$NEW_FILE"
# Если сегодня выходной — прекращаем писать
WEEKDAY=$(date +%u)
if [[ "$WEEKDAY" -gt 5 ]]; then
break
fi
fi
echo "$line" >> "$CURRENT_FILE"
done
И теперь описание службы /etc/systemd/system/smb_audit.service
[Unit]
Description=Samba audit log follower (smbd_audit)
After=network.target syslog.service
[Service]
Type=simple
ExecStart=/home/alexey/scrypt/smd_log.sh
Restart=on-failure
RestartSec=5s
# Важно: не используем StandardOutput=file, чтобы не конфликтовать с логикой скрипта
[Install]
WantedBy=multi-user.target
В итоге у меня есть скрипт который запускается при старте после systemctl enable --now smb_audit.service
Если служба отваливается, то система её пытается перезапустить. Службой я могу управлять через systemctl start/stop/status smb_audit.service