Ранее я неоднократно рассказывал, как настроить файловый сервер samba для совместной работы с файлами. При совместной работе часто бывает нужно знать, кто и когда что-то сделал с тем или иным файлом, а конкретно, кто удалил файл. По-умолчанию, такой лог не ведется, нужно настраивать отдельно. Займемся настройкой логирования операций с файлами в данной статье.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Содержание:
Введение
У меня есть две статьи по настройке файлового сервера samba:
- Настройка Samba с интеграцией в Active Directory.
- Быстрая настройка самбы с доступом по паролю или 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
В первом случае отображаются полные корректные пути. Во втором случае на события типа open идут только обрывки названий директорий, по которым не понятен полный путь. Делаю важный акцент - только на события open. Если идут события создания, удаления, изменения, то пути уже корректны, даже если они русские. В принципе, события на доступ лично для меня обычно не важны. Интерес представляет только создание, изменение и особенно удаление файлов. С этим все в порядке. Аудит показывает корректный лог удаления файлов. Но все равно не приятно смотреть на неинформативный лог.
Возможно, дело не в 3-1 и 4-й версии. Я не проверял различные изменения в рамках одной и той же ветки. Просто посмотрел на имеющиеся у меня сервера. Там где 3-я версия все в порядке, там где 4-я везде такой бардак в логах. Если кто-то знает, как от него избавиться, прошу поделиться.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
почему то всё пишет в один лог файл, не создаются архивные лог файлы
С современными версиями самбы аудит с такими настройками работать не будет, ресурс будет тоже недоступен
Вот это надо поменять:
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
Здравствуйте. Настраиваю аудит файловой шары.
Конфиг:
[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? Добавал пользователя в группу на контроллере, как мне быстро получить изменения на файловом сервере? Что бы не ждать пока правки долетят до ФС с контроллера.
Как-то решили проблему? Тот же вопрос назрел
Вообще очень странно, уже не первая статья по которой делаю тут и опять не тот эффект как у ватора, неужели пакеты так быстро меняются что вся логика работы старых уже не актуальна и мануалы тоже?
Добрый день, не понимаю откуда вот такая фигня сыплется,
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, или как отключить эту информацию чтоб он не логировал все содержимое папки?
Почему-то при попытке прикрутить логирование, отваливается сетевая корзина
Как решил проблему? У меня похожая ситуация, прикрутил логирование перестала работать корзина.
Проблема решилась таким образом:
вот так работает и корзина и аудит:
vfs objects = full_audit, recycle
..........
Вот так коректно работать не будет и корзина и аудит:
vfs objects = full_audit
......
vfs objects = recycle
......
В свежей самбе аудит корректно работает вообще?
Получаю это:
"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 появляется просто даже при открытии любой папки. Кто-то сталкивался с этим? Как это побороть?
Не заработало по отдельным шарам пока не прописал "vfs objects = full_audit" в [global] релиз debian 10 samba 4.9.5 Может оно так и должно быть но из статьи не понял и полез прописывать отдельные настройки в общие папки.
Я вроде так же в статье делаю.
Я не правильно выразился или не точно, я не стал ничего прописывать в [global], а сразу писал в свою секцию [obmen] и у меня такой вариант почему то не работал. А прописав в [global] "vfs objects = full_audit" настройки секции [obmen] подцепились. Я это как уточнение для тех кто будет по вашему мануалу делать как направление куда копать.
Спасибо! Реально сильно выручило применительно к проблемам с логами в OpenMediaVault
Здравствуйте
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
в чем может быть продлема?
По поводу некорректного отображения лога открытия. Решение, указать в [global], unix charset = UTF-8.
Знаю что статья уже старая, но часто пользуюсь заметками этого сайта для настройки серверов. Так что может кому тоже поможет)
Эта статья будет еще долго актуальна, потому что параметры логирования в самбе вряд ли часто меняются. За наводку спасибо, попробую. Я в свое время так и не решил этот вопрос.
Здравствуйте!
Пробую настроить аудит самбы, в принципе все работает. Но есть пару вопросов, может вы можете ответить на них.
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
full_audit:success = connect disconnect mkdir rmdir rename open