В данном опусе речь пойдет о создании файлового сервера, работающего под
управлением ОС 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 — доменная учетная
запись, имеющая права администратора домена. В ответ мы должны получить
нечто следующее:
Это означает, что Kerberos-билет получен, т.е. настройка поддержки
Kerberos выполнена успешно.
Но на данном этапе могут возникнуть и ошибки, самая распространенная из
которых:
Если такое возникло то прежде всего необходимо проверить время на
локальной машине и на контроллере домена, скорее всего существует
разница во времени более 5 минут (по умолчанию для Kerberos) или же, при
одинаковом времени на сервере и контроллере, установлены разные часовые
пояса. В общем, время на сервере нужно синхронизировать с временем на
PDC.
Есть еще один вариант, очень неочевидный: выше мы упоминали про то, что
если в /etc/hosts прописывается соответствие IP-адресов
именам машин, то в конце последней строки обязательно должен быть
пробел. Так вот если последней записью идет имя сервера или имя
контроллера домена и в конце нет Enter’a, то будет появляться данная
ошибка.
При возникновении других ошибок внимательно пересмотрите
/etc/krb5.conf — скорее всего где-то ошибка в регистре
символов переменных.
4. Настройка Samba.
Как известно, все основные настройки содержатся в конфигурационном файле
smb.conf, который расположен в $PREFIX/lib. По умолчанию
данного файла нет и нам нужно будет его создать —
Конфигурационный файл состоит из 3-х специальных разделов:
[globals] — глобальные настройки, [homes] —
домашние папки пользователей, [printers] — настройки печати
посредством Samba и пользовательских разделов, которые представляют
собой описания настроек сетевых папок. Имена разделов заключаются в
квадратные скобки, задание параметров выполняется в виде key=value
.
Начнем заполнение файла. Дабы не загромождать конфиг описаниям
параметров вначале приведем его целиком, а ниже разберем и дадим
описание ключевых параметров:
Теперь рассмотрим более подробно:
Очевидно, что это настройки кодовых страниц, NetBIOS-имя сервера и
строка описания. Так как автор родом с Украины, то кодовая страница —
KOI8-U.
Первый параметр определяет имена или адреса серверов, на которых Samba
будет авторизировать пользователей, которые обращаются к ее ресурсам. В
данном параметре можно указывать доменные имена хостов, их IP-адреса или
символ «*». В последнем случае Samba сама будет определять какой сервер
выбрать для авторизации доменных пользователей.
Второй параметр определяет какой интерфейс Samba будет «слушать» на
наличие входящих сетевых запросов.
realm=LOCAL.DOMAIN — имя домена, которое используется в нашей сети.
ВНИМАНИЕ! Имя должно быть таким же, как и прописано в
/etc/krb5.conf и набрано в таком же регистре!
security=ADS — тип авторизации на сервере, Так как у нас
AD-домен, то и тип авторизации — для AD.
encrypt passwords = Yes — разрешить шифрование паролей.
auth methods = winbind — указывает Samba использовать модуль
winbind при авторизации пользователей.
Диапазон идентификаторов пользователя и группы, которые будут выделяться
при отображении Win-пользователей с их SID (Secure ID) в UNIX. Диапазон
не должен включать UID и GID существующих во FreeBSD пользователей и
групп (обычно локальные записи имеют значения ID < 1000).
Дает указание Samba-модулю winbind вести учет пользователей и групп
вместо локальных системных вызовов setpwent(), getpwent(), рассматривать
пользователей без доменного имени перед именем пользователя
(DOMAIN\user) как пользователей, принадлежащих к данному домену и
производить обновление Kerberos-билетов с помощью модуля winbind.
Настройки протоколирования: уровень общих логов устанавливается в 0
(только ошибки), для VFS-модулей — 1 (ошибки и предупреждения); путь к
файлу журнала и размер лог-файла — неограниченный.
client NTLMv2 auth = Yes — если в сети есть машины с WinNT
<SP4 — то нужно добавить поддержку протокола NTLM версии 2. При
включении этой опции plaintext и lanman протоколы аутентификации будут
отключены. Если же таких машин нет — данный параметр не нужен.
fam change notify = No — отключить демона FAM, который
оповещает подключенных к Samba клиентов о изменении в структуре
каталогов. У автора по невыясненной причине сей модуль периодически
выдавал ошибки, посему оный был просто отключен. :)
Не включать поддержку печати и не показывать в списке сетевых ресурсов
сервера папку «Принтеры»
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. Для поставленной нами задачи
мы будем использовать последний из них.
У данного модуля, впрочем как и у других, есть ряд параметров, с помощью
которых производится его конфигурирование и настройка. Указание
параметров производится в следующем виде:
имя_модуля:параметр1
имя_модуля:параметр2=значение1
имя_модуля:параметр3=значение2 значение3 значение4
Все настройки производятся в главном конфигурационном фале Samba —
smb.conf. Полный список параметров можно, вернее даже лучше
всего, посмотреть в исходном коде модуля, который находится в директории
samba-3.0.23d/source/vfs. Давайте построчно рассмотрим
вышеприведенный конфиг:
Подключает использование данного модуля при работе с указанной сетевой
папкой
Задает возможность с помощью макропеременных Samba подставлять нужные
значения в качестве источника события на сетевой папке при
протоколировании действий. В нашем случае в качестве источника будет
производится подстановка вида
NetBIOS_имя_комьютера|имя_пользователя и в log-файл будет
записываться что-то вроде:
Модуль протоколирует действия которые завершились успешно — параметр
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. У него имеются следующие
параметры:
Абсолютный путь к папке, в которую будут перемещаться удаленные на
сетевой шаре файлы и директории.
Список регулярных выражений для имен файлов которые при удалении будут
удаляться, а не перемещаться в корзину. Каждое выражение отделяется от
соседних символом «|».
ВНИАНИЕ! Маска файла и символ «|» обязательно должны
разделяться символом пробела.
Список директорий удаление файлов и директорий из которых не переместит
их в сетевую корзину и они на самом деле будут удалены.
Максимальный размер файла в байтах, который может помещаться в корзину,
если размер больше — файл будет удален. В данном случае в корзину будут
попадать файлы размером не более 10 Мб.
При удалении файла сохранять весь файловый путь относительно сетевой
папки. Т.е. например при удалении файла file.txt,
находящегося по пути path/to/file относительно сетевой шары
[pub] с абсолютным путем /mnt/hdd2, в сетевой
корзине будет создан файловый путь/mnt/hdd2/path/to/file и в
эту директорию будет помещен file.txt.
При удалении одного и того же файла 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 —
доменный пользователь. В итоге мы должны получить нечто следующее:
uid=10105(srvadmin) gid=10000(администраторы домена) groups=10000(администраторы домена)
Если же в ответ выдается
То значит где-то возникла ошибка, скорее всего в nsswitch.conf.
8. «Поехали!»
Конфигурирование окончено, пришел час запускать в бой наше творение.
Прежде всего командой testparm проверим правильность файла
smb.conf, если в ответ получаем что-то вроде:
значит все в норме, ошибок нет и можно запускать самбу. Иначе — ищем
что не так.
При инсталляции в /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 —
соответственно его пароль. При успешной регистраиции в ответ мы долдны
получить нечто следующее:
Если сие сообщение получено значит настройка Samba успешно выполнена.
Запускаем на клиентской машине поиск компьютера по имени и вводим,
разумеется, имя сервера. Здесь может возникнуть еще одна маленькая
«закавыка»: при регистрации сервера в домене он зачастую не
прописывается в DNS и, соответственно, не находится по поиску, но, если
же попробовать зайти по IP-адресу, то все работает . В этом случае нужно
всего- лишь прописать сервер в AD-домене.
Теперь можете доставать шампанское изо льда ибо настройка окончена
успешно. :)
(С) 2007 Дмитрий Панов. Оригинал статьи размещен на http://security-teams.net
Tags: doman, freebsd, pdc, samba, tune