Skip to content


Детальное логирование в Samba

Иногда ну очень нужно узнать кто же создал или удалил определенный файл с файлового сервера. Стандартный лог-файл, который Samba пишет при настройках по-умолчанию, не позволяет это сделать, так как в него пишутся только события подключения и отключения от общих ресурсов. Пример стандартного лог-файла:

[2010/03/05 20:45:00, 1] smbd/service.c:make_connection_snum(1042)
host44 (10.44.44.44) connect to service PUB initially as user vasya (uid=503, gid=501) (pid 2707)
[2010/03/05 20:47:34, 1] smbd/service.c:close_cnum(1239)
host44 (10.44.44.44) closed connection to service PUB

Чтобы лог-файл был более подробным, в smb.conf нужно добавить следующие строки:

log level = 0 vfs:2
max log size = 0
syslog = 0

[PUBLIC]
  comment = writeable folder
  path = /var/spool/samba/public
  valid users = @admins
  public = yes
  writable = yes
  printable = no
  vfs objects = full_audit
  full_audit:prefix = %u|%I
  full_audit:failure = none
  full_audit:success = mkdir rmdir open read pread write pwrite sendfile rename unlink lock
  full_audit:facility = local5
  full_audit:priority = debug

В параметрах шары все, что касается логирования, перечислено в строках 12-17. В 13-ой строке указываем префикс (логин и IP-адрес клиента). В 15-ой строке перечисляем операции, которые должны подвергаться аудиту (которые будут записываться в лог-файл). В 16-ой и 17-ой строках указываем параметры для syslog. Затем в /etc/syslog.conf добавляем строку

local5.debug  -/var/log/samba/audit.log

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

В результате в файле /var/log/samba/audit.log появляются примерно такие записи:

Mar 5 21:04:01 serv smbd_audit: vasya|10.44.44.44|pwrite|ok|dir1/somefile.exe
Mar 5 21:04:01 serv smbd_audit: ann|10.44.44.92|open|ok|r|dir2/database.txt
Mar 5 21:04:01 serv smbd_audit: editor|10.44.44.34|pread|ok|dir1/somefile.exe

Posted in *nix, Howto.

Tagged with .


16 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Добрый says

    Довольно таки находчиво )) У меня как раз на медиасерваке общий доступ к файлообменнику, теперь можно и стату по нему гнать директору на радость )

  2. hic says

    Спасибо большое за статью. Очень помогло :)

  3. Тодоров says

    Спасибо большущее, отличная статья.
    Если можно, добавлю свои две копейки: в большинстве современных дистрибутивов вместо syslog используется syslog-ng. Чтобы это заработало, нужно добавить в /etc/syslog-ng/syslog-ng.conf следующие строчки:

    destination local5 { file("/var/log/samba/audit.log"); };
    log { source(src); filter(f_local); destination(local5); };

  4. Денис says

    Присоединяюсь к благодарностям, статья очень четко и подробно описана.

  5. Сергей says

    Подскажите а как контролировать размер файла audit.log, а то он слишком быстро растёт

  6. Admin says

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

  7. Валерий says

    Аудит работает, НО в логи пишутся одинаковые строки. Т.е. при записи в папку файла 5 кб, в логах две записи. А вот при записи 5Мб этих записей становиться более 300. Может кто знает как избавится. Нашел, что syslog-ng позволяет группировать одинаковые записи, но как это сделать?

  8. Admin says

    Валерий, а что у Вас в строке 15 (там где full_audit:success)? Может, там есть лишние операции, избавление от логирования которых и решит Вашу проблему?

  9. foxiys says

    Зачёт!!! Опять в точку, то что нужно! А я голову ломал, как обнаружить злостных пользователей, которые удаляют файлы и не признаются:))

  10. vova_babkin says

    файл audit.log создается, но он пустой... в него ничего не записывается
    -rw-r----- 1 syslog adm 0 мая 3 14:23 audit.log

  11. Sytchov says

    Помогите неумёхе, как добавлять пользователей с ip-адресами в 13 строке - через запятую, пробел, точку с запятой или новой строкой?

  12. Admin says

    Sytchov, я, честно говоря, не понял Вашего вопроса. Зачем в 13-ой строке добавлять пользователей?

    Сторочка full_audit:prefix = %u|%I означает, то самба будет писать в лог-файл логин и IP-адрес клиента. И все. В 13-ой строке указывается что именно писать в лог-файл. Ограничения по доступу в шару на уровне IP-адресов и логинов - это из совсем другой оперы.

  13. Алексей says

    Привет! Спасибо за статью! Только вопрос а если мне нужно для нескольких расшаренных ресурсов сделать логирование?

  14. Admin says

    Алексей, думаю, ответ очевиден - прописать указанные в статье параметры для каждого расшаренного ресурса.

  15. Александр says

    Доброго времени суток.
    Шикарная статья.
    Такой вопрос при доступе к шаре из под винды в лог пишется не только вход в шару но и отклик как я понимаю то есть в лог скидывается все что есть в папке, но параметр open не нельзя удалять возможно есть какая то тонкая настройка.

  16. Сергей says

    ALT+F прошивка хранилища DNS-320. Даёт доступ к настройкам шары через HTTP-админку. Есть поле vfs objects, есть строковое значение. Переменная же собирается отдельно, правильно я понял?
    Как в одну строчку записать всё, не подскажите?

You must be logged in to post a comment.