Skip to content


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

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

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

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

  1. log level = 0 vfs:2
  2. max log size = 0
  3. syslog = 0
  4.  
  5. [PUBLIC]
  6.   comment = writeable folder
  7.   path = /var/spool/samba/public
  8.   valid users = @admins
  9.   public = yes
  10.   writable = yes
  11.   printable = no
  12.   vfs objects = full_audit
  13.   full_audit:prefix = %u|%I
  14.   full_audit:failure = none
  15.   full_audit:success = mkdir rmdir open read pread write pwrite sendfile rename unlink lock
  16.   full_audit:facility = local5
  17.   full_audit:priority = debug

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

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

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

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

Размещено в категории  *nix, Howto. Теги: .

Раздаем права в samba по IP-адресу

Представим ситуацию: есть samba-пользователь vasya, который ходит на samba-сервер с компьютеров с IP-адресами 172.16.0.7 и 172.16.0.13, и нужно сделать так, чтобы при подключении с 172.16.0.7 у него был доступ на запись в общий ресурс NashaShara, а при подключении с 172.16.0.13 – доступ только на чтение. Решается эта задача с помощью макро-подстановок (man 5 smb.conf, раздел «VARIABLE SUBSTITUTIONS») следующим образом:

  1. Создаем директорию /etc/samba/per-ip-configs
  2. В директории /etc/samba/per-ip-configs создаем файл с именем 172.16.0.7.conf:
    1. [NashaShara]
    2.     comment = Read-Write access
    3.     path = /var/spool/samba/nashashara
    4.     valid users = vasya
    5.     write list = vasya
    6.     create mask = 644
    7.     directory mask = 755
    8.     printable = no
  3. Потом в той же директории /etc/samba/per-ip-configs создаем файл уже с именем 172.16.0.13.conf:
    1. [NashaShara]
    2.     comment = Read-only access
    3.     path = /var/spool/samba/nashashara
    4.     valid users = vasya
    5.     create mask = 644
    6.     directory mask = 755
    7.     printable = no
  4. В конфигурационном файле smb.conf в самом начале раздела, где описываются общие ресурсы, добавляем строку:
    1. include = /etc/samba/per-ip-configs/%I.conf

Таким образом, теперь при подключении нового клиента samba будет подгружать ту часть конфига, которая соответствует IP-адресу клиента (он подставляется вместо %I). Если клиент подключится с другого IP-адреса (для которого нет соответствующего файла в /etc/samba/per-ip-configs) и в основном конфиге smb.conf не будет определения для общего ресурса NashaShara, то клиент просто этот ресурс не увидит и доступа к нему не получит.

Размещено в категории  *nix, Howto. Теги: , .

МЕТА - Украина. Рейтинг сайтов