Samba DC в качестве второго контроллера в домене AD Windows 2012R2 и перемещаемые папки для клиентов на Windows и Linux
Responsive image

Осознание того, что я попал в импортозамес пришло не сразу. Только когда из вышестоящей организации свежие поставки ПК стали стабильно приезжать с дистрибутивом «Альт Линукс» на борту, я заподозрил неладное.

Однако в процессе прохождения по стадиям принятия неизбежного я втянулся и даже немного начал получать удовольствие от процесса. А в какой-то момент подумал, что такими темпами рано или поздно мне придётся расставаться с решениями по организации службы каталогов от Microsoft и двигаться в сторону чего-то более экзотичного. Поэтому, чтобы заранее подготовиться к неизбежному, и по возможности выловить побольше подводных камней, было решено развернуть тестовый стенд, включающий в себя:

  • DC1 — Windows Server 2012R2
  • DC2 — Альт Сервер 8.2
  • File Server — Windows Server 2012R2
  • PC1 — Windows 7
  • PC2 — Альт Рабочая станция 8.2
  • Задачи стенда:

    1. Развернуть домен на базе w2k12r2. Создать минимальный набор групповых политик (аналогично использующимся в рабочей инфраструктуре), включая политику переноса рабочих папок пользователей (Загрузки/Документы/Рабочий стол). В конечном итоге хочется, чтобы при смене пользователем рабочего места с Windows на Linux и обратно он имел комфортный доступ к своим рабочим документам.
    2. Ввод Samba DC вторым контроллером. Проверка репликации службы каталогов и DNS.
    3. Настройка клиентов Linux на работу с перемещаемыми папками.

    Реализация:

    Установка и ввод нового контроллера С установкой MS Windows 2012R2 всё просто и более менее понятно. В интернете есть 1001 мануал по развертыванию домена на Windows как с помощью GUI так и средствами Powershell, поэтому повторять лишний раз не буду, оставлю только ссылку на офф. документацию, для любопытствующих и тех кто захочет освежить память.Однако один важный момент в данном пункте всё таки есть. На сегодняшний день Samba не умеет работать со схемами каталога выше 2008R2.

    Проблема в том, что Windows 2012 и 2012R2 используют инструменты WMI для работы с доменами и лесами, стабильная поддержка которых анонсирована только к версии Samba 4.11, которая должна выйти до конца этого года.
    Из этого следует, что единственным вариантом для введения самбы в домен AD, развернутый на 2012R2 сервере, является понижение схемы с 69 до 47. Разумеется на рабочей инфраструктуре без веских причин этого делать не надо, но у нас тут тестовый стенд, так что почему бы собственно и нет.

    Ставим Альт Сервер 8.2. Во время установки выбираем профиль «Сервер Samba-DC (контроллер AD)». На развернутом сервере производим полное обновление системы, и устанавливаем пакет task-samba-dc, который потянет за собой всё необходимое

    # apt-get install task-samba-dc
    Если вдруг task-samba-dc, вопреки заверениям документации Альта откажется ставить всё необходимое сам.

    Далее переходим к настройке Kerberos и получению тикета. Открываем файл krb5.conf, переходим в раздел [libdefaults], и приводим к следующему виду:

    # vim /etc/krb5.conf
     dns_lookup_kdc = true
     dns_lookup_realm = true
     default_realm = TEST.LOCAL

    Запрашиваем билет

    # kinit administrator
    Password for administrator@TEST.LOCAL:

    Проверяем список полученых тикетов Kerberos

    # klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: administrator@TEST.LOCAL
    
    Valid starting       Expires              Service principal
    16.05.2019 11:51:38  16.05.2019 21:51:38  krbtgt/TEST.LOCAL@TEST.LOCAL
            renew until 23.05.2019 11:51:35

    Теперь удаляем или переименовываем существующий конфиг самбы.

    # mv smb.conf smb.conf.bak1

    И наконец вводим в домен AD вторым контроллером:

    # samba-tool domain join test.local DC -U"TEST\administrator"
    Успешный ввод будет сопровождаться следующим логом

    В оснастке ADUC должна появиться запись о новом DC в домене TEST.LOCAL, а в диспетчере DNS — новая А запись, соответствующая DC2.

    • Репликация между контроллерамиДля начала проверим работу службы репликации каталогов (DRS)
      # samba-tool drs showrepl
      Все попытки репликации в выводе должны быть успешными. В списке объектов KCC, в течение 15 минут после ввода, должен появится наш DC1 на Windows

      Предупреждение «No NC replicated for Connection!» можно смело игнорировать. Оно появляется из за того, что при регистрации нового DC самба неверно устанавливает некоторые флаги репликации.

      Так же неплохо будет проверить репликацию LDAP.

      # samba-tool ldapcmp ldap://dc1.test.local ldap://dc2.test.local -Uadministrator

      Указанная выше команда сравнит значения атрибутов объектов всего каталога на DC1 и DC2.

      Пример успешной репликации

      В ряде случаев атрибуты объектов на разных контроллерах могут отличаться, и вывод команды даст об этом знать. Но далеко не во всех случаях это будет признаком проблемы с репликацией.

      Следующим этапом необходимо вручную настроить стабильную репликацию каталога SysVol.
      Дело в том, что самба пока не поддерживает DFS-R, впрочем как не поддерживала более раннюю FRS. Поэтому для репликации между DC Samba и Windows единственным на сегодняшний день рабочим решением является односторонняя репликация средствами утилиты Robocopy из комплекта Windows Server 2003 Resource Kit Tools.

      Разработчики самбы, во избежание проблем с совместимостью, рекомендуют сначала установить комплект утилит на обычную рабочую станцию, и после этого скопировать Robocopy на контроллер в папку «C:\Program Files (x86)\Windows Resource Kits\Tools\»

      После установки, в планировщике задач на контроллере с Windows создаём задание на выполнение репликации со следующими параметрами:

      — Выполнять для всех пользователей
      — Триггер на выполнение Ежедневно каждые 5 минут в течение дня
      — В действиях прописываем путь к утилите robocopy, в качестве аргументов указываем:

      \\DC1\SYSVOL\test.local\ \\DC2\SYSVOL\test.local\ /mir /sec

      В конкретном случае копируем содержимое каталога SysVol с DC1 на DC2.

    • Переносимые папки пользователей с помощью конфигурации pam_mountОпытным путём я нащупал два жизнеспособных варианта решения этой задачи с его помощью.
      1. Полное монтирование папки с профилем из сети в раздел /homeПростой вариант. Отлично отрабатывает, если названия папок Мои документы, Загрузки и Рабочий стол совпадают в обеих операционных системах. Подразумевается, что ПК на Linux уже введён в домен и пользователи логинятся под своими доменными учётными записями, используя в качестве механизма аутентификации и авторизации sssd.
        # vim /etc/security/pam_mount.conf.xml
        <volume uid="100000000-2000000000" fstype="cifs" server="dfs" path="Profile_Users/%(USER)" mountpoint="~" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775"/>
        

        где:

        • uid=«100000000-2000000000» — диапазон UID, присваиваемый доменным пользователям от SSSD
        • server=«dfs» — имя файлового сервера
        • path=«Profile_Users/%(USER)» — ресурс на файловом сервере, с размещенным профилем пользователя
        • mountpoint=»~» — путь монтирования в домашнюю папку пользователя

        Логин пользователя передается в макропеременную «%(USER)», используемую pam_mount, для подключения нашего сетевого ресурса, в том виде, в котором он введен в дисплейном менеджере. Поэтому важно, чтобы в ДМ логин вводился без явного указания доменного имени.

        В sssd.conf это решается комментированием, либо выставлением значения False в опцию use_fully_qualified_names, которая включает режим полных имён (включая домен) для пользователей и групп.

      2. Второй способ менее прямолинейный и топорный, и на мой взгляд более удобный и предпочтительный. Отличие от первого только в конфигурации pam_mount
        # vim /etc/security/pam_mount.conf.xml
        <volume uid="100000000-2000200000" fstype="cifs" server="dfs" path="Profile_Users/%(USER)/Рабочий стол" mountpoint="~/Рабочий стол" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775"/>
        <volume uid="100000000-2000200000" fstype="cifs" server="dfs" path="Profile_Users/%(USER)/Downloads" mountpoint="~/Загрузки" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775"/>
        <volume uid="100000000-2000200000" fstype="cifs" server="dfs" path="Profile_Users/%(USER)/Мои документы" mountpoint="~/Документы" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775"/>

        То есть просто отдельно монтируем каждую нашу папку в соответствующий ей каталог

     

    Выводы

    За полмесяца работы на тестовом стенде данная связка успешно пережила несколько попеременных долговременных и кратковременных отключений обоих контроллеров, практически без последствий для клиентов (один раз клиент на Windows7 потерял доверительные отношения).

    В целом у меня остались довольно приятные впечатления от работы с этим продуктом, даже несмотря на все нюансы, с которыми пришлось столкнуться как в статье, так и «за кулисами».

    Подводные камни есть, их много, и по ходу работы с само собой их придётся вылавливать в большом количестве. Тем не менее на сегодняшний день нет иных решений, позволяющих организовывать гибридную среду, с использованием службы каталогов и без использования Windows.

    Источник статьи: https://habr.com/ru/post/450572/