Нет потребности в покупке Windows Server организациям малого и среднего бизнеса, когда на сегодняшний день есть возможность развернуть Active Directory домен-контроллер на базе свободно ПО. Это безоплатно, и это экономия более $1200. Стоит попробовать. Пост для случая, когда в сети нет других AD DC и этот будет едиственный. Пост расчитан на администраторов имеющих опыт работы с windows и linux
ОС: Debian 12.7, Samba 4.17.12
Вступление
Перед началом работ нужно знать следующее:
- функциональный уровень леса и домена соответствует Windows Server 2008 R2, чего вполне достадочно для реализации большинства хотелок
- управление доменом возможно с клиентского windows через MMC-консоли. Для этого на клиенте (обычно это рабочее место администратора) необходимо установить add-on’s из пакета RSAT (входит в состав дистрибутива win10/11)
- ни Microsoft, ни Samba Team не рекомендуют из сервера AD DC делать файловый сервер. Но у нас малый бизнес и минимальный бюджет. В этом случае администратор обычно придерживается правила — «Так нельзя, но если очень хочется, то можно». И хорошо если администратору удастся получить бюджет на еще один Samba DC сервер, на котором он настроит репликацию и файлсервер
- есть политики домена, которые невозможно изменить через MMC-консоль, а только средствами Samba
- права на папки рекомендуется задавать из консоли MMC
- в Samba можно включить поддержку RecycleBin/Trash (сетевая корзина), что позволяет восстановить ошибочно удаленные документы с расшареной папки
- настройки DNS средствами MMC применяются сразу. Нет необходимости в редактировании Serial number SOA записи доменной зоны
- по умолчанию имя домен-контроллера не отображается в сетевом окружении windows, хотя при прямом подключении из адресой строки ресурсы доступны
Далее некоторые пункты будут рассмотрены подробнее
Подготовка
Устанавливаем последний Debian, задаем сетевые настройки:
- hostname: ad.testdomain.local
- ip: 192.168.10.1
Samba Team не рекомендует использовать домен .local по причине того, что с ним работает Avahi. Можно .int или другое. Если Avahi не планируется, то не вижу проблем, можно оставить .local
Внешний резолвинг настраиваем в /etc/resolv.conf. Это временно, потом поменяем
search testdomain.local nameserver 8.8.8.8
Устанавливаем ssh-сервер, делаем все, чтоб сервер мог ходить в интернет
В /etc/apt/sources.list добавляем репозиторий стабильного ПО для дальнейшей установки нужных пакетов
deb http://deb.debian.org/debian stable main non-free-firmware
Обновляем список пакетов и апдейтим установленные програмы
apt update
apt upgrade
Устанавливаем полезные утилитки (могут пригодиться)
apt install whois mc tcpdump tcptraceroute iptables
Отключаем поддержку IPv6 в sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
Перечитаем измененный sysctl.conf
sysctl -p
Если сервер multihomed
Для сервера у которого один интерфейс смотрит в сторону вышестояшего провайдера, а другой в локальную сеть с клиентскими компьютерами необходимо включить форвардинг, иначе клиенты не смогут выйти в интернет. Сервер становится роутером
В sysctl.conf добавляем
net.ipv4.ip_forward = 1
Не забываем про
sysctl -p
Обычно этого достадочно, но у нас консервативный Debian. В таком случае нужно еще правило iptables
iptables -t nat -A POSTROUTING -o ens224 -j MASQUERADE
где ens224 — интерфейс смотрящий в сторону провайдера (роутера)
Автозапуск iptables
Делаем дамп правил в файл, который скриптом будет считан при загрузке сервера
iptables-save > /etc/iptables.rules
В папке /etc/network/if-up.d создаем скрипт iptables и добавляем в него
#!/bin/sh iptables-restore < /etc/iptables.rules
Права на выполнение скрипту
chmod 755 iptables
Контрольний рибут. Если все работает как ожидается, переходим непосредственно к сетапу AD DC
Установка SAMBA
Накатываем сразу все, что нужно. В некоторых гайдах можно встретить еще и инстал bind9. Но в нашем случае DNS-сервер обеспечит сама Samba. Поэтому bind9 не нужен
apt install samba acl bind9-utils krb5-config krb5-user krb5-kdc ldb-tools libpam-krb5 libnss-winbind libpam-winbind smbclient winbind
Отключаем и убираем лишнее
systemctl stop winbind smbd nmbd krb5-kdc systemctl mask winbind smbd nmbd krb5-kdc rm /etc/samba/smb.conf
Привет домен!!!
Сетап и администрирование домена осуществляется при помощи универсальной тулзы samba-tool
samba-tool domain provision --use-rfc2307 --interactive

Варианты предлагаемые по-умолчанию корректны, соглашаемся на них. Пароль администратора должен быть комплексным, согласно шаблона [0-9a-zA-Z!@#$%^&*]{8,}. Позже внесем изменения в парольные политики и изменим пароль administrator’а
Запускаем Samba и проверим ее статус
systemctl start samba-ad-dc systemctl status samba-ad-dc
Содержимое smb.conf после сетапа, минимально-необходимое для работы домена
[global] dns forwarder = 8.8.8.8 netbios name = AD realm = TESTDOMAIN.LOCAL server role = active directory domain controller workgroup = TESTDOMAIN idmap_ldb:use rfc2307 = yes [sysvol] path = /var/lib/samba/sysvol read only = No [netlogon] path = /var/lib/samba/sysvol/testdomain.local/scripts read only = No
Дополнительно можно посмотреть на вывод wbinfo -u, wbinfo -g, wbinfo --ping-dc, чтоб удостовериться в том, что домен работает корректно
Samba должна работать только на внутреннем интерфейсе, смотрящим в локальную сеть. Добавим две строки в smb.conf
[global] ... interfaces = ens192 bind interfaces only = yes
Теперь на dns-запросы отвечает сама Samba. Поэтому /etc/resolv.conf переключаем на использование внутреннего dns
search testdomain.local nameserver 192.168.10.1
На этом этапе уже можно вводить клиентские windows в домен testdomain.local и логинится на них доменным администратором TESTDOMAIN\administrator
Посмотреть список введеных в домен компьютеров можно командой
samba-tool computer list
Подробнее о некоторых пунктах из вступления
1. Функциональный уровень леса и домена
samba-tool domain level show
Domain and forest function level for domain ‘DC=testdomain,DC=local’
Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
2. Компоненты администрирования RSAT
Нет нужды работать с командной строкой контроллера домена если тоже самое можно сделать быстрее при помощи MMC-консоли. Для этого на клиенте с win10/11 инсталируем компонеты RSAT из раздела Програмы → Дополнительные функции → Добавить необязательные функции
Последний add-on нет смысла ставить если в сети нет терминального сервера
В результате получили Server Manager с нужными MMC
4. Пользователи и пароли
Парольные политики пользователя применяются непосредственно на домен-контроллере. Изменение их аналогов через MMC-консоль windows игнорируется
samba-tool domain passwordsettings set --complexity=off samba-tool domain passwordsettings set --history-length=0 samba-tool domain passwordsettings set --min-pwd-length=4 samba-tool domain passwordsettings set --min-pwd-age=0 samba-tool domain passwordsettings set --max-pwd-age=0
Применим новые политики
samba-gpupdate --force -U administrator
В команде можно не упоминать -U administrator, но тогда нужно настроить мапинг доменных пользователей в систему через nsswitch. Об этом позже
Меняем пароль администратора на более запоминаемый
samba-tool user setpassword administrator --newpassword=cool_PWD
Пользователей и группы удобнее заводить через MMC консоль, но можно и через командную строку DC
Для примера, создадим новую группу dept1 и пользователя user2 с паролем qqqq, а ранее созданного пользователя user1 сделаем членом группы dept1
samba-tool group add dept1 samba-tool user add user2 qqqq samba-tool group addmembers dept1 user1
Это только частный пример. На самом деле возможности samba-tool огромны. Тулза прекрасно документирована. После каждого параметра можно добавлять ключ -h для получения справки. Например:
samba-tool -h samba-tool domain -h samba-tool domain info -h
6. Сетевая корзина
На сервере планируется несколько расшареных папок. Для каждой из них будет свой .trash — папка, куда будут перемещаться удаленные документы. Для востановления нужно зайти в .trash, сделать cut и paste в нужную папку. Соблюдается версионность если имена удаленных файлов из конкретной папки одинаковые
Реализация в нескольких строках smb.conf
[global] ... recycle:touch = yes recycle:versions = yes recycle:keeptree = yes [testfolder] ... path = /home/testfolder/ recycle:repository = .trash/%U
С таким конфигом каждый пользователь удаляет документы в свой .trash доступ к которому есть только у него
Нужно учитывать, что:
- пустые папки удаляются навсегда
- файловая структура удаленных папок с подпапками и файлами сохраняется
- безвозвратное удаление комбинацией клавиш
<SHIFT>+<DEL>, к которой так привыкли в windows все равно перемещает содержимое в.trash - у каждого пользователя доступ только в свой
.trash, уadministrator'адоступ ко всем
8. Имя контроллера домена в сетевом окружении
С недавних пор Microsoft отказались от протокола SMB1 ввиду его дырявости, что привело к исчезновению имени DC из сетевого окружения. Однако если на сервере включить поддержку WSD (Web Services for Devices), то с клиента windows имя сервера в сетевом окружении и все его ресурсы появятся вновь
Если это нужно, то устанавливаем
apt install wsdd
В конфигурационном файле /etc/default/wsdd всего одна строка, которую приводим к виду
WSDD_PARAMS="--interface ens192 --ipv4only"
где ens192 — интерфейс смотрящий в локальную сеть
Для успешного отображения объектов, на DC должны быть открыты порты 3702 (udp) и 5357 (tcp)
Запускаем, проверяем статус, если все ОК, то в автостарт
systemctl start wsdd
systemctl status wsdd
systemctl enable wsdd

Контроллер домена виден в сетевом окружении с клиента windows. Отображается список доступных ресурсов
Пользователи и группы домена в системе
Не просто так мы установили libnss-winbind. Именно эта библиотека отвечает за работу с доменными пользователями и группами как с нативными в консоли Linux
Приводим /etc/nsswitch.conf к следующему виду добавив туда winbind
passwd: files winbind systemd group: files winbind systemd ...
Смотрим, что знает система про пользователя TESTDOMAIN\user1
id user1
uid=3000020(TESTDOMAIN\user1) gid=100(users)
groups=100(users),3000020(TESTDOMAIN\user1),3000028(TESTDOMAIN\dept1),3000009(BUILTIN\users)
Теперь система знает о доменных пользователях и группах. Все файлы создаваемые пользователем user1 в [testfolder] будут с правами TESTDOMAIN\user1
Итог
Получили рабочий active directory домен-контроллер, чем сэкономили предприятию более $1200. Есть причина запросить премиальные у руководства 😉

Системный администратор с 2000 года
Участник Freelancehunt, Хабр Q&A
Кейсы



