Авторские статьи

Настройка аудита в Samba


Мои заметки по настройке журналирования (аудита) определённых действий пользователей на файловом сервере на примере Ubuntu 24.04 и Samba 4.19. Обычно такая задача возникает в ситуациях когда пользователь стёр некий файл/папку и необходимо впредь знать кто и когда именно. Права доступа и резервное копирование никто не отменял, но всё же бывает ситуация что пользователь должен иметь права записи и вот произошло разрушительное событие, которое нужно расследовать.

Конкретная последовательность шагов, приводящая к нужному:

  1. В файл /etc/samba/smb.conf аккуратно добавьте и/или измените существующие параметры
    #===== Global Settings ========
    [global]
    ...
        log level = 1 auth_audit:3 vfs:1
        log file = /var/log/samba/log.%I
        full_audit:prefix = %u|%U|%I|%a|%S
        full_audit:success = connect mkdirat renameat unlinkat pwrite
        full_audit:failure = none
        full_audit:facility = local5
        full_audit:priority = notice
        vfs objects = full_audit
    ...	
    

    Где

    • log level = 1 auth_audit:3 vfs:1 - задаёт различные уровни журналирования для различных компонент. Для нас главное выставить для аудита auth_audit:3
    • Можно оставить дефолтное log file = /var/log/samba/log.%m и тогда журналы будут иметь вид log.ИМЯ-ПК (переменная %m). Это очень удобно если у вас используется динамическая выдача IP от DHCP и ПК может иметь разный IP в различный момент времени. Если используется привязка IP к MAC и IP постоянен, то можно указать /var/log/samba/log.%I. Решать вам. В любом случае - это не журнал аудита.
    • Благодаря строке full_audit:prefix = %u|%U|%I|%a|%S, мы формируем в будущем журнале аудита с помощью переменных необходимые нам данные в PREFIX.

      Все актуальные переменные найдёте в документации man 5 smb.conf в разделе VARIABLE SUBSTITUTIONS.
      %S - Имя текущей службы.
      %P - Корневой каталог текущей службы.
      %u - Пользователь текущей службы.
      %g - Основная группа %u.
      %U - Имя пользователя для сеанса (может отличаться от имени, запрошенного клиентом).
      %G - Основная группа %U.
      %H - Домашний каталог пользователя.
      %v - Версия Samba.
      %h - Имя хоста, на котором работает Samba.
      %m - NetBIOS имя компьютера клиента.
      %L - NetBIOS имя сервера. Эта переменная может оказаться полезной в том случае, если вы на одном Samba сервере запускаете несколько NetBIOS серверов.
      %M - Имя хоста для компьютера клиента.
      %N - Имя NIS (Network Information System) сервера домашних каталогов. Значение определяется при помощи настройки системы NIS auto.map.
      %p - Путь к домашнему каталогу службы. Значение определяется при помощи файла настройки системы NIS auto.map. Запись в этом файле представляется как %N:%p.
      %R - Выбранный после установления соединения уровень протокола.
      %d - Номер текущего серверного процесса.
      %a - Операционная система клиента (значение может быть неверным!).
      %I - IP адрес клиентской машины.
      %T - Текущие дата и время.

    • full_audit:success = connect mkdirat renameat unlinkat pwrite
      full_audit:failure = none

      Строки а что собственно журналировать в успешном (success) или в неудачном (failure) вызове? Актуальные системные вызовы нужно брать в документации проекта Samba man 8 vfs_full_audit. По каждому непонятному вызову с самоговорящим названием на английском языке для дополнительной информации можно запросить справку, например man pwrite.

      В моей практике, хоть и один раз, но было серьёзное изменение в именах вызовов. В результате я получил полное журналирование всех операций. Это привело к огромной нагрузке на дисковую систему по каждому чиху множества пользователей. В дни серьёзных обновлений всего сервера и версий Samba контролируйте файл аудита!

      В примере, мы журналируем сам факт соединения (connect), создание (mkdirat) и переименовка (renameat) файлов/каталогов, удаление (unlinkat), запись (pwrite).

      Так же доступны для указания зарезервированные слова all и none. Различные примеры вы найдёте так же в документации в разделе EXAMPLES. Например, журналировать все неудачные вызовы, кроме открытия файлов - full_audit:failure = all !open

      В итоге вся строка будет иметь вид smbd_audit: PREFIX|OPERATION |RESULT|FILE
      Где:

      • PREFIX - строка от full_audit:prefix
      • OPERATION - имя операции
      • RESULT - успешно или неудача
      • FILE - имя файла/каталога, над которым производилась операция

      Примерно так, smbd_audit: user1|user1|192.168.1.111|OSX|share| unlinkat|ok|/share/Бюджет/2025

      OSX - Это MS Windows 10, а Vista - это MS Windows 7. Очень полезная и правдивая информация

    • full_audit:facility = local5
      full_audit:priority = notice

      Указываем категорию (facility) как local5 и приоритет (priority) как notice. Если 5 занято на вашем сервере под другие задачи, то берите любую от 0 до 7, но запомните цифру, так как дальше она будет использоваться.

  2. В службе журналирования RSysLog в файле /etc/rsyslog.d/50-default.conf укажите вести local5.notice в отдельный файл и не журналировать больше в общий системный журнал /var/log/syslog

    local5.notice /var/log/samba/audit.log
    *.*;auth,authpriv.none,local5.none -/var/log/syslog

  3. Чтобы при дальнейшей работе не получить rsyslogd: file '/var/log/samba/audit.log': open error: Permission denied, настоятельно рекомендую заранее создать файл /var/log/samba/audit.log и выставить для него владельца/права доступа.

    sudo touch /var/log/samba/audit.log
    sudo chown root:syslog /var/log/samba/audit.log
    sudo chmod 660 /var/log/samba/audit.log

  4. Файл аудита рано или поздно станет огромным! Для службы ротации журналов logrotate создайте файл /etc/logrotate.d/samba и в нём укажите что файл /var/log/samba/audit.log жаждете ротировать 1 раз в неделю (weekly) и хранить 60 копий (rotate). Подправьте под свои нужды.
    /var/log/samba/audit.log {
            weekly
            missingok
            rotate 60
            compress
            delaycompress
            notifempty
            create 660 root syslog
    }
    
  5. Если всё правильно, то пора перезапускать службы:

    sudo testparm -s && sudo systemctl restart smbd && sudo systemctl status smbd

    sudo systemctl restart rsyslog && sudo systemctl status rsyslog

    sudo systemctl restart logrotate && sudo systemctl status logrotate

  6. Создайте и удалите файл/каталог в расшаренной папке с включённым аудитом. Проверьте что аудит корректно пишется в /var/log/samba/audit.log и НЕ пишется в /var/log/syslog. Через неделю проверьте ротацию журнала и в дальнейшем проконтролируйте что вам доступны 2 текстовых несжатых audit.log и audit.log.1, а последующие журналы сжаты для экономии места.
  7. Различные офисные пакеты в целях надёжной блокировки файла на различных файловых системах и особенно по сети, создают файл-блокировки. Подробнее в Отключение создания файлов блокировки LibreOffice. Создание-удаление этих файлов офисным пакетом, будет знатно мусорить вам журнал аудита, но с этим почти ничего не поделать (гуглите rsyslog stop msg contains). При расследовании инцидентов лучше просто убрать из выборки - sudo grep -vE "(~\\$|~lock)" /var/log/samba/audit.log

Дополнительная информация

Дата последней правки: 2025-06-19 10:09:44

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта

Лучшее на сайте:

1С под Linux.   Ускорение Ubuntu.   21 пример iptables.   Цикл статей о Ceph.   Убунту в дикой среде.   Ubuntu Linux на SSD.   Ubuntu для блондинок.   Поддержка железа в Linux.   BTSync на службе у админа.   Андроид программы в Ubuntu.   Прокидывание портов для p2p.   Анти СПАМ в Postfix.