Samba. Разворачиваем Active directory домен-контроллер


Нет потребности в покупке Windows Server организациям малого и среднего бизнеса, когда на сегодняшний день есть возможность  развернуть Active Directory домен-контроллер на базе свободно ПО. Это безоплатно, и это экономия более $1200. Стоит попробовать. Пост для случая, когда в сети нет других AD DC и этот будет едиственный. Пост расчитан на администраторов имеющих опыт работы с windows и linux

ОС: Debian 12.7, Samba 4.17.12

Вступление

Перед началом работ нужно знать следующее:

  1. функциональный уровень леса и домена соответствует Windows Server 2008 R2, чего вполне достадочно для реализации большинства хотелок
  2. управление доменом возможно с клиентского windows через MMC-консоли. Для этого на клиенте (обычно это рабочее место администратора) необходимо установить add-on’s из пакета RSAT (входит в состав дистрибутива win10/11)
  3. ни Microsoft, ни Samba Team не рекомендуют из сервера AD DC делать файловый сервер. Но у нас малый бизнес и минимальный бюджет. В этом случае администратор обычно придерживается правила — «Так нельзя, но если очень хочется, то можно». И хорошо если администратору удастся получить бюджет на еще один Samba DC сервер, на котором он настроит репликацию и файлсервер
  4. есть политики домена, которые невозможно изменить через MMC-консоль, а только средствами Samba
  5. права на папки рекомендуется задавать из консоли MMC
  6. в Samba можно включить поддержку RecycleBin/Trash (сетевая корзина), что позволяет восстановить ошибочно удаленные документы с расшареной папки
  7. настройки DNS средствами MMC применяются сразу. Нет необходимости в редактировании Serial number SOA записи доменной зоны
  8. по умолчанию имя домен-контроллера не отображается в сетевом окружении 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
Сетап Active directory домен-контроллера

Варианты предлагаемые по-умолчанию корректны, соглашаемся на них. Пароль администратора должен быть комплексным, согласно шаблона [0-9a-zA-Z!@#$%^&*]{8,}. Позже внесем изменения в парольные политики и изменим пароль administrator’а

Сетап Active directory домен-контроллера

По окончании должен быть приблизительно такой ответ

Запускаем 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 из раздела Програмы → Дополнительные функции → Добавить необязательные функции

Active directory домен-контроллер. Rsat add-ons

Компоненты RSAT. Выбираем нужное

Последний add-on нет смысла ставить если в сети нет терминального сервера

В результате получили Server Manager с нужными MMC

Rsat add-ons в windows 10/11

Выбраные RSAT установлены и доступны из Server Manager’а

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 доступ к которому есть только у него

Сетевая корзина на контроллере домена

Пользователь user2 не может получить доступ к .trash пользователя user1

Нужно учитывать, что:

  • пустые папки удаляются навсегда
  • файловая структура удаленных папок с подпапками и файлами сохраняется
  • безвозвратное удаление комбинацией клавиш <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
WSD. Имя контроллера домена в сети

Контроллер домена виден в сетевом окружении с клиента 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. Есть причина запросить премиальные у руководства 😉

5 4 голоса
Ваша оценка поста?
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии