Samba AD-DC: контроллер домена Active Directory на 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 — и ни рубля за лицензию:
- Централизованное управление учётными записями — один логин на все рабочие станции в домене
- Групповые политики (GPO) — управление настройками Windows-клиентов из единой точки
- Kerberos-аутентификация — пароль по сети не гуляет, всё через токены
- DNS-интеграция — SRV-записи домена регистрируются автоматически, руками ничего не прописывать
- Файловый сервер с ACL — разграничение доступа прямо на уровне объектов Active Directory
- Экономия — Windows Server 2022 Standard обойдётся от 100 000 руб., Samba — бесплатно
Требования к серверу
Железо нужно самое скромное. Для контроллера домена Samba AD-DC вполне хватит:
- CPU: 1-2 ядра (2.0+ ГГц)
- RAM: 2-4 ГБ — точнее зависит от того, сколько объектов осядет в AD
- Диск: 32+ ГБ; под базу LDAP берите SSD, на HDD заметно тормозит
- Сеть: статический IP — обязательно, без вариантов
- ОС: Debian 12 / Ubuntu 22.04 LTS
Подготовка сервера
Настройка имени хоста и сети
Имя сервера — не длиннее 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!'
Разберём ключевые параметры:
--use-rfc2307— добавляет POSIX-атрибуты (UID/GID), без них Linux-клиенты в домен не войдут нормально--realm— Kerberos-realm, только ЗАГЛАВНЫМИ--domain— NetBIOS-имя домена, до 15 символов--dns-backend=SAMBA_INTERNAL— встроенный DNS, настраивается проще всего--adminpass— пароль Administrator: минимум 8 символов, со сложностью
--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-клиентов в домен
Подготовка клиента
- DNS-сервером выставляете
192.168.1.10— IP вашего DC, не внешний резолвер - Проверьте разрешение имён:
nslookup company.lan— должен ответить DC - Проверьте время на клиенте: расхождение с DC больше 5 минут — и Kerberos откажет в аутентификации
Присоединение к домену
:: В PowerShell от имени администратора:
Add-Computer -DomainName "company.lan" -Credential COMPANY\Administrator -Restart
Или через GUI: Система → Свойства → Изменить → Домен → company.lan
Ввод 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
Резервный контроллер домена
Один 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-клиент не находит домен
- Проверьте DNS:
nslookup _ldap._tcp.company.lan— SRV-запись должна резолвиться - Убедитесь, что DNS-сервер клиента смотрит на DC (192.168.1.10), а не на роутер
- Проверьте файрвол: должны быть открыты порты 53, 88, 135, 139, 389, 445, 464, 636, 3268
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 в продакшене обязателен. Один контроллер — это не отказоустойчивость, это просто отложенная проблема.
Развернём контроллер домена и настроим всю инфраструктуру
Настройка серверов, домены, сети, безопасность и мониторинг — берём на себя всю инфраструктуру. Вы занимаетесь бизнесом, мы — вашими серверами.