Samba AD-DC: контроллер домена Active Directory на Linux

Linux / Active Directory Евгений Семёнов ~15 мин чтения
Samba AD-DC контроллер домена на Linux

Samba AD-DC — это полноценный контроллер домена Active Directory на базе Linux, который позволяет заменить Windows Server в роли DC. Он поддерживает аутентификацию Kerberos, групповые политики (GPO), DNS-интеграцию и управление пользователями через стандартные инструменты Microsoft — RSAT и Active Directory Users and Computers. В этой статье разберём полный цикл развёртывания: от подготовки сервера до ввода рабочих станций в домен.

Зачем нужен контроллер домена на Linux?

Организации малого и среднего бизнеса часто ищут альтернативу Windows Server из-за стоимости лицензий. Samba AD-DC позволяет получить практически полную функциональность Active Directory без затрат на лицензирование:

На практике: Samba AD-DC отлично работает в сетях до 300-500 пользователей. Для более крупных инфраструктур рекомендуется гибридная схема с Windows DC.

Требования к серверу

Для контроллера домена Samba AD-DC достаточно скромного оборудования:

Подготовка сервера

Настройка имени хоста и сети

Имя сервера должно быть коротким (до 15 символов, требование NetBIOS). Используем доменную зону .lan — она не конфликтует с mDNS в отличие от .local:

# Задаём имя хоста
sudo hostnamectl set-hostname dc1

# Редактируем /etc/hosts
sudo nano /etc/hosts

Содержимое /etc/hosts:

127.0.0.1       localhost
192.168.1.10    dc1.company.lan    dc1
Важно: Не используйте зону .local — она зарезервирована для mDNS (Avahi/Bonjour) и вызовет проблемы с разрешением имён в смешанных сетях Linux/Windows.

Настройка статического IP (Netplan)

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses: [192.168.1.10/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [127.0.0.1, 8.8.8.8]
      dhcp4: false
sudo netplan apply

Отключение systemd-resolved

Samba использует собственный DNS-сервер, поэтому systemd-resolved нужно отключить:

sudo systemctl disable --now systemd-resolved
sudo rm /etc/resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

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

Установка пакетов

sudo apt update && sudo apt upgrade -y

# Основные пакеты
sudo apt install -y samba smbclient winbind \
  krb5-user krb5-config libpam-krb5 \
  acl attr \
  libnss-winbind libpam-winbind \
  dnsutils net-tools

При установке krb5-user система спросит имя realm — укажите COMPANY.LAN (заглавными буквами).

Остановка служб перед provisioning

sudo systemctl stop smbd nmbd winbind
sudo systemctl disable smbd nmbd winbind

Очистка конфигурации

# Удаляем дефолтный smb.conf
sudo rm /etc/samba/smb.conf

# Удаляем существующие базы (если есть)
sudo rm -rf /var/lib/samba/*.tdb
sudo rm -rf /var/cache/samba/*
sudo rm -rf /var/lib/samba/private/*.tdb

Provisioning домена

Provisioning — ключевой этап. Samba создаст базу Active Directory, DNS-зону и сертификаты Kerberos:

sudo samba-tool domain provision \
  --use-rfc2307 \
  --realm=COMPANY.LAN \
  --domain=COMPANY \
  --server-role=dc \
  --dns-backend=SAMBA_INTERNAL \
  --adminpass='P@ssw0rd2026!'

Параметры:

Совет: Для продакшена рекомендуется --dns-backend=BIND9_DLZ — он надёжнее и поддерживает динамические обновления от DHCP. Однако настройка BIND9 сложнее.

Настройка Kerberos

Samba создаёт готовый krb5.conf — скопируем его:

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

Запуск Samba как DC

# Включаем службу samba-ad-dc
sudo systemctl unmask samba-ad-dc
sudo systemctl enable --now samba-ad-dc

# Проверяем статус
sudo systemctl status samba-ad-dc

Проверка работоспособности

Тест DNS

# SRV-записи Kerberos
host -t SRV _kerberos._tcp.company.lan
# Ожидаемый ответ: dc1.company.lan

# SRV-записи LDAP
host -t SRV _ldap._tcp.company.lan

# A-запись DC
host -t A dc1.company.lan

Тест Kerberos

# Получаем билет Kerberos
kinit Administrator@COMPANY.LAN

# Проверяем билет
klist

Тест SMB

smbclient -L localhost -N
# Должны увидеть: netlogon, sysvol, IPC$

Просмотр объектов AD

# Список пользователей
sudo samba-tool user list

# Информация о домене
sudo samba-tool domain info 127.0.0.1

Управление пользователями и группами

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

# Создать пользователя
sudo samba-tool user create ivanov.ii 'UserPass123!' \
  --given-name="Иван" \
  --surname="Иванов" \
  --mail-address="ivanov@company.lan" \
  --use-username-as-cn

# Создать пользователя без истечения пароля
sudo samba-tool user create service.account 'SvcPass456!' \
  --use-username-as-cn
sudo samba-tool user setexpiry service.account --noexpiry

Управление группами

# Создать группу
sudo samba-tool group add "IT Department"

# Добавить пользователя в группу
sudo samba-tool group addmembers "IT Department" ivanov.ii

# Список членов группы
sudo samba-tool group listmembers "IT Department"

Политика паролей

# Просмотр текущей политики
sudo samba-tool domain passwordsettings show

# Настройка: мин. длина 8, история 12, сложность вкл.
sudo samba-tool domain passwordsettings set \
  --min-pwd-length=8 \
  --history-length=12 \
  --complexity=on \
  --max-pwd-age=90

Настройка DNS и DHCP

Добавление DNS-записей

# Добавить A-запись
sudo samba-tool dns add dc1 company.lan fileserver A 192.168.1.20 -U Administrator

# Добавить PTR-запись (обратная зона)
sudo samba-tool dns zonecreate dc1 1.168.192.in-addr.arpa -U Administrator
sudo samba-tool dns add dc1 1.168.192.in-addr.arpa 20 PTR fileserver.company.lan -U Administrator

# Просмотр записей зоны
sudo samba-tool dns query dc1 company.lan @ ALL -U Administrator

Интеграция с DHCP (ISC DHCP)

sudo apt install -y isc-dhcp-server

Конфигурация /etc/dhcp/dhcpd.conf:

authoritative;
default-lease-time 600;
max-lease-time 7200;
option domain-name "company.lan";
option domain-name-servers 192.168.1.10;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.100 192.168.1.200;
  option routers 192.168.1.1;
  option broadcast-address 192.168.1.255;
}
sudo systemctl enable --now isc-dhcp-server

Ввод Windows-клиентов в домен

Подготовка клиента

  1. Укажите DNS-сервер: 192.168.1.10 (IP вашего DC)
  2. Проверьте разрешение: nslookup company.lan
  3. Проверьте время: разница с DC не более 5 минут (Kerberos-требование)

Присоединение к домену

:: В PowerShell от имени администратора:
Add-Computer -DomainName "company.lan" -Credential COMPANY\Administrator -Restart

Или через GUI: Система → Свойства → Изменить → Домен → company.lan

Совет: После ввода в домен установите RSAT (Remote Server Administration Tools) на одну из рабочих станций Windows для удобного управления AD через графический интерфейс.

Ввод Linux-клиентов в домен

# Установка необходимых пакетов
sudo apt install -y realmd sssd sssd-tools adcli packagekit

# Обнаружение домена
realm discover company.lan

# Присоединение
sudo realm join --user=Administrator company.lan

# Проверка
id ivanov.ii@company.lan

Настройка автоматического создания домашних каталогов:

sudo pam-auth-update --enable mkhomedir

Групповые политики (GPO)

Samba поддерживает базовые GPO. Управлять ими удобнее через RSAT с Windows-клиента, но базовые операции доступны из командной строки:

# Список GPO
sudo samba-tool gpo listall

# Создать GPO
sudo samba-tool gpo create "Password Policy" -U Administrator

# Привязать GPO к OU
sudo samba-tool gpo setlink "OU=Workstations,DC=company,DC=lan" \
  {GPO-GUID} -U Administrator
Ограничение: Samba поддерживает не все расширения GPO. Для сложных политик (установка ПО, скрипты входа, перенаправление папок) рекомендуется использовать RSAT Group Policy Editor с Windows-клиента.

Резервный контроллер домена

Для отказоустойчивости рекомендуется развернуть второй DC. На втором сервере (dc2, 192.168.1.11):

# Установка пакетов (как на первом DC)
sudo apt install -y samba smbclient winbind krb5-user

# Присоединение как дополнительный DC
sudo samba-tool domain join company.lan DC \
  -U Administrator \
  --dns-backend=SAMBA_INTERNAL \
  --option='idmap_ldb:use rfc2307 = yes'

Проверка репликации:

sudo samba-tool drs showrepl

Файловый сервер с интеграцией AD

Добавьте файловый ресурс в /etc/samba/smb.conf:

[shared]
  path = /srv/samba/shared
  read only = No
  vfs objects = acl_xattr
  map acl inherit = Yes
  store dos attributes = Yes
  inherit acls = Yes
  valid users = @"Domain Users"
# Создаём каталог и задаём права
sudo mkdir -p /srv/samba/shared
sudo chown root:"Domain Users" /srv/samba/shared
sudo chmod 2770 /srv/samba/shared

# Перезапускаем Samba
sudo samba-tool ntacl sysvolreset
sudo systemctl restart samba-ad-dc

Мониторинг и обслуживание

Проверка здоровья AD

# Полная проверка
sudo samba-tool dbcheck

# Проверка репликации (если есть второй DC)
sudo samba-tool drs showrepl

# Проверка DNS
sudo samba-tool dns query dc1 company.lan @ ALL -U Administrator

Бэкап контроллера домена

# Онлайн-бэкап
sudo samba-tool domain backup online \
  --targetdir=/backup/samba \
  --server=dc1.company.lan \
  -U Administrator

# Добавить в cron (ежедневно в 3:00)
echo "0 3 * * * root samba-tool domain backup online --targetdir=/backup/samba --server=dc1.company.lan -UAdministrator%'P@ssw0rd2026!'" | sudo tee /etc/cron.d/samba-backup

Решение типичных проблем

Ошибка «Clock skew too great»

Kerberos требует синхронизации времени (разница менее 5 минут). Установите NTP:

sudo apt install -y chrony
sudo systemctl enable --now chrony
chronyc tracking

Windows-клиент не находит домен

Samba не стартует после обновления

# Проверка конфигурации
sudo samba-tool testparm

# Проверка базы
sudo samba-tool dbcheck --fix
Может ли Samba AD-DC полностью заменить Windows Server?

Для малых и средних сетей (до 300-500 пользователей) — да. Samba поддерживает Kerberos, GPO, DNS, файловый сервер с ACL. Однако некоторые функции (DFS-R, расширенные GPO, Exchange-интеграция) доступны ограниченно.

Какую версию Samba нужно использовать?

Рекомендуется Samba 4.17+ (из репозитория Debian 12 или Ubuntu 22.04). Более ранние версии имеют ограничения в поддержке GPO и проблемы с совместимостью. Проверить версию: samba --version.

Можно ли использовать .local вместо .lan?

Не рекомендуется. Зона .local зарезервирована для mDNS (Avahi/Bonjour), что вызывает конфликты в смешанных Linux/Windows сетях. Используйте .lan, .corp или .internal.

Как перенести существующий домен Windows на Samba?

Прямая миграция не поддерживается. Рекомендуемый путь: развернуть Samba DC как дополнительный контроллер в существующем домене, дождаться репликации, затем вывести Windows DC из строя. Это требует тщательного планирования.

Сколько пользователей поддерживает Samba AD-DC?

Тестирование показывает стабильную работу до 5000 объектов AD. Для сетей с 500+ пользователями рекомендуется выделенный сервер с SSD и минимум 4 ГБ RAM. Резервный DC обязателен для продакшена.

IT-аутсорсинг

Развернём контроллер домена и настроим всю инфраструктуру

Настройка серверов, домены, сети, безопасность и мониторинг — берём на себя всю инфраструктуру. Вы занимаетесь бизнесом, мы — вашими серверами.

12+лет на рынке
150+довольных клиентов
24/7поддержка