Samba AD-DC: контроллер домена Active Directory на 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 без затрат на лицензирование:
- Централизованное управление учётными записями — единый логин для всех рабочих станций
- Групповые политики (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+ ГБ (SSD рекомендуется для базы LDAP)
- Сеть: статический 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 нужно отключить:
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
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 не более 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)
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
Резервный контроллер домена
Для отказоустойчивости рекомендуется развернуть второй 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 - Убедитесь, что 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 пользователей) — да. 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 обязателен для продакшена.
Развернём контроллер домена и настроим всю инфраструктуру
Настройка серверов, домены, сети, безопасность и мониторинг — берём на себя всю инфраструктуру. Вы занимаетесь бизнесом, мы — вашими серверами.