Debian 10: Установка и настройка Samba Active Directory

Актуализировал тему по настройке Samba 4 в качестве контроллера домена. Ранее я разворачивал Samba в Docker, но в версии 4.11 возникли нюансы с диапазоном пробрасываемых портов со стороны iptables, поэтому использовал классическую установку.

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

Службы каталогов

В любой организации наступает период, когда появляется множество клиентов, серверов, сервисов – всё это требует сложности администрирования: разделение прав, создание\удаление учетных записей. Чем больше народу приходит в компанию, тем больше болит голова у админа. Очевидным решением становится использование службы каталогов – средства иерархического представления ресурсов с централизованным управлением. К сведению, первые службы каталогов появились ещё в 1984 году и продолжили своё развитие в различных вариациях. А когда Microsoft выпустила NTDS  (в дальнейшем переименован в Active Directory), то данный инструмент стал негласным стандартом и одним из самых распространенных в своём классе.

LDAP – протокол, который лёг в основу служб каталогов и используется в различных LDAP-совместимых реализациях служб каталогов. К примеру, таковыми являются (самые популярные и известные):

  • Active Directory;
  • OpenLDAP;
  • Samba Domain;
  • И прочие другие коммерческие.

Все записи LDAP представляются атрибутами в следующем виде:

cn=petrov,ou=office,dc=example,dc=com

где “petrov” – уникальная запись в Object Unit “office” домена example.com

Samba как DC

Но за всё надо платить, ибо самый популярный для таких целей Windows Server с Active Direcory на борту не бесплатный, а потому в последнее время с развитием пакета программ Samba 4 есть возможность использования Samba в качестве контроллера домена с применением групповых политик. О Samba 4 и последующей настройке и будет дальнейшее содержание данной статьи.

По своей сути Samba 4 есть Open-Source реализация Active Directory и, согласно документации, является стабильным вариантом применения в качестве домен-контроллера в production-среде.

Одним из минусов является отсутствие поддержки репликации Sysvol через DFS-R (условно говоря, sysvol – это директория с параметрами групповых политик, сценариев входа\выхода из системы и при использовании нескольких контроллеров домена, должна быть реплицирована на все имеющиеся контроллеры в домене). Samba пока что так не умеет, а потому есть решения с использованием rsync или более сложные и гибкие варианты. Но об этом в данном материале рассказано не будет.

В ранних версиях было ограничение размера БД до 4 гб в Samba при использовании в качестве контроллера домена, но данный вопрос был решён в версии 4.9 – реализован бэкенд LDB (экспериментальный), основанный на библиотеке LMDB, что в итоге позволяет создавать базы данных объемом свыше 4 гб. Для включения данного параметра нужно использовать ключ –backend-store=mdb. В данной статье, дабы не усложнять материал, обойдемся без данного ключа.

Перед установкой

Наименование домена

Перед началом инсталляции необходимо определиться с именем сервера и домена. В рамках данной статьи сервер с Samba на борту будет иметь полное имя (FQDN) dc0.ad.rmn-lux.ru, а сам домен – ad.rmn-lux.ru.

Кратко поясню, почему выбран именно такой формат именования.

  • Никаких названий а-ля PDC или BDC использовать не стоит – это пережитки прошлого;
  • Также не стоит использовать test.local и т.п. домены:
    • подобные имена противоречат rfc 6762
    • для такого домена не получится получить публичный TLS-сертификат
    • такое имя будет недоступно из внешней сети
  • Можно было бы назвать AD домен также, как основной домен сайта. Для примера, в таком случае имя домена было бы как и домен моего сайта – it-lux.ru. Это правильно, но в таком случае пришлось бы следить за публичной и внутренней зоной DNS, что не всегда удобно, т.к. может возникнуть рассинхрон.
  • В качестве имени можно выбрать домен из другой зоны, который не будет конфликтовать с основным доменом. В моём случае это может быть, например, it-lux.online или аналогичный домен в другой доменной зоне.

Исходя из вышесказанного, наиболее правильным, как мне кажется, использовать поддомен ad.rmn-lux.ru для названия домена AD, т.к. это будет консолидировано в рамках одного домена.

AD Schema

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

Информация с оф. сайта Samba по поддержке AD схем:

Windows Server VersionDirectory Schema Version
Windows Server 201687
Windows Server 2012R269
Windows Server 201256
Windows Server 2008R247
Samba VersionHighest Supported Schema Version
4.11 and later69
4.5 – 4.1069 *
4.0 – 4.447

Последняя стабильно поддерживаемая AD схема в Samba на момент написания данного материала – 69, а подходящая версия Samba для этого – 4.11 и выше.

Одним из нюансов является то, что в стабильных репозиториях Debian 10 доступна Samba версии только 4.9. Но хотелось бы использовать последние доступные возможности схемы домена, поэтому я на свой страх и риск подключил тестовые репозитории и произвёл дальнейшую установку Samba 4.11.3 из них:

Нажмите для раскрытия sources.list
deb http://ftp.ru.debian.org/debian/ testing main contrib non-free
deb-src http://ftp.ru.debian.org/debian/ testing main contrib non-free

deb http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free
deb-src http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free

deb http://security.debian.org/ testing/updates main contrib non-free
deb-src http://security.debian.org/ testing/updates main contrib non-free

DNS

Для домена необходимо использование DNS-сервера. Я остановился на распространённом варианте – использование встроенного в Samba DNS Internal. Допустимо использование BIND, но в рамках данной статьи его применение рассматриваться не будет.

Samba Internal DNS имеет следующие недостатки:

  • нельзя использовать как кеширующий сервер
  • не поддерживает рекурсивные запросы
  • нет shared-key transaction signature (TSIG)
  • нет зоны-заглушки
  • не поддерживает zone transfers
  • нет Round Robin балансировки между DC’s

Не смотря на вышеперечисленное, на практике это не доставляет проблем.

Подразумевается, что в сети, где разворачивается Samba AD, уже используется один или более DNS-серверов (например, тот же BIND, который не связан с Samba или внешние гугл\яндекс сервера). На этот DNS-сервер будут перенаправляться запросы клиентов Samba, т.е. он будет выбран в качестве forwarder.

Настройка hosts

Также сервер dc0.ad.rmn-lux.ru должен иметь статический IP-адрес и файл /etc/hosts со следующим содержимым:

127.0.0.1     localhost
172.16.0.16     dc0.ad.it-lux.ru     dc0

Удаление существующих файлов

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

mv /etc/samba/smb.conf /tmp && mv /etc/krb5.conf /tmp

Запущенные экземпляры Samba и сервисов

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

ps ax | egrep "samba|smbd|nmbd|winbindd"

Если под фильтр попадает что-то из запущенного, нужно остановить:

systemctl stop samba-ad-dc smbd nmbd winbind

Скрыть юниты, чтобы они не могли быть запущены:

systemctl mask samba-ad-dc smbd nmbd winbind

И отключить:

systemctl disable samba-ad-dc smbd nmbd winbind

Установка

Для своих серверов я всегда использую Centos, но здесь пришлось сделать исключение и выбрать Debian, т.к. Samba, доступная из основных пакетов в Centos, не может выступать в роли AD.

Вариантов установки на Centos было несколько: собрать из пакетов (что на продуктивном сервере совсем некошерно) или установить из сторонних репозиториев (например, tissamba), но решил попробовать Debian, т.к. не хотелось искать обходные пути.

Но и с Debian оказался нюанс, т.к. в основных стабильных репозиториях не было нужной мне версии. Тем не менее, вариант установки из официальных репозиториев, пусть и тестовых, меня более чем устроил.

Каждый волен выбирать тот вариант установки и тот дистрибутив, который подходит для той или иной задачи, но стоит учесть будущие возможные обновления и связанные с этим проблемы при использовании сборки из исходников или чужого репозитория, который не будет работать, например.

Зависимости, необходимые для Samba AD в Debian:

apt-get install acl attr autoconf bind9utils bison build-essential \
  debhelper dnsutils docbook-xml docbook-xsl flex gdb libjansson-dev krb5-user \
  libacl1-dev libaio-dev libarchive-dev libattr1-dev libblkid-dev libbsd-dev \
  libcap-dev libcups2-dev libgnutls28-dev libgpgme-dev libjson-perl \
  libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl \
  libpopt-dev libreadline-dev nettle-dev perl perl-modules pkg-config \
  python-all-dev python-crypto python-dbg python-dev python-dnspython \
  python3-dnspython python-markdown python3-markdown \
  python3-dev xsltproc zlib1g-dev liblmdb-dev lmdb-utils

В оф. документации указаны пакеты python-gpgme python3-gpgme для зависимостей, но в Debian 10 его больше нет, так что его я не устанавливал.

Настройка домена:

Для установки Samba в Debian 10 нужны следующие пакеты:

apt-get install acl attr samba samba-dsdb-modules samba-vfs-modules winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user

Напоминаю, что мне нужна была версия 4.11, поэтому после установки нужно убедиться, что будет использоваться пакет нужной версии:

samba-tool --version

4.11.3-Debian

Теперь непосредственно настройка домена:

samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL --realm=AD.IT-LUX.RU --domain=AD --adminpass=Password

Указывается роль – domain controller, использование необходимого rfc2307, согласно оф. документации – для возможности хранения атрибутов Unix в AD, встроенный DNS, имя домена – обязательно заглавными буквами и NetBIOS имя домена одним словом без точки, а также указание админского пароля.

Теперь надо сконфигурировать /etc/resolv.conf, чтобы в качестве резолвера использовался DNS из Samba (по идее, можно было бы сделать до создания домена):

Нажмите, чтобы раскрыть /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp0s3
allow-hotplug enp0s3
iface enp0s3 inet static
address 172.16.0.16/24
gateway 172.16.0.1
dns-nameservers 127.0.0.1

/etc/resolv.conf:

search ad.it-lux.ru
nameserver 127.0.0.1

На всякий случай уточню, что файл resolve.conf может затираться NetworkManager`ом или установленной утилитой resolvconf после рестарта, стоит это иметь ввиду.

Kerberos

Kerberos – это сетевой протокол, который будет использоваться для аутентификации.

В самом начале выпиливался стандартный конфиг kerberos – теперь нужно вернуть его назад с новыми настройками, сделав следующее:

cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

И проверить его содержимое (на всякий случай):

cat /etc/krb5.conf

[libdefaults]
        default_realm = AD.IT-LUX.RU
        dns_lookup_realm = false
        dns_lookup_kdc = true

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

systemctl enable samba-ad-dc

Synchronizing state of samba-ad-dc.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable samba-ad-dc
Failed to enable unit: Unit file /etc/systemd/system/samba-ad-dc.service is masked.

Симлинк, ведущий в /dev/null, нужно удалить и выполнить перезагрузку сервисов systemd:

rm /etc/systemd/system/samba-ad-dc.service && systemctl daemon-reload

И запустить самбу, которая подтянет уже всё остальное, что ей нужно:

systemctl enable --now samba-ad-dc

Правка конфигурационного файла Samba

После установки конфиг выглядит примерно так:

# Global parameters
[global]
        dns forwarder = 127.0.0.1
        netbios name = DC0
        realm = AD.IT-LUX.RU
        server role = active directory domain controller
        workgroup = AD-IT-LUX
        idmap_ldb:use rfc2307 = yes

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

[netlogon]
        path = /var/lib/samba/sysvol/ad.it-lux.ru/scripts
        read only = No

Но по своему опыту скажу, что штатный конфиг нужно поправить, местами упростив настройки. Ниже кратко опишу опции конфигурационного файла /etc/samba/smb.conf:

Нажмите, чтобы посмотреть полный конфиг
# Global parameters
[global]
        dns forwarder = 127.0.0.1
        netbios name = DC0
        realm = AD.IT-LUX.RU
        server role = active directory domain controller
        workgroup = AD-IT-LUX
        idmap_ldb:use rfc2307 = yes

        bind interfaces only = yes # слушать только на указанных интерфейсах
        interfaces = 127.0.0.1 172.16.0.16

        dns forwarder = 8.8.8.8 # вышестоящий DNS-сервер
        allow dns updates = nonsecure and secure # разрешает nonsecure  запросы

        ldap server require strong auth = no # необходимо для авторизации
        domain master = yes # Для указания того, что данный КД является мастером при наличии других 
        local master = yes
        preferred master = yes

        vfs objects = acl_xattr # для настройки share используя ACL на Unix. По умолчанию включен, но всё равно прописал для наглядности
        map acl inherit = yes
        store dos attributes = yes

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

[netlogon]
        path = /var/lib/samba/sysvol/ad.it-lux.ru/scripts
        read only = No

После внесения изменений в конфиг, нужно выполнить рестарт сервиса:

systemctl restart samba-ad-dc

Проверка настроек

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

Общая проверка выполняется командой testparm:

Нажмите для раскрытия…
testparm

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_ACTIVE_DIRECTORY_DC

Press enter to see a dump of your service definitions

# Global parameters
[global]
        allow dns updates = nonsecure and secure
        bind interfaces only = Yes
        dns forwarder = 8.8.8.8
        domain master = Yes
        interfaces = 127.0.0.1 172.16.0.16
        ldap server require strong auth = No
        passdb backend = samba_dsdb
        preferred master = Yes
        realm = AD.IT-LUX.RU
        server role = active directory domain controller
        workgroup = AD-IT-LUX
        rpc_server:tcpip = no
        rpc_daemon:spoolssd = embedded
        rpc_server:spoolss = embedded
        rpc_server:winreg = embedded
        rpc_server:ntsvcs = embedded
        rpc_server:eventlog = embedded
        rpc_server:srvsvc = embedded
        rpc_server:svcctl = embedded
        rpc_server:default = external
        winbindd:use external pipes = true
        idmap_ldb:use rfc2307 = yes
        idmap config * : backend = tdb
        map acl inherit = Yes
        map archive = No
        vfs objects = acl_xattr


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


[netlogon]
        path = /var/lib/samba/sysvol/ad.it-lux.ru/scripts
        read only = No

Посредством команд hosts и wbinfo можно провести ряд проверок, результат выполнения которых должен быть без ошибок:

host -t A dc0.ad.it-lux.ru
dc0.ad.it-lux.ru has address 172.16.0.16

host -t A ad.it-lux.ru
ad.it-lux.ru has address 172.16.0.16

wbinfo -t
checking the trust secret for domain AD-IT-LUX via RPC calls succeeded

wbinfo -p
Ping to winbindd succeeded

wbinfo -P
checking the NETLOGON for domain[AD-IT-LUX] dc connection to "dc0.ad.it-lux.ru" succeeded

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

Проверка БД Samba
samba-tool dbcheck

Исправление ошибок с БД
samba-tool dbcheck --fix

Проверка прав доступа к sysvol
samba-tool ntacl sysvolcheck

При наличии ошибок с sysvol - исправление
samba-tool ntacl sysvolreset

Администрирование

Если все проверки пройдены и никаких ошибок не возникло, можно приступать к использованию домена.

Можно посмотреть общую информацию о домене:

samba-tool domain info dc0.ad.it-lux.ru

Forest           : ad.it-lux.ru
Domain           : ad.it-lux.ru
Netbios domain   : AD-IT-LUX
DC name          : dc0.ad.it-lux.ru
DC netbios name  : DC0
Server site      : Default-First-Site-Name
Client site      : Default-First-Site-Name

Проверить список дефолтных юзеров через wbinfo или samba-tool:

wbinfo -u

AD-IT-LUX\administrator
AD-IT-LUX\guest
AD-IT-LUX\krbtgt
samba-tool user list

И список групп:

wbinfo -g

AD-IT-LUX\cert publishers
AD-IT-LUX\ras and ias servers
AD-IT-LUX\allowed rodc password replication group
AD-IT-LUX\denied rodc password replication group
AD-IT-LUX\dnsadmins
AD-IT-LUX\enterprise read-only domain controllers
AD-IT-LUX\domain admins
AD-IT-LUX\domain users
AD-IT-LUX\domain guests
AD-IT-LUX\domain computers
AD-IT-LUX\domain controllers
AD-IT-LUX\schema admins
AD-IT-LUX\enterprise admins
AD-IT-LUX\group policy creator owners
AD-IT-LUX\read-only domain controllers
AD-IT-LUX\dnsupdateproxy
samba-tool group list

А также список компьютеров (пока что только один КД):

samba-tool computer list

DC0$

Создание пользователя:

samba-tool user create newuser

Задать ему пароль:

samba-tool user setpassword newuser

Деактивировать пользователя:

samba-tool user disable newuser

Прочие команды можно посмотреть, выполнив:

samba-tool --help

через samba-tool также настраивается DNS.

Настройку и управление также можно осуществлять посредством RSAT, т.е. классическими виндовыми оснастками, но мне больше нравится консольный вариант непосредственно с самого сервера Samba.

Бэкап

В официальной документации подробно всё описано, поэтому первоначально стоит ознакомиться с информацией там.

После настройки благоразумно будет обеспечить резервное копирование Samba. Есть несколько типов резервирования: “Online” и “Offline”.

Online делает копию работающей базы DC:

samba-tool domain backup online --targetdir=<output-dir> --server=<DC-server> -UAdministrator

Offline создает резервные копии файлов Samba:

samba-tool domain backup offline --targetdir=<output-dir>

Каждая команда создает файл резервной копии .tar.bz2, который содержит полную резервную копию домена (на основе данного DC). Затем файл резервной копии можно использовать для восстановления домена с помощью команды «samba-tool domain backup restore».

Использовать ту или иную схему бэкапа нужно в зависимости от ситуации. В обычных случаях Online-бэкап самый простой и быстрый, но в случае каких-то неполадок и для их расследования и устранения лучше подойдёт Offline-бэкап, т.к. содержит в себе дополнительные данные.

В идеале можно комбинировать оба способа, настроив бэкап по крону с созданием нужного кол-ва копий.

Заключение

Теперь, когда имеется установленный и настроенный контроллер домена, можно найти ему применение. Например, завести все рабочие станции офиса в домен и централизованно ими управлять. Или же настроить RADIUS для авторизации на VPN-сервере через доменную учётную запись.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *