Логирование операций с файлами в Samba

Ранее я неоднократно рассказывал, как настроить файловый сервер samba для совместной работы с файлами. При совместной работе часто бывает нужно знать, кто и когда что-то сделал с тем или иным файлом, а конкретно, кто удалил файл. По-умолчанию, такой лог не ведется, нужно настраивать отдельно. Займемся настройкой логирования операций с файлами в данной статье.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Введение

У меня есть две статьи по настройке файлового сервера samba:

  1. Настройка Samba с интеграцией в Active Directory.
  2. Быстрая настройка самбы с доступом по паролю или ip.

В обоих случаях будет не лишним настроить логирование всех обращений к файлам на сервере. Делается это штатными возможностями самой самбы. Она будет отправлять логи в syslog, а в нем мы уже настроим их хранение и ротацию с помощью logrotate. На нагруженных серверах логи будут очень объемными. Нужно обязательно позаботиться об их хранении и удалении.

Я буду настраивать логи в samba на сервере CentOS 7. В других случаях отличий почти не будет. Сами настройки самбы везде одинаковые. Syslog и Logrotate тоже примерно одинаковые во всех дистрибутивах Linux.

Включаем логирование операций в samba

Для логирования действий пользователей на файловом сервере будем использовать модуль самбы full_audit. Если вы хотите выполнять логирование операций с файлами в один лог файл по всем доступным шарам, то добавляйте настройки аудита в глобальную секцию. Если же захотите разделить по шарам, то отдельно в каждую шару с небольшими изменениями. Я рассмотрю оба варианта. Для начала, настроим аудит по всем шарам в один общий файл. Добавляем в /etc/samba/smb.conf в секцию [global] следующие строки:

log level = 1 vfs:1
full_audit:prefix = %u|%I|%S
full_audit:success = connect, open, mkdir, rmdir, unlink, write, rename
full_audit:failure = connect, open, mkdir, rmdir, unlink, write, rename
full_audit:facility = local5
full_audit:priority = notice
vfs objects = full_audit

Поясню каждый параметр.

full_audit:prefix В каком формате будет выводиться информация о подключении: %u - имя пользователя, %I - его ip адрес, %S - название шары.
full_audit:success Какие удачные события будут логироваться. В приведенном примере по смыслу и так понятно, о чем речь. Полный список событий такой: chdir, chflags, chmod, chmod_acl, chown, close, closedir, connect, disconnect, disk_free, fchmod, fchmod_acl, fchown, fget_nt_acl, fgetxattr, flistxattr, fremovexattr, fset_nt_acl, fsetxattr, fstat, fsync, ftruncate, get_nt_acl, get_quota, get_shadow_copy_data, getlock, getwd, getxattr, kernel_flock, link, linux_setlease, listxattr, lock, lseek, lstat, mkdir, mknod, open, opendir, pread, pwrite, read, readdir, readlink, realpath, removexattr, rename, rewinddir, rmdir, seekdir, sendfile, set_nt_acl, set_quota, setxattr, stat, statvfs, symlink, sys_acl_delete_def_file, sys_acl_get_fd, sys_acl_get_file, sys_acl_set_fd, sys_acl_set_file, telldir, unlink, utime, write.
full_audit:failure То же самое, что выше, только для ошибок.
full_audit:facility Категория событий syslog, в которую будут попадать записи.
full_audit:priority Приоритет записей для syslog. Для самбы будет достаточно приоритета notice, чем ее записи по сути и являются.

Если вы хотите настроить вывод лога доступа с разных шар в отдельные файлы, то указанные выше параметры поместите не в глобальную, а отдельно в каждую секцию с шарой, изменив категории событий, сделав их в каждой шаре уникальными, например local5 и local6. Так же нужно будет в каждую шару отдельно добавить еще один параметр:

vfs objects = full_audit

После изменения конфигурации, не забудьте перезапустить самбу. Если больше ничего не делать, то логи посещений самбы польются в стандартный поток вывода для системных логов. В Centos в /var/log/messages. Это очень неудобно, поэтому далее настроим вывод логов в отдельный файл.

Вывод лога доступа к файлам samba в отдельный файл

Нам нужно отредактировать файл конфигурации rsyslog для направления вывода лога самбы в отдельный файл. В CentOS 7 открываем файл /etc/rsyslog.conf и добавляем в самый конец такую строку:

# mcedit /etc/rsyslog.conf
local5.notice -/var/log/samba/audit.log

Этим параметром мы направили вывод логов аудита посещений в отдельный файл audit.log. Если все оставить как есть, то информация о посещениях будет писаться как в отдельный файл, так и в общий системный. Чтобы в общий не писалось, редактируем еще одну строку, добавляя туда выделенный фрагмент:

*.info;mail.none;authpriv.none;cron.none;local5.none /var/log/messages

Сохраняем файл и перезапускаем rsyslog.

# systemctl restart rsyslog

Теперь все нормально. Все логи посещений шары на samba будут складываться в отдельный файл и только туда. Если у вас есть желание хранить логи на удаленном сервере, то воспользуйтесь моей статье на эту тему - настройка syslog-ng для удаленного сбора логов. Это сделать быстро и просто. Зачастую это может быть оправданно и удобно, особенно с точки зрения безопасности и не только логов от самбы.

Осталось малось - настроить ротацию логов. Сделать это надо обязательно, так как файл аудита будет расти очень быстро. Здесь ничего особенного, используем logrotate. Скорее всего у вас уже есть фал конфигурации logrotate для самбы. Он создается в момент установки. Отредактируем его, добавив новые параметры.

# mcedit /etc/logrotate.d/samba
/var/log/samba/audit.log {
 daily
 notifempty
 olddir /var/log/samba/old
 missingok
 sharedscripts
 copytruncate
 rotate 90
 compress
}

Я храню логи за последние 90 дней, ротацию делаю раз в день и складываю старые логи в отдельную папку. Если у вас в конфигурации есть параметр с маской, который захватывает сразу все файлы в директории /var/log/samba, например вот так:

/var/log/samba/*

То либо вынесите лог-файл с аудитом в отдельную директорию, либо измените маску.

Заключение

Я уже давно заметил один неприятный баг в самбе 4-й версии. Привожу пример того, как выглядит лог посещений файловой шары самбы с русскими названиями в именах на 3 и 4-й версии. В данном случае сначала версия 3.6.3, потом 4.6.2

Samba логирование операций с файлами

Samba пример аудита доступа к файлам

В первом случае отображаются полные корректные пути. Во втором случае на события типа open идут только обрывки названий директорий, по которым не понятен полный путь. Делаю важный акцент - только на события open. Если идут события создания, удаления, изменения, то пути уже корректны, даже если они русские. В принципе, события на доступ лично для меня обычно не важны. Интерес представляет только создание, изменение и особенно удаление файлов. С этим все в порядке. Аудит показывает корректный лог удаления файлов. Но все равно не приятно смотреть на неинформативный лог.

Возможно, дело не в 3-1 и 4-й версии. Я не проверял различные изменения в рамках одной и той же ветки. Просто посмотрел на имеющиеся у меня сервера. Там где 3-я версия все в порядке, там где 4-я везде такой бардак в логах. Если кто-то знает, как от него избавиться, прошу поделиться.

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

20 комментариев

  1. Александр

    почему то всё пишет в один лог файл, не создаются архивные лог файлы

  2. Николай

    С современными версиями самбы аудит с такими настройками работать не будет, ресурс будет тоже недоступен
    Вот это надо поменять:
    full_audit:success = connect, open, mkdir, rmdir, unlink, write, rename
    full_audit:failure = connect, open, mkdir, rmdir, unlink, write, rename
    Вот тут написано, какие Samba VFS operations поддерживаются
    https://www.samba.org/samba/docs/current/man-html/vfs_full_audit.8.html

  3. Станислав

    Здравствуйте. Настраиваю аудит файловой шары.
    Конфиг:

    [global]
    realm =
    workgroup =
    security = ads
    encrypt passwords = yes
    netbios name = fileserver
    server string = %h, Samba server %v
    domain master = no
    local master = no
    preferred master = no
    os level = 0
    domain logons = no
    dns proxy = no
    socket options = TCP_NODELAY
    unix charset = UTF-8
    dos charset = 866
    idmap config * : backend = tdb
    idmap config * : range = 3000-7999
    idmap config B-72 : backend = rid
    idmap config B-72 : range = 10000-999999
    winbind enum users = yes
    winbind enum groups = yes
    winbind refresh tickets = yes
    winbind use default domain = yes
    winbind offline logon = yes
    winbind cache time = 300
    template homedir = /srv/share/users/%D/%U
    template shell = /bin/bash
    load printers = no
    show add printer wizard = no
    printcap name = /dev/null
    disable spoolss = yes
    log level = 0 vfs:1
    min protocol = NT1
    max protocol = SMB3
    [it]
    comment= ИТ-Отдел
    writeable = yes
    browsable = yes
    # read list = @share
    valid users = "@Администраторы домена"
    path = /share/desk
    create mode = 0777
    directory mode = 0777
    log level = 1 vfs:1
    full_audit:prefix = Пользователь: %u Адрес: %I Действие: %S
    full_audit:success = unlinkat
    full_audit:failure = none
    full_audit:facility = local6
    full_audit:priority = alert
    vfs objects = full_audit

    Подскажите пожалуйста два вопроса:
    1. Нужно мониторить удаление и чтение документов в приоритете. Я не могу найти операцию чтения документа, нашел удаление файла\каталога unlinkat. Если я беру какой нибудь атрибут из манаула с samba.org он начинает спамить все операции в лог. Я подозреваю, что самба изменила атрибуты от версии к версии, и если атрибут не поддерживается самбой, он начинает писать все. Может конечно я не прав. В журнале нашел методом тыка unlinkat на удаление а чтение найти не могу, еще и знания английского подводят.
    Нужно: логировать чтение, изменение, удаление. Какие это атрибуты?:(

    Версия самбы:
    Version 4.13.13-Debian

    2. Второй вопрос не по теме, логирования, но лучше напишу в кучке. Как оперативно синхронизировать права между samba и active directory? Добавал пользователя в группу на контроллере, как мне быстро получить изменения на файловом сервере? Что бы не ждать пока правки долетят до ФС с контроллера.

    • Как-то решили проблему? Тот же вопрос назрел

      Вообще очень странно, уже не первая статья по которой делаю тут и опять не тот эффект как у ватора, неужели пакеты так быстро меняются что вся логика работы старых уже не актуальна и мануалы тоже?

  4. Евгений

    Добрый день, не понимаю откуда вот такая фигня сыплется,
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|file_id_create|ok|64776:262151:0
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|get_alloc_size|ok|0
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|readdir_attr|fail (Operation not supported)|/share/domain/bb/123 — копия (11).txt
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|fs_file_id|ok|9601214273768508304
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|listxattr|ok|/share/domain/bb/123 — копия (11).txt
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|file_id_create|ok|64776:262151:0
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|readdir|ok|
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|translate_name|fail (Operation not supported)|
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|telldir|ok|
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|getxattr|ok|/share/domain/bb/123 — копия (8).txt|user.DOSATTRIB
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|get_dos_attributes|ok|/share/domain/bb/123 — копия (8).txt
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|file_id_create|ok|64776:262175:0
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|get_alloc_size|ok|0
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|readdir_attr|fail (Operation not supported)|/share/domain/bb/123 — копия (8).txt
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|fs_file_id|ok|13271909740389099976
    Oct 24 16:03:29 fileserver smbd_audit: TEST/bb|192.168.7.135|bb|listxattr|ok|/share/domain/bb/123 — копия (8).txt
    ________
    smb.conf
    full_audit:success = rmdir rename delete open close mkdir closedir write unlink
    _________________________
    Ведь у меня нет connect, или как отключить эту информацию чтоб он не логировал все содержимое папки?

  5. Почему-то при попытке прикрутить логирование, отваливается сетевая корзина

    #-------ОБЩИЕ ПАРАМЕТРЫ СЕТЕВОЙ ШАРЫ-------#
    
            # Область домена
            realm = DV.PLAST
    
            # Домен без суффикса
            workgroup = DV
    
            # Присоединяем сервер Samba к домену
            security = ads
    
            # Юзаем пароли пользователей в защифрованном виде
            # encrypt passwords = true
    
            # Так нас будут видить windows-юзеры по сети
            netbios name = fgrb
    
            # Дескрипшн нашего сервака
            server string = %h FileGarbage
    
            # Работать как домен (НЕТ)
            domain master = no
    
            # Работать как локал мастер (НЕТ)
            local master = no
    
            # Работает в паре с domain masterom и если да, то гарантирует быть контроллером (НЕТ)
            preferred master = no
    
            # Определяет samba стать local mastero`ом для своей рабочей группы
            # Чем выше значение тем меньше у конкурирующего сервера шансов
            os level = 0
    
            # Тrue для того, чтобы samba выполняла функции ПЕРВИЧНОГО КОНТРОЛЕРА ДОМЕНА (PDC)
            # domain logons = false
    
            # Работать как DNS прокси (НЕТ)
            dns proxy = no
    
            # Кодировочка
            unix charset = UTF-8
            dos charset = 866
    
    # Конфигурация для домена DV.PLAST и его пользователей и групп
            idmap config * :              backend = tdb
            idmap config * :              range   = 3000-7999
            idmap config DV : backend = rid
            idmap config DV : range   = 10000-999999
    
    #-------ПАРАМЕТРЫ WINBIND-------#
            winbind enum users = yes
            winbind enum groups = yes
    
            # Автоматически обновлять билет Kerberos модулем pam_winbind.so
            winbind refresh tickets = yes
    
            # Использовать user вместо DOMAIN\user
            winbind use default domain = yes
    
            # Если домен недоступен, то авторизуемся оффлайн
            winbind offline logon = yes
    
            # Период кэширования учетных записей
            winbind cache time = 300
            template shell = /bin/bash
    
    # ОТКЛЮЧЕНИЕ ПОДДЕРЖКИ СЕТЕВЫХ ПРИНТЕРОВ
            load printers = no
            show add printer wizard = no
            printcap name = /dev/null
            disable spoolss = yes
    
    # Корзина
            vfs object = recycle
    
            recycle:repository = /Data/recycle/%S
    
            # Сохранять дерево каталогов для удаленных файлов.
            recycle:keeptree = yes
    
            # Если имена удалённых файлов совпадают, то к удаленном файлу в начале имени добавляется Copy #N of.
            recycle:versions = yes
    
            # Устанавливает дату файла на момент удаления
            recycle:touch = yes
    
            # Список исключений папок, файлы из которых не будут попадать в корзину
            recylce:excludedir = tmp temp cache
    
            # Список исключений файлов (по маске) расширений
            recycle:exclude = ~$* *.tmp *.TMP *.temp *.bak *.log .DS_Store *.o *.obj *.~?? *.trace
    
            # Папка для удалённых файлов
            recycle:repository = /Data/recycle/.trash
    
    # Логи
    #       log level = 1 vfs:1
    #       full_audit:prefix = %u|%I|%S
    #       full_audit:success = connect, open, mkdir, rmdir, unlink, write, rename
    #       full_audit:failure = connect, open, mkdir, rmdir, unlink, write, rename
    #       full_audit:facility = local5
    #       full_audit:priority = notice
    #       vfs objects = full_audit
    
    # Общие папки
    [Shared]
            comment = Общая папка
            path = /Data/Shared
            read only = no
    
            hide unreadable = yes
    
    [RECYCLE$]
            path = /Data/recycle
    #       inherit permissions = yes
            read only = no
    • Как решил проблему? У меня похожая ситуация, прикрутил логирование перестала работать корзина.

      • Проблема решилась таким образом:
        вот так работает и корзина и аудит:
        vfs objects = full_audit, recycle
        ..........
        Вот так коректно работать не будет и корзина и аудит:
        vfs objects = full_audit
        ......
        vfs objects = recycle
        ......

  6. Дмитрий

    В свежей самбе аудит корректно работает вообще?

    Получаю это:
    "Could not find opname mkdir, logging all"
    И пишет вообще ВСЕ, засирая логи, которые пухнут как на дрожжах.
    Попробую найти нужные методы через лог.

    • Статья давно писалась. Может в новых версиях что-то поменялось? Хотя софт этот консервативный. Конфиги почти не меняются.

    • Сергей

      операция mkdir сейчас называется mkdirat
      полный список есть здесь https://www.samba.org/samba/docs/4.13/man-html/vfs_full_audit.8.html – вместо 4.13 можно свою версию подставить

      У меня вот другой вопрос в логе куча операций create_file, хотя я файлы не создаю. Запись create_file появляется просто даже при открытии любой папки. Кто-то сталкивался с этим? Как это побороть?

  7. Кирилл

    Не заработало по отдельным шарам пока не прописал "vfs objects = full_audit" в [global] релиз debian 10 samba 4.9.5 Может оно так и должно быть но из статьи не понял и полез прописывать отдельные настройки в общие папки.

    • Я вроде так же в статье делаю.

      • Кирилл

        Я не правильно выразился или не точно, я не стал ничего прописывать в [global], а сразу писал в свою секцию [obmen] и у меня такой вариант почему то не работал. А прописав в [global] "vfs objects = full_audit" настройки секции [obmen] подцепились. Я это как уточнение для тех кто будет по вашему мануалу делать как направление куда копать.

  8. Максим

    Спасибо! Реально сильно выручило применительно к проблемам с логами в OpenMediaVault

  9. Андрей

    Здравствуйте
    samaba 4.9.5

    столкнулся со следующей проблемой:
    в лог не пишутся события write, pwrite, read, pread при этом все остальные есть

    конфиг следующий

    [обменник1]
    comment = share directory
    inherit acls = yes
    inherit owner = yes
    path = /storage/Обменник1
    inherit permissions = yes
    hide unreadable = yes
    writeable = yes
    read only = no
    browseable = yes
    # guest ok = yes
    valid users = samara, buzuluk, volgograd, krym, tolyatti, ulyanovsk, otradnyj, kogalym, mirniy, krasnodar, samaratc, crimeatc, moskva, nnovgorod, sevastopol, chelyabinsk,
    vfs objects = recycle crossrename full_audit
    full_audit:prefix: = %u|%I|%L|%m|%s
    full_audit:success = connect, disconnect, mkdir, rmdir, read, pread, sendfile, write, rename, pwrite, fchown, chmod, fchmod
    full_audit:failure = open, connect, disconnect, mkdir, rmdir, read, pread, sendfile, write, rename, pwrite, fchown, chmod, fchmod
    full_audit:failure = none
    full_audit:facility = local5
    full_audit:priority = notice
    recycle:repository = /storage/recycle/.recycle
    btrfs: manipulate snapshots = no
    recycle:exclude = *.tmp,*.temp,*.o,*.obj,~$*,*.~??,*.trace,*.VOB,*.mp4,*.avi,*.crdownload,~*,*TMP,*.iso,*.flv,*.webm,*.MOV,*.mpg,*.wmv,*.exe
    recycle:excludedir = /tmp,/temp,/cache
    recycle:keeptree = yes
    recycle:touch = yes
    recycle:touch_mtime = yes
    recycle:versions = yes
    recycle:maxsize = 0
    recycle:directory_mode = 0777

    в чем может быть продлема?

  10. Виталий (kibernetik)

    По поводу некорректного отображения лога открытия. Решение, указать в [global], unix charset = UTF-8.
    Знаю что статья уже старая, но часто пользуюсь заметками этого сайта для настройки серверов. Так что может кому тоже поможет)

    • Эта статья будет еще долго актуальна, потому что параметры логирования в самбе вряд ли часто меняются. За наводку спасибо, попробую. Я в свое время так и не решил этот вопрос.

  11. Михаил

    Здравствуйте!
    Пробую настроить аудит самбы, в принципе все работает. Но есть пару вопросов, может вы можете ответить на них.
    1. Нигде не могу найти значений параметров full_audit:success. Не подскажете где можно посмотреть?
    2. В лог пишутся дублирующиеся сообщения:
    Jan 18 10:15:40 zion smbd_audit: test|172.16.12.11|pc|connect|ok|share
    Jan 18 10:15:40 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:40 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:40 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|mkdir|ok|Новая папка
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|Новая папка
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|.
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|Новая папка
    Jan 18 10:15:52 zion smbd_audit: test|172.16.12.11|pc|open|ok|r|Новая папка

    часть конфигурации отвечающая за модуль аудит:

    vfs objects = full_audit
    full_audit:failure = none
    full_audit:success = connect disconnect mkdir rmdir rename
    full_audit:prefix = %u|%I|%m
    full_audit:facility = local0
    full_audit:priority = notice

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar