
Домен Windows может аутентифицировать пользователей Linux и предоставлять им доступ к файловому серверу Samba. Но успешный join не означает, что настроены Unix-идентификаторы, права на каталог и ограничения SMB. Эти этапы нужно проверять отдельно.
Инструкция рассчитана на новый файловый member server с Ubuntu Server 24.04 LTS и обновлёнными пакетами Samba из поддерживаемого репозитория. Пример: домен corp.example, Kerberos realm CORP.EXAMPLE, NetBIOS-имя CORP, сервер files01.corp.example, контроллер dc01.corp.example с DNS 10.20.0.10. Все имена и адреса замените своими. Сервер не становится контроллером домена.
Для рабочей станции с доменной аутентификацией без SMB-сервера возможна схема realmd/SSSD. Здесь выбран Winbind для файлового member server. Не включайте SSSD и Winbind одновременно как конкурирующие источники идентичностей без отдельного проекта. Выбор обсуждается в документации Ubuntu.
1. Что подготовить в Active Directory и на Linux
Согласуйте уникальное имя files01, OU, адрес, DNS, группу доступа Linux-File-Users и тестовую доменную учётную запись. Для join используйте аккаунт с делегированными правами на нужную OU; Domain Admin не должен становиться постоянным сервисным аккаунтом.
Сохраните действующие /etc/samba/smb.conf, /etc/nsswitch.conf, настройки DNS/времени и список пакетов. Для уже работающего сервера нужны копия данных, метаданных и подходящий способ восстановления состояния Samba. realm join меняет конфигурацию и машинную учётную запись — это не диагностическая команда.
Проверьте имя и версию:
hostnamectl
hostname -f
cat /etc/os-release
Если имя меняется, запланируйте обновление DNS и зависимых сервисов до join. Не переименовывайте обслуживающий пользователей сервер в рамках эксперимента.
2. Как проверить DNS и время
Linux должен использовать DNS, который разрешает AD-зону и её SRV-записи. Внешний 8.8.8.8 не заменяет доменный DNS. Не редактируйте управляемый /etc/resolv.conf как постоянное решение: настройте действующий Netplan/NetworkManager/системный резолвер.
После установки dnsutils и krb5-user, указанных в следующем шаге, выполните:
resolvectl status
dig +short dc01.corp.example A
dig +short _ldap._tcp.dc._msdcs.corp.example SRV
dig +short _kerberos._tcp.corp.example SRV
timedatectl status
SRV должны указывать доступные контроллеры; A-запись — их действительные адреса. Проверьте разрешение самого files01 с другой машины. Если используется chrony, дополнительно посмотрите chronyc tracking и chronyc sources -v. Настройте согласованный источник времени, не увеличивайте допуск Kerberos ради обхода ошибки.
Firewall между member server и AD должен пропускать нужные службы: DNS, Kerberos, LDAP, SMB и RPC по конкретной топологии. Проверка одного TCP 445 не доказывает готовность join. Не открывайте все порты всему интернету.

3. Как установить компоненты и обнаружить домен
На новом Ubuntu-сервере в согласованном окне:
sudo apt update
sudo apt install realmd packagekit samba winbind libnss-winbind \
samba-common-bin smbclient krb5-user dnsutils acl
realm discover corp.example
При настройке krb5-user используйте действительный realm. Обнаружение должно показать домен AD и доступные способы членства. Установка пакетов может запускать службы; проверьте сетевую доступность сервера до публикации ресурсов.
Не выполняйте общий upgrade всех пакетов как скрытый шаг join на production. Обновления системы требуют отдельного плана. Установленные версии, поддержка криптографии и совместимость с AD должны быть проверены в пилоте.
4. Как проверить Kerberos без передачи пароля в команду
kinit join_operator@CORP.EXAMPLE
klist
kinit запрашивает пароль интерактивно. Успех означает получение билета в данном контексте, но не доказывает право создавать computer account. Руководство MIT Kerberos описывает назначение команды.
Clock skew требует проверки часов; Client not found — principal/realm; ошибка preauthentication — проверки учётной записи, пароля и политики. Не включайте слабые типы шифрования Kerberos без проверки совместимости и политики безопасности. После диагностического теста kdestroy удалит билеты текущего кеша: не делайте это в сессии с другими зависимыми задачами.
5. Как выполнить join с Winbind и нужной OU
На новом сервере, после проверки резервной копии и прав:
sudo realm join --verbose --membership-software=samba \
--client-software=winbind --user=join_operator \
--computer-ou='OU=Linux,OU=Servers,DC=corp,DC=example' corp.example
realm list
sudo net ads testjoin
sudo testparm -s
OU должна существовать. Пароль не дописывайте в аргументы. Выбор Samba/Winbind соответствует инструкции Ubuntu для member server. Возможности установленного realm уточняйте через man realm и realm join --help.
В выводе ожидаются нужный realm, Winbind и успешное машинное членство. В AD проверьте объект files01 в выбранной OU. Если computer account уже существует, сначала установите его владельца и назначение. Дополнительные защиты повторного использования описаны в правилах domain join Microsoft; не удаляйте действующий объект и не отключайте политики ради обхода отказа.
6. Как проверить NSS и отображение SID в UID/GID
Проверьте строки passwd и group в /etc/nsswitch.conf. Для нового Winbind-сервера они должны сохранять необходимые локальные источники и содержать winbind. Пример:
passwd: files systemd winbind
group: files systemd winbind
Не заменяйте файл целиком: существующие источники могут обслуживать другие учётные записи. Затем:
getent passwd 'CORP\test.user'
getent group 'CORP\Linux-File-Users'
id 'CORP\test.user'
wbinfo -t
Результат должен показывать определённые числовые UID/GID и членство в группе. Не полагайтесь на wbinfo -u как обязательный полный перечень пользователей: enumeration может быть отключено.
В testparm проверьте выбранный idmap backend и непересекающиеся диапазоны. idmap_rid использует вычисляемое соответствие RID и Unix ID. Менять backend/range после записи файлов нельзя как косметическую правку: прежние числовые владельцы могут перестать соответствовать пользователям. Для нескольких серверов требуется согласованная модель идентификаторов.
7. Как создать отдельный ресурс и ограничить группу
После успешного разрешения доменной группы создайте новый пустой каталог. Перед этим проверьте, что /srv/samba/team ещё не содержит рабочих данных и не является ссылкой. Пример для одного ресурса:
sudo install -d -m 0755 /srv/samba
sudo install -d -m 2770 -o root -g 'CORP\Linux-File-Users' /srv/samba/team
В /etc/samba/smb.conf добавьте ресурс, сохранив сформированную конфигурацию [global]:
[team]
path = /srv/samba/team
browseable = yes
read only = no
guest ok = no
valid users = @"CORP\Linux-File-Users"
force group = "CORP\Linux-File-Users"
create mask = 0660
directory mask = 2770
Это простая модель совместной папки для одной группы, без проектирования Windows ACL и сложного наследования. mask задаёт ограничения создаваемых режимов, а не выдаёт любые права автоматически. Для детальных ACL нужен отдельный вариант с проверкой совместимости файловой системы и Samba.
Проверьте конфигурацию и примените её в согласованное время:
sudo testparm -s
sudo systemctl reload smbd
sudo systemctl status smbd winbind --no-pager
Если unit smbd не поддерживает reload в вашей поставке, используйте её документированный способ; restart может оборвать пользователей. SMB разрешайте только нужным клиентским подсетям. Не включайте SMB1 и guest-доступ для совместимости с неисправным клиентом.
8. Как проверить чтение, запись и отказ
С тестового Linux-клиента с smbclient:
smbclient //files01.corp.example/team -U 'CORP\test.user'
В интерактивном клиенте выполните ls; затем загрузите специально подготовленный несекретный файл командой put test.txt check-test.txt, получите его обратно в отдельное имя через get и удалите только созданный check-test.txt. Синтаксис — в smbclient.
На Windows откройте \\files01.corp.example\team и повторите операции под тестовым пользователем группы. Не проверяйте всё под Domain Admin. Другой пользователь без членства должен получить отказ. Одна удачная авторизация не подтверждает изоляцию.
Сравните владельца и режим нового файла, проверьте повторный вход и предусмотренный отзыв доступа. Изменения членства не обязательно немедленно меняют существующую сессию: планируйте её завершение и новый вход.
9. Почему работает join, но не открывается папка
Диагностируйте последовательно: DNS → Kerberos/машинное доверие → Winbind/NSS → Unix-права → ограничения ресурса → клиентская сессия.
sudo net ads testjoin
wbinfo -t
id 'CORP\test.user'
namei -l /srv/samba/team
getfacl -p /srv/samba/team
sudo journalctl -u smbd -u winbind --since '-15 min' --no-pager
Ошибка доверия требует проверки computer account, времени и машинного секрета. Не повторяйте join многократно и не меняйте пароль computer account вручную. Если id работает, а SMB получает отказ, проверьте valid users, membership, Unix-права и реальный аккаунт клиента.
PAM/SSH-доступ — отдельное разрешение. Если установлен libpam-winbind, проверьте, не разрешены ли доменные входы на консоль и SSH шире задуманного. Возможность доступа к Samba не должна автоматически становиться sudo или shell-доступом.
10. Как вывести сервер из домена и принять работу
До выхода прекратите использование ресурса согласованным способом и сохраните данные, числовых владельцев, ACL и конфигурацию. Для данного сервера:
sudo realm leave corp.example
realm list
Выход может нарушить разрешение доменных имён и доступ к файлам. Состояние объекта AD после leave зависит от параметров и полномочий; не считайте его гарантированно удалённым. Проверьте объект отдельно и согласуйте его дальнейшую судьбу. Возврат требует исходных настроек и восстановления корректного членства, а не простого копирования одного smb.conf.
Приёмка включает успешный join, разрешение UID/GID, доступ разрешённой группы, отказ постороннему, отсутствие лишних SSH/sudo-прав и документированный способ восстановления. Windows-компьютер вводится в AD другим процессом; инструкция Microsoft не заменяет Linux-конфигурацию. За помощью с AD и файловыми серверами обратитесь в АВАНГАРД ИТ.
