Установка Active Directory на Samba4
Четверг, 28 сентября 2017 13:16

Установка Active Directory на Samba4

Автор
Оцените материал
(7 голосов)

Новые веяния в стране: организовать импортозамещение в сфере IT. Бредовая идея, но выполнять надо. Первое, что требуется сделать в существующей, развернутой и нормально функционирующей сетевой среде, основанной на доменной структуре Microsoft Windows - выбрать аналог Active Directory из свободного ПО. Ситуация осложняется тем, что выбор ограничен только сертифицированным ПО. А выбор не то что не богат, а попросту его почти нет. Из всех сборок Linux на сегодняшний день допущены только три: AltLinux, Rosa и AstraLinux. Из всех этих сборок я свой выбор остановил на Rosa Cobalt, т.к. это все же практически RedHat. Ну и замена самой Active Directory. А т.к. процесс перехода обещает быть долгим, и в сети еще долгое время будут жить ПК с Windows, то требуются групповые политики. Из всех аналогов (вернее ПО, поддерживающего LDAP) выбор только один - Samba (начиная с версии 4).

В данной статье описывается процесс создание домена Active Directory на Linux с использованием Samba 4.

Итак. Начнем.

    1. Устанавливаем ОС (Rosa, CentOS, RedHat - не важно) в режиме минимальной установки). Процесс описывать не буду, т.к. он тривиально прост.
    2. После успешной установки и загрузки в первую очередь подключаем репозитарии и обновляем систему.

      В CentOS:

      yum install epel-release -y

      В Rosa Cobalt:

      Открываем файл /etc/yum.repos.d/rels.repo и меняем в четырех репозитариях enabled=0 на enabled=1

      Затем стандартно проводим обновление:

      yum upgrade
    3. Отключаем selinux:

      Меняем в файле /etc/selinux/config SELINUX=permissive на SELINUX=disabled

      Применяем без перезагрузки:

      setenforce 0
    4. Отключаем в системе поддержку ipv6:

      Создаем файл /etc/sysctl.d/ipv6.conf и записываем туда параметры

      net.ipv6.conf.all.disable_ipv6 = 1
      net.ipv6.conf.default.disable_ipv6 = 1

      Перезапускаем сеть

      systemctl restart network

      Меняем в файле /etc/ssh/sshd_config строку "AddressFamily any" на "AddressFamily inet"

      systemctl restart sshd
    5. Дописываем в файл /ets/hosts данные вашего сервера:

      xxx.yyy.zzz.www namePC.namedomain.prefix namePC
    6. Samba можно установить либо из репозитария, либо из исходников. Если устанавливаем из репозитария, то пункты с 7 по 10 можно пропустить. С какой-то версии пакеты разделились: для пользовательского компьютера и для контролера домена. Для КД пакет называется samba-dc. Устанавливаем полный набор пакетов для Samba:
      yum install samba*
    7. Устанавливаем пакеты, необходимые для работы Samba:

      yum install perl gcc libacl-devel libblkid-devel gnutls-devel readline-devel python-devel gdb pkgconfig krb5-workstation zlib-devel setroubleshoot-server libaio-devel setroubleshoot-plugins\
      policycoreutils-python libsemanage-python setools-libs-python setools-libs popt-devel libpcap-devel sqlite-devel libidn-devel libxml2-devel libacl-devel libsepol-devel libattr-devel keyutils-libs-devel\
      cyrus-sasl-devel cups-devel bind bind-utils libxslt docbook-style-xsl openldap-devel pam-devel bzip2 vim wget -y
    8. Загружаем Samba 4. На момент написание статьи последняя версия была 4.6.8

      wget https://download.samba.org/pub/samba/stable/samba-4.6.8.tar.gz
    9. Распаковываем архив:

      tar -zxvf samba-4.6.8.tar.gz
    10. Устанавливаем Samba:

      cd samba-4.6.8
      ./configure --enable-debug --enable-selftest --with-ads --with-systemd --with-winbind
      make
      make install
    11. Запускаем DNS сервер.

      В файле настроек /etc/named.conf изменяем:

      listen-on { any; }
      комментируем строку listen-on-v6
      allow-query { ваша подсеть; localhost; }
      forward first;
      forwarders { IP_внешнего_сервера_DNS; };
      recursion yes;Далее запускаем сервер
      systemctl start named

      Если запуск прошел удачно, то включаем автостарт сервиса

      systemctl enable named
    12. Переименовываем файл /etc/krb5.conf в /etc/krb5.conf.default
    13. Создаем файл /etc/profile.d/samba.sh с содержимым:
      export PATH=/usr/local/samba/bin:$PATH
    14. Разворачиваем новый домен:

      samba-tool domain provision --use-rfc2307 --interactive
    15. Почти на все вопросы можно нажать Enter (параметры по умолчанию показаны в квадратных скобках. На вопрос DNS backend необходимо ответит BIND9_DLZ, если планируется использовать более сложную структуру DNS, чем поддерживает ввстроенный в SAMBA DNS сервер (например мне не удалось подключить к встроенному серверу ведомую (secondary) зону. Переключение между BIND и встроенным сервером доступно в любой момент.
    16. Донастраиваем DNS:

      Вносим изменения в файл /etc/named.conf

      Дописываем строку в конец файла: include "/usr/local/samba/private/named.conf";

      В раздел Option добавлям строку tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab";

    17. Создаем линк на файл krb5.conf:
      ln -sf /usr/local/samba/private/krb5.conf /etc/krb5.conf
    18. Перезапускаем DNS:
      systemctl restart named
    19. Открваем во встроенном файерволе необходимые для работы Samba порты:
      firewall-cmd --add-port=53/tcp --permanent;firewall-cmd --add-port=53/udp --permanent;firewall-cmd --add-port=88/tcp --permanent;firewall-cmd --add-port=88/udp --permanent; \
      firewall-cmd --add-port=135/tcp --permanent;firewall-cmd --add-port=137-138/udp --permanent;firewall-cmd --add-port=139/tcp --permanent; \
      firewall-cmd --add-port=389/tcp --permanent;firewall-cmd --add-port=389/udp --permanent;firewall-cmd --add-port=445/tcp --permanent; \
      firewall-cmd --add-port=464/tcp --permanent;firewall-cmd --add-port=464/udp --permanent;firewall-cmd --add-port=636/tcp --permanent; \
      firewall-cmd --add-port=1024-5000/tcp --permanent;firewall-cmd --add-port=3268-3269/tcp --permanent
      ferewall-cmd --reload
    20. Создаем файл автозапуска службы Samba /etc/systemd/system/samba.service
      [Unit]
      Description= Samba 4 Active Directory
      After=syslog.target
      After=network.target
      [Service]
      Type=forking
      PIDFile=/usr/local/samba/var/run/samba.pid
      ExecStart=/usr/local/samba/sbin/samba
      [Install]
      WantedBy=multi-user.target

       

    21. Запускаем Samba:
      systemctl enable samba
      systemctl start samba
    22. Создаем обратную зону для нашей сети:
      samba-tool dns zonecreate (FQDN AD сервера)  ZZZ.YYY,XXX,in-addr.arpa -Uadministrator
      Где ZZZ.YYY,XXX,in-addr.arpa соответствует сети XXX.YYY.ZZZ.0/24
    23. Добавляем в обратную зону адрес нашего AD сервера:
      samba-tool dns add (FQDN AD сервера) ZZZ.YYY,XXX,in-addr.arpa NNN PTR (FQDN AD сервера) -Uadministrator
      Где NNN последняя часть IP адреса сервера AD.
    24. Проверяем корректность аутентификацию NT:
      smbclient -L localhost -U%
      Если все прошло удачно, то увидим:
      Domain=[ИМЯ ДОМЕНА] OS=[Windows 6.1] Server=[Samba 4.6.8]
      
      Sharename       Type             Comment
       — — — —      — — —        — — — -
       netlogon          Disk
       sysvol             Disk
       IPC$               IPC               IPC Service (Samba 4.6.8)
      Domain=[ИМЯ ДОМЕНА] OS=[Windows 6.1] Server=[Samba 4.6.8]
      
      Server                     Comment
       — — —                 — — — — — -
      
      Workgroup              Master
       — — — —             — — — — -
    25. Проверяем работу DNS:
      host -t SRV _ldap._tcp.domain.local
      host -t SRV _kerberos._udp.domain.local
      host -t A dc.domain.local
      host -t PTR (IP адрес сервера AD)
      
      Если ошибок нет, то увидим что-то подобное:
      _ldap._tcp.ИМЯ ДОМЕНА.ПРЕФИКС has SRV record 0 100 389 FQDN сервера.
      _kerberos._udp.ИМЯ ДОМЕНА.ПРЕФИКС has SRV record 0 100 88 FQDN сервера.
      FQDN сервера has address IP сервера
      NNN.ZZZ.YYY.XXX.in-addr.arpa domain name pointer FQDN сервера.
      
    26. Немного правим smb.conf:
      # Global parameters
      [global]
       workgroup = DOMAIN
       realm = domain.local
       netbios name = DC
       server services = s3fs, rps, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
       server role = active directory domain controller
       # если в DNS нет записей, то перенаправление на Google Public DNS
       dns forwarder = 8.8.8.8
       # Don’t allow any updates | allow unsigned updates | only signed updates
       # allow dns updates = False | nonsecure | signed
       allow dns updates = nonsecure
       # команда для обновления обратной и прямой зоны
       nsupdate command = /bin/nsupdate -g
       wins support = yes
      
      [netlogon]
       path = /usr/local/samba/var/locks/sysvol/domain.local/scripts
       read only = No
       write ok = Yes
      
      [sysvol]
       path = /usr/local/samba/var/locks/sysvol
       read only = No
       write ok = Yes
      
    27. Настройка сервера времени.

      По умолчанию в последних версиях Linux используется сервер времени Chronicd. Этот сервер специально разработан для "изолированных" систем. Т.е. клиенты могут обновлять свое время не зависимо от того подключен сервер к вышестоящему источнику времени или нет. Но единственный и, в данном случае важный, недостаток этого сервиса в том, что он не совместим с клиентами Windows (во всяком случае мне не удалось с наскока их подружить). Исходя из этого я выбрал несколько другую схему. Устанавливается отдельный сервер времени Chronycd, имеющий выход к вышестоящему источнику времени. А на контролеры домена устанвливается давно проверенный сервер NTPD, который синхронизируется с выделенным сервером времени в локалке. Недостаток NTPd в том, чтот если он не имеет доступа к своему источнику, то он перестает отдавать время своим клиентам. А КД в интернет выпускать - это плохая идея. Поэтому и выбрана такая схема.
      Наши действия на контроллере домена.
      Останавливаем и запрещаем автозапуск сервера chronyd:
      systemctl stop chronyd
      systemctl disable chronyd
      
      Устанавливаем сервер времени NTPd (если еще не установлен):
      yum install ntp
      
      Правим файл конфигупации /etc/ntp.conf. Добавляем строки:
      restrict -4 default kod nomodify notrap noquery mssntp
      restrict XXX.YYY,ZZZ.0 mask 255.255.255.0 nomodify notrap
      ntpsigndsocket /usr/local/samba/var/lib/ntp_signd
      server XXX.YYY.ZZZ.NNN iburst prefer - адрес локального сервера времени
      listen XXX.YYY.ZZZ.HHH - адрес интерфейса контролера домена
      
      Остальное оставляем без изменений. Стартуем сервер времени:
      systemctl start ntpd
      systemctl enable ntpd
      
      Проверяем udp порт:
      ss -u -a
      
      Вывод должен содержать строку примерно такого вида:
      UNCONN      0      0             XXX.YYY.ZZZ.HHH:ntp             *.*
      
      Если она присутствует, то сервер поднялся и готов служать запросы от клиентов. Открываем соответствующий порт в файерволе контролера домена:
      firewall-cmd --permanent --add-port=123/udp
      fiewall-cmd --reload
      
    28. Одного КД в сети недостаточно. Всегда нужно использовать как минимум два. Устанавливаем второй КД.
      Установка достаточно проста. Повторяем пункты с 1 по 13.
      Приводим файл /etc/krb5.conf к виду:
      [libdefaults]
          dns_lookup_realm = false
          dns_lookup_kdc = true
          default_realm = ИМЯДОМЕНА.ПРЕФИКС
      
      Подключаем сервер в качестве резервного контролера домена:
      samba-tool domain join имядомена.префикс DC --dns-backend=BIND9_DLZ -U"ИМЯДОМЕНА.ПРЕФИКС\administrator"
      
      Удаляем файл /etc/krb5.conf
      Создаем сиволическую ссылку на новый файл:
      ln -sf /usr/local/samba/private/krb5.conf /etc/krb5.conf
      
      Донастраиваем BIND в соответствии с п.16
      Перезапускаем BIND
      Открываем необходимые порты в соответствии с п.19.
      Создаем файл автозапуска в соответствии с п.20
      Донастраиваем smb.conf в соответствии с пунктом 26.
      Запускаем Samba
      Настраиваем сервер времени в соответствии с п.27
    29. Samba не умеет синхронизировать SYSVOL между контроллерами домена. Ставим "костыль".
      Нам необходима двунаправленная синхронизация между контролерами домена. Мой выбор пал на osync+rsync.
      Устанавливаем rsync на каждый контроллер домена:
      yum install rsync
      Пакета osync как правило в репозитариях нет. Скачиваем исходник. Текущую версию можно посмотреть и взять здесь: https://github.com/deajan/osync/releases
      Распаковываем архив и устанавливаем:
      tar xvf v1.2.tar.gz
      cd osync-1.2
      ./install.sh
      
      Установщик скопирует osync в папку /usr/local/bin и создаст первоначальный файл конфигурации /etc/osync/sync.conf.example
      Необходимо скопировать его с именем osync.conf
      Вносим изменения в данный файл:
      #!/usr/bin/env bash
      INSTANCE_ID="sysvol_sync"
      INITIATOR_SYNC_DIR="/usr/local/samba/var/locks/sysvol"
      TARGET_SYNC_DIR="ssh://root@DC2:22//usr/local/samba/var/locks/sysvol"
      SSH_RSA_PRIVATE_KEY="/root/.ssh/id_rsa"
      CREATE_DIRS=yes
      REMOTE_3RD_PARTY_HOSTS=""
      PRESERVE_ACL=yes
      PRESERVE_XATTR=yes
      SOFT_DELETE=yes
      DESTINATION_MAILS="Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript."
      #REMOTE_RUN_AFTER_CMD="/usr/local/samba/bin/samba-tool ntacl sysvolreset"
      
      Создаем ключ для подключения к другому контроллеру и копируем его на него:
      ssh-keygen -t rsa
      ssh-copy-id -i ~/.ssh/id_rsa.pub root@DC2
      
      Проверяяем корректность подключения:
      ssh DC2
      
      Перед запуском делаем резервную копию SYSVOL. Она сохраняется в папке /usr/local/samba/var/locks/sysvol/.osync_workdir/
      /usr/local/bin/osync.sh /etc/osync/sync.conf --dry --verbose
      
      Если все прошло без ошибок, то убираем параметр --dry и запускаем снова:
      /usr/local/bin/osync.sh /etc/osync/sync.conf --verbose
      
      После этого SYSVOL синхронизировался на обоих серверах.
      Включаем на первом сервере (там где установлен osync) синхронизацию по расписанию:
      crontab -e 
      */5 * * * *   /usr/local/bin/osync.sh /etc/osync/sync.conf --silent
    30. И наконец. Управление всем этим хозяйством осуществляется из командной строки сервера, на котором установлен Samba, либо с помощью хорошо знакомых утилит от MS Remote Server Administrator Tools (RSAT), установленный на компьютере под управлением Windows. На компьютере с Linux и эмулятором Wine это не работает.
    31. В итоге мы получили ПОЧТИ полноценный аналог Active Directory, работающий на ссерверах Linux. Что теряем и приобретаем:
       Переход от до MS AD к Samba AD возможен с минимальными потерями.
       В домене Samba работает аутентификация пользователей и рабочих станций под управлением Windows и Linux.
       Работает авторозация и предоставление ресурсов.
       Есть поддержка групповых политик для работы клиентов MS Windows.
       Есть перемещыемые профили.
       Управление доменом Samba осуществляется либо из консоли сервера, либо с помощью инструментов MS (RSAT), развернутых на рабочей станции под управлением MS Windows (в оболочке Wine под управлением Linux данный инструментарий не работает).
       Присутствует поддержка протоколов SMB2 и SMB3 (в том числе с поддержкой шифрования).
       Работает реплиуация с другими серверами AD (в том числе с Windows 2012)

      Выявленные недостатки:

      Между серверами Samba AD не реплицируется хранилище SYSVOL, что приводит к некоректной работе (например групповых политик). Для осуществления репликации необходимо использовать другой инструментарий из состава ОС Linux (т.е. дополнительные настройки "костыля")
      Доверительные отношения работают только в одном направлении (от Windows к Samba но не наоборот), что не позволяет организовать лес доменов.
      Не поддерживаются поддомены

          a) В Samba отсутствует глобальный каталог и полноценная поддержка фантомных объектов.
          b) Проблемы при построении структуры AD (Active Directory browser), проблемы при поиске объектов в другом домене.
          c) При применении групповых политик в многодоменной среде могут быть проблемы с определением, в каком домене находится компьютер.

      DFS работает только в режиме одиночного сервера.
      Не реализовано DFS-R
      Не полностью реализован RODC.
      Ограничение размера базы TDB в 4 Гб. Это ограничивает переход от леса доменов к плоской структуре с одним доменом.
      Samba AD функционирует на уровне контроллера доменов Windows 2008 R2. В домен на уровне Windows 2012 Samba можно ввести только как клиент, но не как контроллер домена. Переход от AD 2012 к Samba невозможен.

Дополнительная информация

Прочитано 26145 раз Последнее изменение Пятница, 22 декабря 2017 13:03
Авторизуйтесь, чтобы получить возможность оставлять комментарии
Madwavenew
Top
Этот шаблон Joomla был скачан с сайта ДжуМикс.