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

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

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

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужно пройти вступительный тест.

Введение

У меня есть две статьи по настройке файлового сервера 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-я везде такой бардак в логах. Если кто-то знает, как от него избавиться, прошу поделиться.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Вы научитесь делать профессиональный подбор конфигурации, управлять процессами, обеспечивать безопасность, выполнять развертывание, настройку и обслуживание сетей. Проверьте себя на вступительном тесте и смотрите подробнее программи ссылке.

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

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

Автор Zerox

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

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

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

    #-------ОБЩИЕ ПАРАМЕТРЫ СЕТЕВОЙ ШАРЫ-------#
    
            # Область домена
            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
  2. Дмитрий

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

    Получаю это:
    "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 появляется просто даже при открытии любой папки. Кто-то сталкивался с этим? Как это побороть?

  3. Кирилл

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

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

      • Кирилл

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

  4. Максим

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

  5. Андрей

    Здравствуйте
    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

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

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

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

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

  7. Михаил

    Здравствуйте!
    Пробую настроить аудит самбы, в принципе все работает. Но есть пару вопросов, может вы можете ответить на них.
    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