Вот и закончилась эра Windows Server 2003, служившей верой и правдой более десятилетия. Отказ от поддержки означает отсутствие обновлений и исправлений для более 11 миллионов систем, что в будущем может означать большую проблему в безопасности. Уже сегодня нужно подумать о переходе на современную ОС. MS уже предложила мастер и инструкции, но итоговая цена все-таки кусается, а поэтому стоит посмотреть в сторону open source. Будем заменять КД Linux-сервером.

 

Что будем делать?

Основным протоколом общения Win-систем в локальной сети служит SMB, изначально разработанный в IBM для обеспечения доступа к файлам и принтерам. В MS была добавлена поддержка NTLM-авторизации, а новый диалект получил название CIFS (Сommon Internet File System). В настоящее время с Win 8 доступна уже версия 3 протокола. Для централизованного администрирования компьютеров Win используется домен на основе Active Directory, задача которого — аутентификация пользователей и установка политик безопасности. В работе AD опирается на протоколы LDAP, Kerberos и DNS. С появлением гетерогенных сетей возникла необходимость сетевой интеграции *nix с Win-системами и AD. С одной стороны стояли юниксовские FTP и NFS, с другой SMB и AD. C первыми Win-клиенты работали без проблем, но в локальной сети они были не всегда удобны.

Решение второй проблемы взял на себя проект Samba, разрабатывающий с 1992 года свою реализацию сервера и клиента SMB/CIFS под *nix. Учитывая, что спецификации SMB/CIFS долгое время были недоступны, разработки шли медленно, хотя в общем в Samba 3 *nix-системы уже могли использоваться в качестве файлового сервера для Win-клиентов с авторизацией в AD. В 2004 году стали доступны спецификации SMB/CIFS и протоколы обмена AD, это дало старт новой ветке Samba 4, в развитии которой уже принимала участие и MS. Окончательный релиз Samba 4 был представлен в конце декабря 2012 года и сегодня уже рекомендуется к промышленному использованию. Поддержка Samba 3 на данный момент завершается.

В отличие от версии 3, Samba 4 имеет встроенные LDAP-сервер и сервер Kerberos KDC (Key Distribution Center). Служба DNS, являющаяся частью Active Directory, реализована в виде встроенного DNS-сервера, поддерживающего минимально необходимый набор функций. Как вариант, может генерироваться файл конфигурации для BIND. Специально разработана новая версия файлового сервера NTVFS, оптимизированного к требованиям AD. Правда, пока она находится в стадии разработки, и по умолчанию предлагается smbd. Поддерживается интеграция с сервером ntpd и синхронизация времени с рабочими станциями, реализована ACL в базе пользователей и многое другое. В итоге сервер с Samba 4 может выступать в качестве полноценного Active Directory Domain Controller, а не домена NT, как в версии Samba 3. Поддерживаются клиенты вплоть до новейших Win 8.1, групповые политики, перемещаемые профили, интеграция с Microsoft Exchange и многое другое.

В настоящее время поддерживается схема леса (forests schema) с максимальной версией 47, то есть Win 2008 R2 (30 — Win 2003, 31 — Win 2003 R2 и 44 — Win 2008). Так что все сказанное будет актуально и для всех ОС вплоть до Win 2008 R2 включительно. К более поздним можно даже не пробовать подключаться, получишь ошибку. Проверить версию можно при помощи dsquery:

> dsquery * “CN=Schema,CN=Configuration,DC=Root-Domain” -Scope Base -attr objectVersion

Или при помощи PowerShell:

> Get-ADObject(Get-ADRootDSE).schemaNamingContext -PropertyobjectVersion

В качестве альтернативы можно использовать ADSIedit или посмотреть значение в реестре.

С теорией покончено. Теперь нам осталось всего ничего. Чтобы произвести миграцию с Win 2003/2008 на *nix/Samba, нужно установить Samba 4, подключить его к домену в качестве КД, передать роли, выключить Win 2003/2008. В Сети много руководств, но часть из них путаны и нередко рекомендуют лишние действия, в части приведена уже несколько устаревшая информация, которая была актуальна для ранних релизов Samba 4. В качестве отправной точки рекомендую официальную документацию проекта.

 

Установка Samba

В Сети обычно несколько контроллеров домена, определить владельцев ролей FSMO можно при помощи dsquery server. Данные понадобятся при дальнейших настройках. Например, хозяин схемы (Schema Master) определяется командой

> dsquery server -hasfsmo schema

В более новых версиях ОС можно использовать командлеты модуля Active Directory — Get-ADForest, Get-ADDomain.

Определяем Schema Master
Определяем Schema Master

Готовим сервер с Linux. Ставить будем на примере Ubuntu 14.04 LTS. В других дистрибутивах будут отличия в расположении конфигурационных файлов и особенностях пакетной системы. Как вариант, можно развернуть Samba-сервер при помощи сторонних проектов (см. врезку).

Готовые решения

Также в Сети можно найти несколько готовых проектов для быстрого развертывания сервера Samba или замены AD. Например, SerNet Samba4 Appliance предлагает репозиторий для основных дистрибутивов Linux, содержащий пакеты последнего релиза Samba и готовый дистрибутив на базе Debian со cконфигурированным доменом на Samba 4, включая расширения от Zarafa AD и инструменты групповой работы Zarafa. В TurnKey также есть готовый дистрибутив для организации PDC на базе Samba, содержащий готовые преднастройки и графические инструменты конфигурирования, который может быть развернут как на железе, так и в VM.

Многоцелевой серверный дистрибутив Zentyal предлагает интерфейс и модули, позволяющие быстро установить и настроить контроллер домена на основе Samba 4. Поставляется в виде готового ISO-образа и пакетов для Ubuntu. Серверный дистрибутив Clear OS, выросший из маршрутизатора, теперь обеспечивает простую возможность развертывания сервера, который может заменить контроллер домена для Windows ПК. Построен на базе RHEL.

Кроме этого, не стоит забывать проекты, расширяющие стандартные возможности LDAP и вполне способные заменить Active Directory: FreeIPA, GOsa2, 389 Directory Server и FusionDirectory.

Поначалу необходимо настроить разрешение имен через DNS. Руководство отсылает сразу к /etc/resolv.conf. Но дело в том, что в Ubuntu, как и в некоторых других дистрибутивах, файл /etc/resolv.conf генерируется автоматически при помощи утилиты resolvconf скриптом /etc/network/if-up.d/000resolvconf. Поэтому редактировать его вручную не рекомендуется: данные будут перезаписаны при первой же перезагрузке. Сделаем все правильно. Пусть 192.168.1.1/example.org будет наш действующий КД, 192.168.1.2/samba.example.org — сервер с Samba. В /etc/network/interfaces необходимо установить правильные значения dns-search и dns-nameservers:

$ sudo nano /etc/network/interfaces

auto eth0
iface eth0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-search example.org
    dns-nameservers 192.168.1.1 8.8.8.8

Далее можно перезагрузить сеть sudo service network restart, чтобы оно выполнило resolvconf -a eth0.inet с нужными параметрами. Но это срабатывает не во всех дистрибутивах, поэтому проще перезагрузить систему. После проверяем файл, убеждаемся, что все нормально:

$ cat /etc/resolv.conf
    nameserver 192.168.1.1
    nameserver 8.8.8.8
    search example.org

Также желательно прописать правильное имя узла Samba в /etc/hosts:

$ sudo nano /etc/hosts
192.168.1.2    samba.example.org samba

Проверяем корректность разрешения имени КД:

$ host -t A example.org

Пакеты Samba 4 есть в репозиториях всех современных дистрибутивов Linux, поэтому установка проблем не вызывает. Хотя там может быть не самая актуальная версия, а значит, будут недоступны все последние возможности и, главное, исправления. Сами разработчики Samba рекомендуют SerNet, подключаем в /etc/apt/source.list репозиторий:

deb https://sernet-samba-public:Noo1oxe4zo@download.sernet.de/packages/samba/4.2/ubuntu trusty main
deb-src https://sernet-samba-public:Noo1oxe4zo@download.sernet.de/packages/samba/4.2/ubuntu trusty main

Обновляем список пакетов и проверяем версию:

$ sudo apt-get update
$ sudo apt-cache show samba | grep -i version
Version: 99:4.2.2-8
Version: 2:4.1.6+dfsg-1ubuntu2.14.04.8

Ставим:

$ sudo apt-get install samba sernet-samba-ad

Или, если используется пакет из основного репозитория, просто

$ sudo apt-get install samba

Перед дальнейшими действиями рекомендуется проверить корректность работы DNS и Kerberos для подключения к домену. Для этого нам понадобятся клиентские утилиты Kerberos.

$ sudo apt-get install install krb5-user

В процессе установки будет запрошена информация по домену, по окончании просто проверяем правильность установок в /etc/krb5.conf:

[libdefaults]
    dns_lookup_realm = true
    dns_lookup_kdc = true
    default_realm = EXAMPLE.ORG

Выполняем kinit, используя учетную запись администратора домена:

$ sudo kinit administrator

Утилита klist должна выдать информацию о полученном билете:

$ sudo klist

Если ошибок не получили, значит, эта часть работает. В принципе, этот шаг можно пропустить и вернуться, если возникнут проблемы при подключении. Хотя в случае с Samba 4 подключение к домену при правильно настроенной сети выглядит проще простого.

Проверяем корректность работы DNS и Kerberos
Проверяем корректность работы DNS и Kerberos
 

Подключаемся к домену

В поставке Samba 4 идет несколько утилит, некоторые непосредственно используются для администрирования, часть запускаются демонами и стартовыми скриптами. Основная утилита управления настройками Samba 4 — samba-tool, параметров у нее очень много, только субкоманд первого уровня 19. С ее помощью можем просмотреть и изменить установки, создать новый или подключиться к существующему домену, создать учетные записи, изменить политики, выполнить репликацию и многое другое. Например, чтобы создать новый домен в Samba 4, вводим (аналог dcpromo):

$ sudo samba-tool domain provision --use-rfc2307 --interactive

И далее отвечаем на вопросы. Но домен у нас уже есть. Для подключения к уже существующему домену используется параметр join и учетная запись с правами администратора домена. Важный момент: перед запуском следует переименовать (удалить) конфигурационный файл /etc/samba/smb.conf. В некоторых версиях Samba 4 это было необязательным, сгенерированный файл просто проверялся на соответствие или перезаписывался. Но иногда выдается ошибка о несоответствии используемого режима работы Samba с прописанным в smb.conf. Можно, конечно, поправить параметры, но, учитывая, что файл будет сгенерирован автоматически, делать лишнюю работу, наверное, не стоит. Лучше потом самому добавить, чего не хватает.

$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
$ sudo samba-tool domain join example.org DC -Uadministrator --realm=example.org

Кстати, поддерживается и RODC (достаточно в вызове заменить DC на RODC), поэтому спокойно можно развернуть такой КД на Linux в удаленном филиале.

По умолчанию используется внутренний DNS, это самый простой вариант, не требующий никаких дальнейших действий. Для сложных ситуаций, вероятно, потребуется BIND, в этом случае к команде следует добавить параметр -dns-backend=BIND9_DLZ. Полезно сразу привязать сервис к интерфейсам: --option="interfaces=lo eth0" --option="bind interfaces only=yes". Остальные параметры можно найти, вызвав справку.

После этого будет произведен поиск КД для указанного домена и запрошен пароль администратора. Некоторое время будет затрачено на репликацию данных, в конце должны увидеть «Joined domain DOMAIN (SID ххххх) as a DC». Все, Samba 4 сервер присоединен к домену как КД. Сразу в этом можем убедиться, перейдя в консоли Active Directory Users and Computers в контейнер Domain Controllers, где появился новый контролер домена.

Подключаемся к Active Directory в качестве КД
Подключаемся к Active Directory в качестве КД
Новый КД в консоли Active Directory Users and Computers
Новый КД в консоли Active Directory Users and Computers

По ходу генерируется новый krb5.conf и простейший конфигурационный файл smb.conf (шаблоны находятся в /usr/share/samba/setup). Обрати внимание на каталоги, в которых хранятся настройки, рекомендую ознакомиться со структурой файлов:

$ cat /etc/samba/smb.conf
[global]
    workgroup = EXAMPLE
    realm = example.org
    netbios name = SAMBA
    server role = active directory domain controller

[netlogon]
    path = /var/lib/samba/sysvol/example.org/scripts
    read only = No

[sysvol]
    path = /var/lib/samba/sysvol
    read only = No

Смотрим владельца схемы, он указывает на КД, работающий под Win:

$ samba-tool fsmo show
Смотрим владельца схемы и уровень леса средствами samba-tool
Смотрим владельца схемы и уровень леса средствами samba-tool

Разработчики SerNet предлагают готовый конфигурационный файл, пока в нем нужно изменить только режим запуска, иначе стартовый скрипт не запустится:

$ sudo nano /etc/default/sernet-samba
SAMBA_START_MODE="ad"

Запускаем:

$ sudo service sernet-samba-ad start

Проверяем уровень домена и леса:

$ sudo samba-tool domain level show
    Domain and forest function level for domain 'DC=example,DC=org'

    Forest function level: (Windows) 2003
    Domain function level: (Windows) 2003
    Lowest function level of a DC: (Windows) 2008 R2

После этого необходимо проверить корректность работы репликации между Windows DC и Samba DC, используя

$ sudo samba-tool dbcheck
$ sudo samba-tool drs showrepl

Здесь могут появляться разные ошибки, некоторые со временем исчезнут сами, нужно просто подождать. Некоторые можно попробовать устранить в реальном времени. Например, ошибка «UpdateRefs failed with ...» появляется из-за того, что контроллер домена Windows еще не запустил средство проверки целостности данных (Knowledge Consistency Checker), так как не создал соединение с новым Samba DC. Чтобы исправить это, тебе нужно выполнить repadmin /kcc на Win или при помощи samba-tool:

$ sudo samba-tool drs kcc -Uadministrator example.org

Если при работе команды получаем предупреждение

Failed to connect host 192.168.1.2 on port 135 - NT_STATUS_CONNECTION_REFUSED

следует проверить список портов и посмотреть, что в логах:

$ netstat -ant | grep 135
$ cat /var/log/messages | grep 135

Бывает, банально забыли перенастроить файрвол или соединение блокирует тот же SELinux. Запуск репликации производится командой

$ sudo samba-tool drs replicate

Для проверки корректности выполнения репликации между контроллерами домена попробуем добавить пользователя на Samba, используя samba-tool и консоль администрирования на Win. Параметров у запроса может быть много, но в самом простом случае достаточно ввести

$ sudo samba-tool user add test
$ sudo samba-tool user list

Проверь, что новые пользователи появились на контроллере домена Win и в списках Samba. Для удаления используем вместо add команду delete, отключить — disable, изменить пароль — setpassword. Отключим срок действия пароля для учетной записи:

$ sudo samba-tool user setexpiry test --noexpiry

В отличие от Samba 3, Samba 4 не требует дублирования доменного пользователя локальной учетной записью. Проверяем доступность GUID объектов для нового хоста:

$ sudo ldbsearch -H /var/lib/samba/private/sam.ldb '(invocationid=*)' --cross-ncs objectguid

Для информации о пользователях можно использовать утилиту wbinfo, ключ -u позволит посмотреть список доменных пользователей, -g — групп.

$ wbinfo -u

Смотрим значение ID и SID:

$ wbinfo --name-to-sid Administrator
S-1-5-21-2988497100-2060164268-3680497755-500 SID_USER (1)
$ wbinfo --sid-to-uid S-1-5-21-2988497100-2060164268-3680497755-500
0

Новый КД готов. Автоматическое обновление DNS производится за счет периодического запуска (каждые десять минут) скрипта samba_dnsupdate. Скрипт опирается на шаблон имен DNS /var/lib/samba/private/dns_update_list. Структура его проста, и при необходимости можно его изменять, добавляя собственные узлы. Для управления DNS-записью вручную используется samba-tool. Синтаксис прост:

$ samba-tool dns zonecreate myserver 1.168.192.in-addr.arpa –Uadministrator
$ sudo samba-tool dns add 192.168.1.1 example.org myserver A 192.168.1.3 –Uadministrator

Теперь можем прописывать сервер Samba в качестве DNS-сервера и переезжать.

 

Передача роли

Перед тем как производить дальнейшие операции, следует позаботиться о резервной копии AD, мало ли что пойдет не так. Как и в случае с Win-системой, роли хозяина операций с одного КД (PDC) можно передать на другой КД (BDC) или принудительно забрать роли с PDC на BDC. Первый способ описан в документации MS, проще для этого использовать GUI-средства — MMC-консоль «Схема Active Directory» (если ее нет, в окне выбора MMC нужно ввести regsvr32 schmmgmt.dll), консоли «Active Directory — домены и доверие» и «Active Directory — пользователи и компьютеры». Другой вариант — использовать командную утилиту ntdsutil.

Принудительное принятие роли на Samba 4 некоторое время считалось нерекомендуемым вариантом, но сейчас вроде бы таких ограничений нет. Чтобы захватить все роли, вводим

$ sudo samba-tool fsmo seize —role=all –Uadministrator

Иногда приходится добавлять параметр --force. Можно забрать конкретную роль, для чего ее указываем вместо all: rid, schema, naming, pdc и infrastructure. Проверяем:

$ sudo samba-tool fsmo show

Команда transfer позволяет передать роли другому контроллеру домена:

$ sudo samba-tool fsmo transfer —role=all –Uadministrator

Для управления доменом, работающим под Samba, используем стандартные утилиты администрирования серверной Win или для клиентских ОС Win — Administration Tools Pack/RSAT. Некоторые операции можем производить и при помощи samba-tool. Например, поднимем функциональный уровень леса до Win 2008 R2:

$ sudo samba-tool domain level --forest-level=2008_R2

Также в контексте domain можем просмотреть и изменить установки паролей:

$ sudo samba-tool samba-tool domain passwordsettings show

Установим минимальную длину пароля в десять символов:

$ sudo samba-tool domain passwordsettings set --min-pwd-length=10
Просмотр установок паролей
Просмотр установок паролей
 

Вывод

Проект Samba развивается быстрыми темпами, и в настоящее время использование *nix-систем в качестве контролера домена не выглядит таким уже пугающим. Все настройки просты и понятны, многие действия, ранее требовавшие серьезного разбора, теперь производятся автоматически.

1 комментарий

  1. Аватар

    Shad0w

    18.08.2015 в 15:41

    Ломаем ноги и встаем на костыли. Гениально.

Оставить мнение