Samba AD DC (Active Directory Domain Controller) — это сервер на базе Linux, который использует программное обеспечение Samba для предоставления функций контроллера домена Active Directory, обеспечивая аутентификацию пользователей и компьютеров в сети с использованием протоколов SMB и AD.
Samba AD DC включает интегрированные службы LDAP, Kerberos (KDC) и DNS, позволяя управлять объектами групповой политики и служить как основной сервер для AD.
Разворачивать Samba AD-DC будем на базе Ubuntu 24.04
После установки и предварительных настроек Ubuntu 24.04 перейдем к установке и настройке Samba.
В качестве DNS сервера будет выступать Bind, а в качестве DHCP сервера будет установлен isc-dhcp-server.
В начале отключите инструменты, такие как resolvconf, которые автоматически обновляют файл конфигурации DNS-резолвера /etc/resolv.conf.
Контроллеры домена (DCs) AD и члены домена должны использовать DNS-сервер, способный разрешать зоны AD DNS
https://wiki.samba.org/index.php/Distribution-specific_Package_Installation
sudo systemctl disable systemd-resolved.service
sudo service stop systemd-resolved
sudo rm /etc/resolv.conf
sudo nano /etc/resolv.conf
nameserver 1.1.1.1
Проверить что в файле /etc/hosts на DC правильно соотносится полное доменное имя (FQDN) и короткое имя хоста с ip адресом
Имя хоста и FQDN не должны преобразовываться в ip адрес 127.0.0.1 или в любой другой отличный от того который используется на LAN интерфейсе DC
sudo nano /etc/hosts
127.0.0.1 localhost
10.0.0.254 vmdc01.ladm.lazyadmin.ru vmdc01
Если контроллер домена Samba Active Directory (AD) будет настроен с помощью BIND9_DLZ, необходимо сначала установить и настроить DNS-сервер BIND.
sudo apt install -y acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle smbclient python3 perl
Запросы настройки kerberos оставляем по умолчанию
После установки нужно остановить SAMBA и удалить старые конфигурационные файлы и перенастроить
sudo systemctl stop samba-ad-dc.service smbd.service nmbd.service winbind.service
sudo systemctl disable samba-ad-dc.service smbd.service nmbd.service winbind.service
Смотрим где лежат конфиги
smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
Переименовываем smb.conf в smb.conf.orig
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
Удаляем все файлы баз данных Samba , такие как *.tdb and *.ldb.
Список директорий где лежат такие файлы:
smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
LOCKDIR: /run/samba
STATEDIR: /var/lib/samba
CACHEDIR: /var/cache/samba
PRIVATE_DIR: /var/lib/samba/private
sudo rm /run/samba/*.tdb
sudo rm /run/samba/*.ldb
sudo rm /var/lib/samba/*.tdb
sudo rm /var/lib/samba/*.ldb
sudo rm /var/cache/samba/*.tdb
sudo rm /var/cache/samba/*.ldb
sudo rm /var/lib/samba/private/*.tdb
sudo rm /var/lib/samba/private/*.ldb
Ставим chrony
sudo apt install -y chrony
Chrony должен уметь читать в директории ntp_signed
sudo ls -ld /var/lib/samba/ntp_signd/
Если папки нет ее надо создать
sudo mkdir /var/lib/samba/ntp_signd/
и назначить права доступа
sudo chown root:_chrony /var/lib/samba/ntp_signd/
sudo chmod 750 /var/lib/samba/ntp_signd/
Ниже приведен минимальный файл chrony.conf, который синхронизирует время с тремя внешними NTP-серверами и позволяет клиентам запрашивать время с помощью подписанных NTP-запросов:
sudo mv /etc/chrony/chrony.conf /etc/chrony/chrony.conf.orig
sudo nano /etc/chrony/chrony.conf
# Welcome to the chrony configuration file. See chrony.conf(5) for more
# information about usuable directives.
# This directive specify the location of the file containing ID/key pairs for
# NTP authentication.
keyfile /etc/chrony/chrony.keys
# This directive specify the file into which chronyd will store the rate
# information.
driftfile /var/lib/chrony/chrony.drift
# Uncomment the following line to turn logging on.
#log tracking measurements statistics
# Log files location.
logdir /var/log/chrony
# Stop bad estimates upsetting machine clock.
maxupdateskew 100.0
# This directive tells 'chronyd' to parse the 'adjtime' file to find out if the
# real-time clock keeps local time or UTC. It overrides the 'rtconutc' directive.
hwclockfile /etc/adjtime
# This directive enables kernel synchronisation (every 11 minutes) of the
# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.
rtcsync
# Step the system clock instead of slewing it if the adjustment is larger than
# one second, but only in the first three clock updates.
makestep 1 3
# ipaddress of this DC
bindcmdaddress 10.0.0.254
# The source, where we are receiving the time from
server 10.0.0.1 iburst
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server pool.ntp.org iburst
server ru.pool.ntp.org iburst
# dns netmask
allow 10.0.0.0/24
ntpsigndsocket /usr/local/samba/var/lib/ntp_signd
sudo systemctl restart chronyd
sudo systemctl status chronyd
chrony.service - chrony, an NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chrony.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-08-22 14:43:03 +05; 5s ago
Предварительная настройка закончена.
Инициализация домена в интерактивном режиме
!!! внимание на сетевой интерфейс
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether bc:24:11:cf:04:40 brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 10.0.0.254/24 brd 10.0.0.255 scope global ens18
valid_lft forever preferred_lft forever
inet6 fe80::be24:11ff:fecf:440/64 scope link
valid_lft forever preferred_lft forever
sudo samba-tool domain provision --use-rfc2307 --interactive --option="interfaces=lo ens18" --option="bind interfaces only=yes"
Если у вас на сервере несколько сетевых интерфейсов используйте ключи
—option=»interfaces=lo ens160″ —option=»bind interfaces only=yes»
Realm []: LADM.LAZYADMIN.RU
Domain []: LADM
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
Вводим пароль администратора домена
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink!
Setting up fake yp server settings
Once the above files are installed, your Samba AD server will be ready to use
Server Role: active directory domain controller
Hostname: vmdc01
NetBIOS Domain: LADM
DNS Domain: ladm.lazyadmin.ru
DOMAIN SID: [строка с SID]
Донастраиваем BIND
sudo nano /etc/resolv.conf
search ladm.lazyadmin.ru
nameserver 10.0.0.254
sudo nano /etc/bind/named.conf.options
tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
sudo nano /etc/bind/named.conf.local
include "/var/lib/samba/bind-dns/named.conf";
Настройка модуля BIND9_DLZ
sudo nano /var/lib/samba/bind-dns/named.conf
строка должна быть раскомментирована
database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_18.so";
выставляем права доступа к файлам
sudo chmod 640 /var/lib/samba/private/dns.keytab
sudo chown root:bind /var/lib/samba/private/dns.keytab
sudo chmod 770 /var/lib/samba/bind-dns
sudo chown root:bind /var/lib/samba/bind-dns
Настраиваем Kerberos
sudo mv /etc/krb5.conf /etc/krb5.conf.orig
sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
sudo chown root:bind /etc/krb5.conf
Перезапускаем BIND
sudo systemctl restart bind9
sudo systemctl status bind9
Включаем Samba ad-dc
sudo systemctl unmask samba-ad-dc.service
sudo systemctl enable samba-ad-dc.service
sudo systemctl restart samba-ad-dc.service
sudo systemctl status samba-ad-dc.service
Создаем зону для обратных записей
https://wiki.samba.org/index.php/DNS_Administration#Administering_DNS_on_Linux/Unix_with_samba-tool
sudo samba-tool dns zonecreate vmdc01.ladm.lazyadmin.ru 0.0.10.in-addr.arpa -U Administrator
Password for [LADM\Administrator]:
Zone 0.0.10.in-addr.arpa created successfully
Обратную зону создали, теперь добавим обратную запись для контролера домена
sudo samba-tool dns add vmdc01.ladm.lazyadmin.ru 0.0.10.in-addr.arpa 254 PTR vmdc01.ladm.lazuydmin.ru -U Administrator
Password for [LADM\Administrator]:
Record added successfully
Для примера, чтобы добавить обратную запись для хоста test01 и адресом 10.0.0.111 команда будет выглядеть так:
sudo samba-tool dns add vmdc01.ladm.lazyadmin.ru 0.0.10.in-addr.arpa 111 PTR test01.ladm.lazyadmin.ru -U Administrator
Проверим работу samba
smbclient -L localhost -N
Anonymous login successful
Sharename Type Comment
--------- ---- -------
sysvol Disk
netlogon Disk
IPC$ IPC IPC Service (Samba 4.19.5-Ubuntu)
SMB1 disabled -- no workgroup available
smbclient //localhost/netlogon -UAdministrator -c 'ls'
Password for [LADM\Administrator]:
. D 0 Wed Aug 28 14:15:09 2024
.. D 0 Wed Aug 28 14:15:09 2024
host -t SRV _ldap._tcp.ladm.lazyadmin.ru
_ldap._tcp.ladm.lazyadmin.ru has SRV record 0 100 389 vmdc01.ladm.lazyadmin.ru.
host -t SRV _kerberos._udp.ladm.lazyadmin.ru
_kerberos._udp.ladm.lazyadmin.ru has SRV record 0 100 88 vmdc01.ladm.lazyadmin.ru.
host -t A vmdc01.ladm.lazyadmin.ru
vmdc01.ladm.lazyadmin.ru has address 10.0.0.254
Проверка Kerberos (необязательно)
kinit Administrator
Password for Administrator@LADM.LAZYADMIN.RU:
Warning: Your password will expire in 41 days on ...
klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: Administrator@LADM.LAZYADMIN.RU
Valid starting Expires Service principal
dd/mm/yy hh:mm:ss dd/mm/yy hh:mm:ss krbtgt/LADM.LAZYADMIN.RU@LADM.LAZYADMIN.RU
renew until dd/mm/yy hh:mm:ss
Настройка WinBindd
sudo nano /etc/samba/smb.conf
в секцию [Global] вносим строки
template shell = /bin/bash
template homedir = /home/%U
Смотрим где находится каталог с библиотеками
smbd -b | grep LIBDIR
LIBDIR: /usr/lib/x86_64-linux-gnu
Ищем libnss_winbind.so.2
sudo find / -name libnss_winbind.so.2
/usr/lib/x86_64-linux-gnu/libnss_winbind.so.2
Создаем ссылки на библиотеку
sudo ln -s /var/lib/samba/lib/libnss_winbind.so.2 /usr/lib/x86_64-linux-gnu
sudo ln -s /usr/lib/x86_64-linux-gnu/libnss_winbind.so.2 /lib/x86_64-linux-gnu/libnss_winbind.so
Создаем привязки и обновляем кэш
sudo ldconfig
Добавляем обслуживание winbindd к паролям и группам
sudo nano /etc/nsswitch.conf
passwd: files systemd winbind
group: files systemd winbind
Проверяем возможность подключения через Winbindd
wbinfo --ping-dc
checking the NETLOGON for domain[LADM] dc connection to "vmdc01.ladm.lazyadmin.ru" succeeded
getent passwd LADM\\Administrator
LADM\administrator:*:0:100::/home/LADM/administrator:/bin/false
getent group "LADM\\Domain Users"
LADM\domain users:x:100:
Для использования безопасных соединений с Samba, необходимо настроить протокол SSL/TLS
На этом установка и настройка Samba как первичного контролера домена завершена.
Следующий шаг это установка резервного контролера домена SAMBA AD-DC
Далее настройка репликации