From: Дмитрий Панов <2:465/213.86@Fidonet>
Newsgroups: email
Date: Mon, 24 Apr 2007 14:31:37 +0000 (UTC)
Subject: Настройка Samba-3.0.23d на FreeBSD-5.3 с авторизацией в Windows 2000 AD
В данном опусе речь пойдет о создании файлового сервера, работающего под
управлением ОС FreeBSD-5.3 на основе пакета Samba-3.0.23d и последующем
внедрении оного в качестве файлового сервера в домен, работающий под
управлением Windows 2000 Server.
Статья является всего лишь попыткой поделиться своим опытом в вопросе
интеграции *nix-like систем в сети, работающие под управлением серверов
MS Windows, и является для автора дебютным произведением, посему любые
конструктивные замечания/пожелания/дополнения/исправления будут с
радостью приняты, всесторонне рассмотрены и при необходимости - учтены и
внесены.
Итак, вперед. Файловый сервер будет работать в сети, состоящей из одного
главного и одного вторичного Active Directory контроллеров домена,
работающих под управлением ОС Windows 2000 Server. На создаваемом
сервере необходимо будет настроить протоколирование действий
пользователей и организовать сетевую корзину для некотрых сетевых папок.
Определимся с терминами: домен будет иметь название local.domain первичный контроллер домена будет иметь адрес
192.168.0.1 и доменное имя pdc.local.domain, вторичный -
192.168.0.2 и bdc.local.domain, создаваемый файловый сервер - filesrv.local.domain и адрес 192.168.0.3 соответственно.
Файловый сервер будет иметь 3 сетевых папки, для 2-х из которых будет
настроено журналирование действий пользователей и для одной из них будет
организована поддержка сетевой корзины.
Что ж, приступим.
0. В качестве разминки перед боем проведем маленький экскурс
в теорию. Windows 2000 Active Directory домен с членами домена может
работать двух основных режимах: в режиме NT-совместимости (NT-style
compatibility) и в "родном режиме" (Native mode). В первом случае для
авторизации членов домена используется протокол NTLM и данный режим
используется для авторизации членов домена работающих под управлением
Windows NT и Windows 9x. В "нативном" - "родном" режиме работы для
авторизации клиентов используется модификация протокола Kerberos версии
5. Для работы в данном режиме соответственно необходима поддержка
клиентом данного протокола, которая существует в версиях начиная с
Windows 2000. Согласно документации от Microsoft -
http://www.microsoft.com/rus/windows2000/library/security/w2k_SecTech.asp
данный режим работы обеспечивает ряд преимуществ по сравнению с
устаревшим протоколом NTLM, посему доверимся вышеуказанным сведениям и
будем создавать сервер в "нативном" режиме AD-домена.
1. Перейдем непосредственно к настройке. Прежде всего
необходимо удостовериться, что наш будущий сервер получает FQDN (Full
Qualified Domain Name) имена нашего контроллера. То- есть, если команда ping pdc отрабатывает нормально, значит NIS настроен и можно
переходить к п. 2. В противном случае нам нужно прописать соответствия
IP-адресов именам хостов в файле /etc/hosts в виде: "IP-Address Full-Qualified-Hostname Short-Hostname . В нашем
случае /etc/hosts будет иметь вид:
ВНИМАНИЕ! В конце последней строки ОБЯЗАТЕЛЬНО необходимо
сделать перевод на новую строку, иначе в будущем возможны проблемы при
подключении сервера к домену.
2. Произведем установку Samba. Автор собирал Samba не из
портов, а из пакета, посему это описание и приводится.
Командами tar -zxvf samba-.3.0.23d.tar.gz распакуем пакет, cd samba-3.0.23/source перейдем в каталог сборки. Теперь
необходимо произвести конфигурацию, компиляцию и, собственно, установку
программы. Разобьем этот процесс на три этапа.
2.1. Для конфигурирования сборки Samba существует множество опций,
список которых можно посмотреть командой ./configure -help.
Из всего многообразия команд нам для выполнения поставленной задачи
необходимы следующие опции: --prefix=/usr/local/samba --with-ads
--with-ldap --with-winbind --with-included-popt --with-acl-support
--with-utmp -with-libsmbsharemodes --with-libmsrpc -with-syslog
--enable-cups=no Назначения большинства параметров очевидны из
названия: устанавливать в /usr/samba , поддержка Active
Directory, MS RPC, ACL, Syslog, поддержка модуля Winbind, выключение
поддержки системы печати CUPS.
2.2. После отработки скрипта конфигурации приступим непосредственно к
компиляции, которая выполняется... правильно, командой make.
2.3 После окончания компиляции командой make install
установим пакет.
ВНИМАНИЕ! У автора при инсталляции пакета по непонятной
причине библиотека samba-3.0.23d/source/nsswitch/nss_winbind.so не скопировалась
в системную директорию с библиотеками. Если же и у вас возникла подобная
ситуация - нужно вручную скопировать ее например в /usr/local/lib. Возможно, необходимо будет создать
символическую ссылку: ln -s nss_winbind.so nss_winbind.so.1 и
выполнить ldconfig.
Все, процесс установки Samba успешно выполнен.
3. Настройка Kerberos.
Во FreeBSD протокол Kerberos является частью системы, посему никаких
дополнительных установок производить не нужно.
Основной файл конфигурации расположен в /etc/krb5.conf. Если
его нет - нужно его создать: touch /etc/krb5.conf
В данный файл нам необходимо добавить параметры нашей доменной области
(realm), центра выдачи ключей - KDC (Key Distribution Center), которым
по умолчанию является основной контроллер домена. Также, в данном
конфигурационном файле можно задавать дополнительные параметры, такие,
как время жизни билета, используемые протоколы и типы криптоалгоритмов,
файлы журналов и т.п. Подробное описание их всех содержится в справочной
странице krb5.conf.
ВНИМАНИЕ! Содержимое файла чувствительно к регистру символов!
Для проверки правильности настроек выполним команду kinit admin@LOCAL.DOMAIN, где admin - доменная учетная
запись, имеющая права администратора домена. В ответ мы должны получить
нечто следующее:
kinit: NOTICE: ticket renewable lifetime is 1 week
Это означает, что Kerberos-билет получен, т.е. настройка поддержки
Kerberos выполнена успешно.
Но на данном этапе могут возникнуть и ошибки, самая распространенная из
которых:
Clock skew too great
Если такое возникло то прежде всего необходимо проверить время на
локальной машине и на контроллере домена, скорее всего существует
разница во времени более 5 минут (по умолчанию для Kerberos) или же, при
одинаковом времени на сервере и контроллере, установлены разные часовые
пояса. В общем, время на сервере нужно синхронизировать с временем на
PDC.
Есть еще один вариант, очень неочевидный: выше мы упоминали про то, что
если в /etc/hosts прописывается соответствие IP-адресов
именам машин, то в конце последней строки обязательно должен быть
пробел. Так вот если последней записью идет имя сервера или имя
контроллера домена и в конце нет Enter'a, то будет появляться данная
ошибка.
При возникновении других ошибок внимательно пересмотрите /etc/krb5.conf - скорее всего где-то ошибка в регистре
символов переменных.
4. Настройка Samba.
Как известно, все основные настройки содержатся в конфигурационном файле
smb.conf, который расположен в $PREFIX/lib. По умолчанию
данного файла нет и нам нужно будет его создать - touch
/usr/samba/lib/smb.conf.
Конфигурационный файл состоит из 3-х специальных разделов: [globals] - глобальные настройки, [homes] -
домашние папки пользователей, [printers] - настройки печати
посредством Samba и пользовательских разделов, которые представляют
собой описания настроек сетевых папок. Имена разделов заключаются в
квадратные скобки, задание параметров выполняется в виде key=value .
Начнем заполнение файла. Дабы не загромождать конфиг описаниям
параметров вначале приведем его целиком, а ниже разберем и дадим
описание ключевых параметров:
[global]
dos charset = 866
unix charset = KOI8-U
workgroup = WG
realm = LOCAL.DOMAIN
server string = Файловый сервер
interfaces = 192.168.0.3/24
security = ADS
auth methods = winbind
password server = 192.168.0.1 192.168.0.2
private dir = /etc/samba
passdb backend = tdbsam
client NTLMv2 auth = Yes
log level = 0 vfs:1
log file = /var/log/samba/samba.log
max log size = 0
deadtime = 360
max open files = 100000
fam change notify = No
paranoid server security = No
load printers = No
show add printer wizard = No
os level = 8
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind nested groups = No
winbind refresh tickets = Yes
hosts allow = 192.168.0.
case sensitive = No
hide unreadable = Yes
dos charset=866
unix charset= KOI8-U
workgroup = WG
server string = Файловый сервер
Очевидно, что это настройки кодовых страниц, NetBIOS-имя сервера и
строка описания. Так как автор родом с Украины, то кодовая страница -
KOI8-U.
password server = 192.168.0.1 192.168.0.2
interfaces = 192.168.0.3
Первый параметр определяет имена или адреса серверов, на которых Samba
будет авторизировать пользователей, которые обращаются к ее ресурсам. В
данном параметре можно указывать доменные имена хостов, их IP-адреса или
символ "*". В последнем случае Samba сама будет определять какой сервер
выбрать для авторизации доменных пользователей.
Второй параметр определяет какой интерфейс Samba будет "слушать" на
наличие входящих сетевых запросов.
realm=LOCAL.DOMAIN - имя домена, которое используется в нашей сети.
ВНИМАНИЕ! Имя должно быть таким же, как и прописано в /etc/krb5.conf и набрано в таком же регистре!
security=ADS - тип авторизации на сервере, Так как у нас
AD-домен, то и тип авторизации - для AD.
auth methods = winbind - указывает Samba использовать модуль
winbind при авторизации пользователей.
idmap uid = 10000-20000
idmap gid = 10000-20000
Диапазон идентификаторов пользователя и группы, которые будут выделяться
при отображении Win-пользователей с их SID (Secure ID) в UNIX. Диапазон
не должен включать UID и GID существующих во FreeBSD пользователей и
групп (обычно локальные записи имеют значения ID < 1000).
Дает указание Samba-модулю winbind вести учет пользователей и групп
вместо локальных системных вызовов setpwent(), getpwent(), рассматривать
пользователей без доменного имени перед именем пользователя
(DOMAINuser) как пользователей, принадлежащих к данному домену и
производить обновление Kerberos-билетов с помощью модуля winbind.
Настройки протоколирования: уровень общих логов устанавливается в 0
(только ошибки), для VFS-модулей - 1 (ошибки и предупреждения); путь к
файлу журнала и размер лог-файла - неограниченный.
client NTLMv2 auth = Yes - если в сети есть машины с WinNT
<SP4 - то нужно добавить поддержку протокола NTLM версии 2. При
включении этой опции plaintext и lanman протоколы аутентификации будут
отключены. Если же таких машин нет - данный параметр не нужен.
fam change notify = No - отключить демона FAM, который
оповещает подключенных к Samba клиентов о изменении в структуре
каталогов. У автора по невыясненной причине сей модуль периодически
выдавал ошибки, посему оный был просто отключен. :)
load printers = No
show add printer wizard = No
Не включать поддержку печати и не показывать в списке сетевых ресурсов
сервера папку "Принтеры"
os level = 8
Указывает "вес" Samba-сервера при участи в выборах обозревателя сети (не
путать с DNS). Обычно основным обозревателем является контроллер домена,
но это не обязательно. Мы же так и оставим - пусть контроллер сам себя
"выбирает" :)
hosts allow = 192.168.0. - список IP- адресов, которым
разрешено подключаться к Samba-серверу.
case sensitive = No - не различать регистр символов в именах
файлов/директорий.
hide unreadable = Yes - прятать от пользователей файлы и
каталоги, для которых у них нет прав чтения.
5. Так, настройка глобальной секции завершена, посмотрим на
настройки сетевых папок. Итак, по заданию у нас должно быть 3 сетевые
шары 2 из которых должны вести протоколы работы пользователей и одна из
них в нагрузку должна иметь сетевую корзину.
Вместе с Samba поставляется ряд так называемых "VFS-модулей" (Virtual
File System), с их помощью становится возможным выполнение таких
действий как протоколирование процесса работы на сетевых папках,
организация сетевой корзины, теневое копирование (shadow copy) данных,
подключение антивирусных модулей и т.п. В частности, для
протоколирования действий пользователей в Samba имеется три VFS-модуля: audit, extd_audit, full_audit. Для поставленной нами задачи
мы будем использовать последний из них.
У данного модуля, впрочем как и у других, есть ряд параметров, с помощью
которых производится его конфигурирование и настройка. Указание
параметров производится в следующем виде:
Все настройки производятся в главном конфигурационном фале 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
Модуль протоколирует действия которые завершились успешно - параметр success и закончились неудачей - failure
соответственно. Как, наверное уже понятно, для данной сетевой папки мы
будем фиксировать как "успех" так и "неудачу" создания, переименования и
удаления файлов и директорий. Если же, например, нужно протоколировать
ВСЕ неудачные действия на шаре то параметр full_audit:failure
нужно не указывать и по умолчанию он будет фиксировать все "неудачи".
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 дабы разделить поступаемые
классы сообщений. Сделаем это следующим образом: строку
Таким образом мы выделили приоритеты info и notice
категории local5 и перенаправили их в соответствующие файлы
журналов и, на всякий случай, для других приложений перенаправили
остальные категории local0-local7 приоритета notice в /var/log/messages
6. Теперь очередь за настройкой сетевой корзины. За это
отвечает 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 и
т.д.
7. Настройка nsswitch.conf
Теперь нам для полного и окончательного счастья необходимо произвести
настройку подсистемы Name-service switch. Эта подсистема отвечает за то
как и где системный вызов ndispatch будет производить поиск
разнообразной информации в системных базах вроде названий хостов, имен
пользователей, паролей и т.п. В качестве системных баз используются
локальные файлы вроде /etc/hosts, /etc/passwd, DNS, NIS и пр.
Конфигурирование производится в файле /etc/nsswitch.conf.
Формат файла имеет следующий вид: "системная база: список источников
[опции]".
Применительно к нашей задаче нам необходимо к источникам данных добавить
вызов модуля winbind, который будет производить поиск
доменных пользователей, имен групп, их паролей и другой служебной
информации. В итоге файл должен будет содержать следующие строки:
Для проверки дадим сначала команду wbinfo -u, если в ответ
выводится список пользователей значит Samba успешно "общается" с
AD-доменом. Теперь проверим, видит ли сама система доменных
пользоваетелей, иными словами происходит ли отображение доменных
пользователей в стандартное системное окружение FreeBSD. Для этого
смотрим вывод команды id srvadmin, где srvadmin -
доменный пользователь. В итоге мы должны получить нечто следующее:
То значит где-то возникла ошибка, скорее всего в nsswitch.conf.
8. "Поехали!"
Конфигурирование окончено, пришел час запускать в бой наше творение.
Прежде всего командой testparm проверим правильность файла smb.conf, если в ответ получаем что-то вроде:
Load smb config files from /usr/local/samba/lib/smb.conf
Processing section "[Документы]"
Processing section "[pub]"
Processing section "[install]"
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
значит все в норме, ошибок нет и можно запускать самбу. Иначе - ищем
что не так.
При инсталляции в /usr/local/etc/rc.d/ помещается скрипт
запуска/останова самбы - samba.sh. Для нашего пущего удобства
переместим его в /etc/rc.d/: mv /usr/local/etc/rc.d/samba.sh
/etc/rc.d.
Теперь командами /etc/rc.d/samba.sh start|stop|restart мы
можем стартовать, останавливать и перезапускать Samba-демоны.
Дополнительно в /etc/rc.conf пропишем samba_enable="YES" для автоматического запуска Samba при
перезагрузках сервера.
Итак, запуск: /etc/rc.d/samba.sh start - запустили. Теперь
нужно зарегистрировать сервер в Active Directory: net ads join -U
srvadmin%password, где srvadmin - пользователь домена
имеющий права администратора домена, password -
соответственно его пароль. При успешной регистраиции в ответ мы долдны
получить нечто следующее:
Using short domain name -- WG
Joined 'FILESRV' to realm 'LOCAL.DOMAIN'
Если сие сообщение получено значит настройка Samba успешно выполнена.
Запускаем на клиентской машине поиск компьютера по имени и вводим,
разумеется, имя сервера. Здесь может возникнуть еще одна маленькая
"закавыка": при регистрации сервера в домене он зачастую не
прописывается в DNS и, соответственно, не находится по поиску, но, если
же попробовать зайти по IP-адресу, то все работает . В этом случае нужно
всего- лишь прописать сервер в AD-домене.
Теперь можете доставать шампанское изо льда ибо настройка окончена
успешно. :)
(С) 2007 Дмитрий Панов. Оригинал статьи размещен на http://security-teams.net
2067 Прочтений • [Настройка Samba-3.0.23d на FreeBSD-5.3 с авторизацией в Windows 2000 AD (samba tune auth doman pdc windows freebsd)] [08.05.2012] [Комментариев: 0]