Samba
Введение и терминология
В этой статье описано создание домена — централизированного хранилища пользователей и их аттрибутов.
Контроллер домена — программное оебспечение, обеспечивающее создание и функционирование сервера домена. В данном случае в качестве контроллера домена используется samba.
AD — Active Directory — домен разработки Microsoft. Samba реализует Samba AD — совместимый с Microsoft Active Directory домен, в который можно вводить и Linux, и Windows-клиенты.
Клиент — конечный член домена или ПО, позволяющее обспечить членство в домене.
В статье описывается создание лабораторной установки, состоящей из 1 сервера и 1 клиента, находящихся в одной подсети 192.168.122.0/24.
Все приведенные консольные команды выполняются от root, если не указано иное. Вход в root-коноль выполняется командой
su -
или
sudo -i
В качестве образа ОС для развертывания контроллера домена Samba AD можно взять:
- для виртуальных машин и железа: мини-сервер rosa13 (https://abf.io/platforms/rosa13/products/540)
- для контейнеров (systemd-nspawn, lxc и др.): rootfs rosa13 (https://abf.io/platforms/rosa13/products/408)
По адресу https://abf.io/platforms/rosa13/products имеются иные сборки, в т.ч. для ARMv8 (aarch64).
Настройка контроллера домена
Настройка сети
Важно правильно настроить сеть на клиенте и сервере. В простых случаях, в т.ч. при поднятии тестовых стендов, делайте так, чтобы клиент и сервер находились в одной подсети. Например, чтобы у виртуальной машины с сервером был IP-адрес 192.168.10.2, а у виртуальной машины с клиентом — 192.168.10.3.
Рассмотрим настройку сети на сервере.
Установите полноквалифицированное (FQDN) доменное имя, состоящее из: имя_хоста.домен.зона, например:
server1.samba.loc
Тогда именем хоста будет server1, доменом — samba, доменной зоной — loc, realm — samba.loc.
Избегайте использования зоны .local или выключите или перенастройте Avahi, чтобы использовать ее.
Установим имя хоста на контроллере домена:
hostnamectl set-hostname server1.samba.loc
Посмотрите IP-адрес командой
ip a
Пример вывода:
[root@server1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: host0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 32:e2:0b:ba:17:c5 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 169.254.212.10/16 brd 169.254.255.255 scope link host0
valid_lft forever preferred_lft forever
inet 192.168.122.12/24 brd 192.168.122.255 scope global dynamic host0
valid_lft 2577sec preferred_lft 2577sec
inet6 fe80::30e2:bff:feba:17c5/64 scope link
valid_lft forever preferred_lft forever
В данном примере IPv4-адрес — 192.168.122.12.
В файл /etc/hosts необходимо добавить строку вида:
192.168.122.12 server1.samba.loc server1
Как видите, необходимо, чтобы и FQDN, и краткое имя резолвились в IP-адрес контроллера домена. Для этого откройте файл к консольном редакторе:
nano /etc/hosts
добавьте указанную строку, сохраните сочетанием клавиш Ctrl+O, Enter, затем закройте консольный редактор сочетанием клавиш Ctrl+X.
Командами
ping -c3 server1.samba.loc ping -c3 server1
проверьте корректность записей в /etc/hosts.
Обратите внимание, что сеть должна запускаться до входа пользователя в систему, если используется WiFi, то настройте его соответствующим образом.
Запуск контроллера домена
Установите необходимые для работы пакеты:
dnf install samba-dc /usr/bin/xargs /usr/bin/nslookup
В ROSA 12 контроллер домена входит в пакет samba-server, отдельного пакета samba-dc нет — поэтому команда будет выглядеть так:
dnf install samba-server /usr/bin/xargs /usr/bin/nslookup
Пакет samba-dc — контроллер домена Samba AD на системном MIT Kerberos; этот вариант поддерживает доверие с FreeIPA. Если нужны RODC (контроллер домена только для чтения) или журналирование аутентификаций — используйте вариант со встроенным Heimdal Kerberos, пакет samba-dc-heimdal. Оба варианта контроллера домена взаимно исключают друг друга. Если один из них уже установлен, заменить его на другой можно командой dnf swap. Для перехода на Heimdal-вариант:
dnf swap --allowerasing samba-dc samba-dc-heimdal
а для возврата на MIT-вариант:
dnf swap --allowerasing samba-dc-heimdal samba-dc
По умолчанию контроллер домена использует собственный встроенный DNS-сервер (SAMBA_INTERNAL). Если вместо него вы планируете использовать BIND, установите его следующей командой:
dnf install bind
По умолчанию BIND настроен на прослушивание только на интерфейсе loopback (127.0.0.1)
Для настройки прослушивания на всех интерфейсах выполните следующую команду:
sed -i '/listen-on\|allow-query/ s|{.\+}|{ any; }|' /etc/named.conf
Также для BIND требуется включить использование модуля DLZ:
echo 'include "/var/lib/samba/bind-dns/named.conf";' >> /etc/named.conf
Отключите лишние службы из состава набора программ samba:
systemctl mask --now smb nmb winbind
Их обособленная работа не требуется и будет мешать контроллеру домена.
Убедитесь, что они действительно выключены, команда
ps ax | grep -E "samba|smbd|nmbd|winbind" | grep -v grep
должна ничего не выдать.
Сотрите старые файлы настроек, оставив их резервные копии:
mv -v /etc/samba/smb.conf /etc/samba/smb.conf.old mv -v /etc/krb5.conf /etc/krb5.conf.old
Очистите старые базы данных, путь к которым можно узнать командой
smbd -b | grep -E "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
Команда для очистки:
smbd -b | grep -E "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR" | awk '{print $NF}' | xargs -I'{}' rm -fv '{}'/*.{tdb,ldb}
Если эта команда ничего не выдала, то это нормально: у вас не было баз данных от прошлых запусков контроллера домена.
По умолчанию systemd-resolved занимает порт 53, чем будет мешать DNS-серверу контроллера домена. Отключим это:
mkdir -p /etc/systemd/resolved.conf.d echo -e '[Resolve]\nDNSStubListener=no' > /etc/systemd/resolved.conf.d/no53port.conf systemctl try-restart systemd-resolved
Запустите интерактивную настройку домена:
samba-tool domain provision --use-rfc2307 --interactive
Ниже приведем ее типовой вывод. В квадратных вкобках ([]) указывается значение по умолчанию, нажимайте Enter, чтобы с ним согласиться, или введите иное значение. Если сеть и имя хоста были настроены верны, то значения по умолчанию не должно потребоваться изменить.
Для использования BIND в качестве DNS-сервера выбирайте BIND9_DLZ. Вариант BIND9_FLATFILE устарел и будет удален в будущих версиях samba.
[root@server1 ~]# samba-tool domain provision --use-rfc2307 --interactive Realm [SAMBA.LOC]: Domain [SAMBA]: Server Role (dc, member, standalone) [dc]: DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: DNS forwarder IP address (write 'none' to disable forwarding) [192.168.122.1]: Administrator password: Retype password:
На последнем шаге вводится пароль доменного пользователя Administrator, при вводе пароль не отображается, пароль должен быть сложным. DNS Forwarder — это адрес сервера, к которому перенаправляются DNS-запросу, на которые сам контроллер домена не может ответить, например, запрос DNS yandex.ru будет направлен в него.
Сделайте
mv -v /var/lib/samba/private/krb5.conf /etc/krb5.conf
Если вы выбрали DNS сервер BIND, добавьте службу named в автозагрузку и запустите ее:
systemctl enable --now named
Проверьте всё ли в порядке:
systemctl status named
Теперь добавьте службу контроллера домена в автозапуск:
systemctl enable samba
Запустите контроллер домена:
systemctl restart samba
И посмотрите его лог, убедитесь, что он запустился без ошибок:
systemctl status samba
Статус службы должен быть "active" ("запущена"), но в конце лога может быть "ошибка":
dnsupdate_nameupdate_done: Failed DNS update with exit code 29
Это нормально. Убедимся в этом, запустив:
samba_dnsupdate --verbose
В подробном логе будет сказано про ошибки "WERR_DNS_ERROR_RECORD_ALREADY_EXISTS", которые означают, что добавляемая запись DNS уже существует. Она была создана при создании домена. Запись "Failed update of 29 entries" означает, что такая ситуация возникла 29 раз, а это количество раз и стало кодом возврата samba_dnsupdate.
Проверьте работу DNS-сервера, на другом компьютере, например, будущем клиенте домена, выполнив:
nslookup server1.samba.loc 192.168.122.12
(подставьте свои адреса). Пример успешного ответа:
$ nslookup server1.samba.loc 192.168.122.12 Server: 192.168.122.12 Address: 192.168.122.12#53 Name: server1.samba.loc Address: 192.168.122.12
Для настройки клиентов будет полезно знать рабочую группу NT, ее можно узнать так:
[root@server1 ~]# cat /etc/samba/smb.conf | grep workgroup
workgroup = SAMBA Убедитесь, что этот сервер способен выдать DNS требуемого домена, выполнив на будущем клиенте домена (не на контроллере):
nslookup yandex.ru 192.168.122.1
Возможно, стоит указать 8.8.8.8 или иной сервер. После первоначальной настройки контроллера его можно заменить в файле
/etc/samba/smb.conf
перезапустив контроллер после изменения настроек командой
systemctl restart samba
Добавление доменного пользователя
Пример создания учетной записи на контроллере домена:
samba-tool user create IvanonVP
Ввод ROSA-клиента в домен
Настройка сети на Linux-клиенте
На клиенте необходимо:
- добавить адрес контроллера домена в DNS-серверы
- добавить REALM (samba.loc в примере выше) в список доменов поиска
Для настройки через GUI NetworkManager откройте настройки сетевого соединения, вкладку "IPv4". В поле "Метод" выберите "Автоматически (только адреса)": адрес клиент получит по DHCP, а DNS-сервером будет только контроллер домена. К DNS-серверам добавьте адрес контролера домена, в примере выше это 192.168.122.12. В "Домены поиска" добавьте realm — samba.loc. Ниже приведен скриншот с образцом заполнения настроек.
Чтобы изменения вступили в силу, переподключите соединение.
В rosa2019.05, rosa2021.1 и новее имеется интерактивный консольный интерфейс nmtui для редактирования настроек NetworkManager. Также имеется утилита nmcli.
Для настройки через консоль узнайте имя соединения:
nmcli connection show
и задайте DNS-сервер и домен поиска, подставив свое имя соединения:
nmcli connection modify "<имя-соединения>" ipv4.ignore-auto-dns yes ipv4.dns 192.168.122.12 ipv4.dns-search samba.loc nmcli connection up "<имя-соединения>"
Параметр ipv4.ignore-auto-dns запрещает использовать DNS-серверы, полученные от DHCP, поэтому доменные имена будет резолвить контроллер домена.
Утилиты NetworkManager редактируют файл /etc/resolv.conf. Если у вас не используется NetworkManager, то можно отредактировать этот файл напрямую, написав в нем:
nameserver 192.168.122.12 search samba.loc
Командой
ping server1
проверьте сетевую доступность контроллера домена.
Подключение компьютера с ОС ROSA к домену через графическую программу
Для ввода компьютера в домен используется графическая утилита DAuth; она предустановлена в основном издании ROSA с рабочей средой Plasma. Если на вашей системе программа не установлена, установите ее командой:
dnf install dauth
Запустите DAuth из меню системы (раздел «Система» или «Настройки») или из консоли:
dauth
Выберите тип домена «Active Directory». DAuth автоматически обнаруживает доступные домены через DNS и подставляет найденное имя в поле «Имя домена» — в рассматриваемой лабораторной установке это samba.loc. Если домен не обнаружился, проверьте настройки DNS из раздела выше — DNS-сервером должен быть указан контроллер домена, а samba.loc должен быть в списке доменов поиска.
Заполните поля:
- «Имя компьютера» — NetBIOS-имя, под которым компьютер будет зарегистрирован в домене; заполняется автоматически на основе текущего имени хоста
- «Имя администратора домена» — например, Administrator
- «Пароль администратора домена»
При необходимости раскройте дополнительные настройки: в них выбирается сервис аутентификации — SSSD (по умолчанию) или Winbind, а также можно указать конкретный контроллер домена и подразделение (OU), в котором будет создана учетная запись компьютера.
Ниже приведен скриншот с образцом заполнения.
Нажмите «Ввести в домен». DAuth проверит наличие необходимых пакетов (realmd, adcli и др.) и предложит установить недостающие.
В случае успешного ввода в домен появится соответствующее уведомление, и утилита перейдет в режим вывода из домена. Из него можно запустить программу DMount для настройки подключения сетевых папок домена.
Подключение компьютера с ОС ROSA к домену через консоль
Консольный ввод в домен выполняется утилитой realm. Выберите службу аутентификации и установите соответствующий метапакет, для SSSD:
dnf install task-realmd-ad-sssd
для winbind:
dnf install task-realmd-ad-winbind
Убедитесь, что домен обнаруживается:
realm discover samba.loc
Введите компьютер в домен:
realm join -U Administrator samba.loc
и введите пароль администратора домена. Проверьте результат:
realm list
домен samba.loc должен отображаться как configured: kerberos-member. Вывести компьютер из домена можно командой
realm leave samba.loc
она удаляет только локальную настройку. Чтобы заодно удалить учетную запись компьютера из домена, добавьте --remove и укажите администратора:
realm leave --remove -U Administrator samba.loc
Настроить автоматическое монтирование доменных папок можно и из консоли той же утилитой dmount. На системе без графики устанавливается пакет dmount-core:
dnf install dmount-core
Полный список подкоманд и опций смотрите в справке:
dmount --help