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

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

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

Зачем нужен контроллер домена на 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 придётся отключить — иначе они будут конфликтовать на 53-м порту:

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

После provisioning 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 — должен ответить DC
  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)

С GPO в Samba всё работает, но скажу честно — управлять ими удобнее из 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 пользователей — вполне реальная замена. 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 на Linux, Bonjour на Mac. В смешанных сетях это стабильный источник конфликтов, которые потом долго ищешь. Берите .lan, .corp или .internal — и проблема снимается сразу.

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

Прямой миграции нет — это нужно принять как данность. Мы обычно делаем так: поднимаем Samba DC вторым контроллером в уже работающем домене, ждём, пока реплицируются все данные, и только потом аккуратно выводим Windows DC. Звучит просто, но на практике этот процесс занимает несколько дней и требует очень внимательной подготовки — особенно если домен живёт уже лет пять и успел обрасти GPO и кастомными схемами.

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

По нагрузочным тестам — до 5000 объектов AD Samba держит вполне уверенно. Если у вас больше 500 пользователей, не пытайтесь сэкономить на железе: выделенный сервер, SSD и хотя бы 4 ГБ RAM — это минимум, не пожелание. И ещё один момент, который почему-то часто игнорируют на старте: резервный DC в продакшене обязателен. Один контроллер — это не отказоустойчивость, это просто отложенная проблема.

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

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

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

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