http://www.opennet.ru/base/net/samba_tune_auth.txt.html
Вместе с Samba поставляется ряд так называемых "VFS-модулей" (Virtual
File System), с их помощью становится возможным выполнение таких
действий как протоколирование процесса работы на сетевых папках,
организация сетевой корзины, теневое копирование (shadow copy) данных,
подключение антивирусных модулей и т.п. В частности, для
протоколирования действий пользователей в Samba имеется три VFS-модуля:
audit, extd_audit, full_audit. Для поставленной нами задачи
мы будем использовать последний из них.
У данного модуля, впрочем как и у других, есть ряд параметров, с помощью
которых производится его конфигурирование и настройка. Указание
параметров производится в следующем виде:
имя_модуля:параметр1
имя_модуля:параметр2=значение1
имя_модуля:параметр3=значение2 значение3 значение4
Все настройки производятся в главном конфигурационном фале Samba -
smb.conf. Полный список параметров можно, вернее даже лучше
всего, посмотреть в исходном коде модуля, который находится в директории
samba-3.0.23d/source/vfs. Давайте построчно рассмотрим
вышеприведенный конфиг:
vfs objects = full_audit
Подключает использование данного модуля при работе с указанной сетевой
папкой
full_audit:prefix= %m|%U
Задает возможность с помощью макропеременных Samba подставлять нужные
значения в качестве источника события на сетевой папке при
протоколировании действий. В нашем случае в качестве источника будет
производится подстановка вида
NetBIOS_имя_комьютера|имя_пользователя и в log-файл будет
записываться что-то вроде:
Mar 5 08:47:51 calypso smbd_audit: comp1|username|mkdir|ok|/mnt/hdd1/new folder
full_audit:success=write rename unlink mkdir rmdir
full_audit:failure=write rename unlink mkdir rmdir
Модуль протоколирует действия которые завершились успешно - параметр
success и закончились неудачей - failure
соответственно. Как, наверное уже понятно, для данной сетевой папки мы
будем фиксировать как "успех" так и "неудачу" создания, переименования и
удаления файлов и директорий. Если же, например, нужно протоколировать
ВСЕ неудачные действия на шаре то параметр full_audit:failure
нужно не указывать и по умолчанию он будет фиксировать все "неудачи".
full_audit:facility=LOCAL5
full_audit:priority=INFO
Здесь мы остановимся немного подробнее.
Samba умеет вести журналы как самостоятельно так и с помощью системы
Syslog. Для подробного протоколирования действий
пользователей второй вариант является более предпочтительным, так как с
его помощью можно более гибко настроить журналирование. Данная
гибкость, в частности, позволит нам вести протоколы работы с каждой
сетевой папкой в отдельный файл.
Для определения источника журналируемых записей Syslog имеет
такие понятия как "категория" - facility и "приоритет" -
priority. Категория - это ряд предописанных значений,
событий, вроде сообщений о регистрации пользователей, сообщений от
системного планировщика, ядра, почтовой системы и т.п. Применительно к
нашей задаче имеются зарезервированные категории local0 -
local7, которые не привязаны ни к какому системному событию и
могут быть свободно использованы администратором.
Понятие "приоритет" означает уровень важности поступаемых сообщений.
Имеется 8 уровней приоритета: debug, info, warning, notice,
warning, err, crit, alert, emerg.
Нам необходимо настроить протоколирование таким образом, чтобы протоколы
с сетевых папок велись в отдельные файлы: каждая "шара" - в свой файл
журнала. Вот здесь нам на помощь и приходят вышеописанные уровни
приоритета. Мы каждой системной папке присвоим свой уникальный уровень
приоритета в пределах выбранной категории, а syslog
сконфигурируем таким образом, чтобы он разделял протоколы, поступающие
от сетевых папок. Т.е. будут использоваться приоритеты INFO и
NOTICE категории LOCAL5.
Приступим к настройке syslogd.
По умолчанию во FreeBSD все сообщения класса notice
перенаправляются в файл /var/log/messages. Нам сие не нужно,
поэтому нужно переконфигурировать syslog дабы разделить поступаемые
классы сообщений. Сделаем это следующим образом: строку
*.notice ...
заменим на
local5.=info /var/log/samba/docs.log
local5.=notice /var/log/samba/pub.log
local0.notice;local1.notice;local2.notice;local3.notice /var/log/messages
local4.notice;local6.notice;local7.notice /var/log/messages
Таким образом мы выделили приоритеты info и notice
категории local5 и перенаправили их в соответствующие файлы
журналов и, на всякий случай, для других приложений перенаправили
остальные категории local0-local7 приоритета
notice в /var/log/messages
Теперь очередь за настройкой сетевой корзины. За это
отвечает VFS-модуль recycle. У него имеются следующие
параметры:
recycle:repository=/mnt/hdd2/lost_n_found
Абсолютный путь к папке, в которую будут перемещаться удаленные на
сетевой шаре файлы и директории.
recycle:exclude = *.tmp | *.TMP | ~$* | ~WRL*
Список регулярных выражений для имен файлов которые при удалении будут
удаляться, а не перемещаться в корзину. Каждое выражение отделяется от
соседних символом "|".
ВНИАНИЕ! Маска файла и символ "|" обязательно должны
разделяться символом пробела.
recycle:excludedir = /mnt/hdd1/temp
Список директорий удаление файлов и директорий из которых не переместит
их в сетевую корзину и они на самом деле будут удалены.
recycle:maxsize=104805760
Максимальный размер файла в байтах, который может помещаться в корзину,
если размер больше - файл будет удален. В данном случае в корзину будут
попадать файлы размером не более 10 Мб.
recycle:keeptree
При удалении файла сохранять весь файловый путь относительно сетевой
папки. Т.е. например при удалении файла file.txt,
находящегося по пути path/to/file относительно сетевой шары
[pub] с абсолютным путем /mnt/hdd2, в сетевой
корзине будет создан файловый путь/mnt/hdd2/path/to/file и в
эту директорию будет помещен file.txt.
recycle:versions
При удалении одного и того же файла filename, находящегося по
одному и тому же сетевому пути, в сетевой корзине будут создаваться
копии файла с именами Copy #1 filename, Copy #2 filename и
т.д.