Установка SAMBA AD-DC

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

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

Создаем зону для обратных записей

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

Установка DHCP сервера

Настройка 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

Далее настройка репликации