Настройка Samba.

Задача – сделать файловый сервер, к которому будут иметь доступ все клиенты из локалки, при этом в логи нужно писать кто что удалил и проверять трафик на лету на вирусы. Маны на английском языке можно посмотреть в архиве дистрибутива в директории doc. Заходим в /usr/ports/net/samba3 и инсталируем порт. В окошке конфигурации нужно выбрать с какими опциями собираем, тут нужно поставить галочку на Syslog, т.к. нам интересно логгировать кто что делает с папками. Текущая версия 3.0.32. Добавляем /etc/rc.conf автозагрузку samba.

# cd /usr/ports/net/samba3
# make install clean
# echo ‘samba_enable=”YES”‘ >>/etc/rc.conf

После установки дефолтный конфиг будет находиться /usr/local/etc/smb.conf. Конфиг состоит из двух секций [global] – глобальные настройки, [homes] – расшаренные папки. Ниже приведен мой конфиг:

[global]
interfaces = 192.168.210.0/24
workgroup = ICC_GROUP
netbios name = Icc_Ukraine
server string = Icc Ukraine
security = share
log file = /var/log/samba/log.%m
log level = 0 vfs:2
max log size = 0
os level = 65
domain master = yes
local master = yes
preferred master = yes
load printers = No
dns proxy = No
unix charset = koi8-u
dos charset = cp866
display charset = cp866
preserve case=yes
short preserve case=yes
wins support = yes

[Test_vscan_clamav]

path = /mnt/share1
vfs object = vscan-clamav
vscan-clamav: config-file = /usr/local/etc/samba-vscan/vscan-clamav.conf
guest ok = yes
writable = yes
create mask = 0644
directory mask = 0755

[Temp2_full_audit ]

path = /mnt/da1s/server
guest ok = yes
writable = yes
create mask = 0644
directory mask = 0755
vfs objects = full_audit
full_audit:failure = mkdir rmdir open close read pread write pwrite rename unlink
full_audit:success = mkdir rmdir open close read pread write pwrite rename unlink
full_audit:prefix = %m|%I|%U

Ну а теперь подробнее:
interfaces = 192.168.210.0/24 – на каком интерфейсе слушается, у меня стоит на сервере, где имеется 2 сетевухи, с этим параметром samba будет работать на внутреннем;
workgroup, netbios name, server string – название рабочей группы, имя компа в сети и его описание;
security = share – режим доступа к папкам -открытый, без ограничения, бывают режимы user, domen, ADS, server – об этом можно почитать в HOWTO;
log file = /var/log/samba/log.%m – местоположение отладочной информации,%m – по каждому пользователю будет отдельный файл;
log level = 0 vfs:2(синоним debuglevel) – тут указывается уровень отладки 0 (только ошибки), для vfs модуля -2 – что отвечает значению 2 не знаю, 1 – это ошибки и предупреждения;
max log size = 0 – тут указывает размер в килобайтах отладочных файлов, 0 – размер не ограничивается;
os level = 65
domain master = yes Основной мастер просмотра;
local master = yes # Локальный мастер просмотра;
preferred master = yes # Предпочитаемый сервер просмотра;
Существует служба просмотра Windows, которая определяет какие шары есть в сети. Вместо того, чтобы каждый клиент производил просмотр самостоятельно в Windows сетях есть имеется основной сервер просмотра (master browsers) и дополнительный (backup browsers), которые предоставляет список просмотра клиентам. Samba может выступать как основным, так и дополнительным сервером просмотра. В конфиге включается основной серевер просмотра (domain master), его функции – собирать списки просмотра с локальных мастеров просмора. Для одной рабочей группы только один сервер Samba может быть мастер просмотра. Доменный мастер просмотра предпочтитильно должен быть и локальным мастером просмотра (local master). Если предпочитаемый сервер просмотра включен (preferred master), то после запуска nmbd иницирует выборы сервера просмотра. Тот у кого значение os level больше выиграет, при значении 65 Samba выигрывает у любых Windows-машин.
dns proxy = No – отключение перенаправление в ДНС, если имя не найдено в базе WINS, кроме того при перенаправлении в ДНС порождается еще один процесс nmbd, а это не очень хорошо;
unix charset = koi8-u
dos charset = cp866
display charset = cp866 # Кодировки взависимости от клиента;
preserve case=yes
short preserve case=yes # эти 2 параметры определяют сохранение регистра в названии файлов при записи новых файлов;
wins support = yes # Samba будет выступать еще и WINS-сервером

На этом глобальные параметры заканчиваются, дальше идут описания шар. Тут применяются так называемые vfs objects (Virtual File System) – модули, которые отвечают за определенную работу системы ввода-вывода. В этом примере используем модуль full_audit для логирования действий пользователя с сетевой папкой и vscan-clamav для проверки на вирусы антивирусом Clamav сетевых папок. Сами модули находятся в /usr/local/lib/samba. Но тут есть один минус – к Samba-шарам можно подключать несколько модулей, их можно перечислить через проблел в vfs objects, но модуль vscan-clamav работает только тогда, когда он один прописан или же стоит последним, при этом модули, перечисленные до него не работают. Устанавливаем порт /usr/ports/security/samba_vscan. Текущая версия 0.3.6_c2. Также ставим Clamav /usr/ports/securiyu/clamav. Текущая версия 0.94_1. Добавляем в /etc/rc.conf:
clamav_freshclam_enable=”YES”
clamav_clamd_enable=”YES”
Сначала смотрим в конфиг антивируса /usr/local/etc/clamd.conf – он вполне работоспособный без изменений, я изменил только следующее:
#LogFile /var/log/clamav/clamd.log
LogSyslog yes
LogFacility LOG_LOCAL1
LogVerbose yes
LocalSocket /var/run/clamav/clamd
Смотрим конфиг /usr/local/etc/samba-vscan/vscan-clamav.conf – тоже конфиг рабочий, поменял только следующее:
infected file action = quarantine
quarantine directory = /tmp/smb_infected
clamd socket name = /var/run/clamav/clamd
Тут задано действие – переместить зараженные файлы в /tmp/smb_infected. Все остальные опции можно таже поменять, но это дело вкуса. Тут важно, чтобы LocalSocket и clamd socket name совпадали. Тут еще минус у samba-vscan, что он не понимает LogFacility, пишет в логи в /var/log/messages через уровень *.notice. Сделано так в /etc/syslog.conf:
local1.* /var /log/clama/clamd.log
*.notice убрано из /var/log/messages
*.notice;local0.none;local2.none;local3.none /var/log/notice.log
!smbd_vscan-clamav
*.* /var/log/clamav/ smbd-vscan.log
В /etc/newsyslog.conf:
/var/log/clamav/clamd.log 644 5 5000 * ZC
/var/log/clamav/smbd-vscan.log 644 5 5000 * ZC
/var/log/notice.log 644 5 5000 * ZC

И не забываем предварительно создать файлы логов, делаем рестарт:
# /etc/rc.d/syslogd restart
# /usr/local/etc/rc.d/samba restart

Смотрим в логи и наблюдаем что пишется:
Oct 15 12:29:49 server smbd_vscan-clamav[65225]: samba-vscan (vscan-clamav 0.3.6c beta5) connected (Samba 3
.0), (c) by Rainer Link, OpenAntiVirus.org
Oct 15 12:29:49 icc smbd_vscan-clamav[65225]: INFO: connect to service Test_vscan_clamav by user nobody

В рассмотренном примере при заходе в папку Test_vscan_clamav весь трафик с папкой будет проверяться на вирусы. В описании шары:
[Test_vscan_clamav] – так будет отображаться название шары в рабочей группе;
patch – физческое расположение разшаренной папки;
guest ok = yes – доступ разрешен для всех;
writable = yes – разрешена запись;
create mask = 0644 – маска для записываемых файлов;
directory mask = 0755 – маска для записываемых директорий.

Теперь рассмотрим как работает модуль full_audit. Читаем мануал man vfs_full_audit, как видно мониторить им можно очень много параметров, но нам столько не нужно, поэтому, ограничимся теми, что указаны в конфиге:
full_audit:failure – параметры мониторинга ошибок;
full_audit:success – параметры мониторинга удачных действий;
mkdir – создание директории;
rmdir – удаление директории;
open – в какую папку заходили или открывали файл;
close – с какой папки вышли или закрыли файл;
read, pread – чтение(открытие) файла;
write,pwrite – запись (изменение) файла/папки;
rename – переименование файла/папки;
unlink – удаление.
full_audit:prefix = %m|%I|%U – переменные, используемые в samba – о них можно почитать в мане man smb.conf.
%m – NetBios-имя клиентской машины;
%I – IP-номер клиентской машины;
%U – пользователь, под которым залогинился на локальную машину;
full_audit: facility = local4 – пишем в LOCAL4 syslog;
full_audit: priority = INFO – приоритет INFO.
Лирическое отсупление – в Syslog пишутся логи от источников, которые имеют категорию(facility) и приоритет (priority). Категория – ряд определенных значений от разных источников (почта, ядро, крон,…). Существуют зарезервированые категории local0-local7, которые ни к какому сервису не прикручены, а сделаны для нужд администраторов. Приоритет – уровень важности события, есть 8 уровней – debug, info, notice, warning, err, crit, alert, emerg.

Теперь пишем в /etc/syslog.conf:
local4.info /var/log/audit.log
Рестартуем syslog и смотрим в логи:
#/etc/rc.d/syslogd restart
# tail -f /etc/syslog.conf
Oct 17 11:46:26 icc smbd_audit: adm|192.168.210.8|admin|close|ok|01-July-2008/var_named_etc/namedb/putty
.exe
Oct 17 11:46:26 icc smbd_audit: adm|192.168.210.8|admin|open|ok|r|01-July-2008/var_named_etc/namedb/putty.exe
Oct 17 11:46:26 icc smbd_audit: adm|192.168.210.8|admin|pread|ok|01-July-2008/var_named_etc/namedb/putty.exe
Oct 17 11:46:26 icc smbd_audit: adm|192.168.210.8|admin|pread|ok|01-July-2008/var_named_etc/namedb/putty.exe
Oct 17 11:46:41 icc smbd_audit: adm|192.168.210.8|admin|close|ok|01-July-2008/var_named_etc/namedb/putty.exe
Oct 17 11:46:41 icc smbd_audit: INFO: disconnected

Источник информации:
1. http://www.opennet.ru/base/net/samba_full_audit.txt.html
2. http://www.security-teams.net/board/index.php?showtopic=4707
3. http://www.debryansk.ru/~tereshin/sambadoc/BROWSING.koi8-r.html

© Mau, 2008.