Перейти к содержанию
Обсудить задачу →
Статьи и инструкции

Как ввести Linux-сервер в домен Windows: Ubuntu, Samba и Winbind

Вводим Linux-сервер в Active Directory: Ubuntu, DNS, Kerberos, realmd и Winbind. Проверяем UID/GID, общую папку Samba, права группы и отказ постороннему.
Концептуальная иллюстрация: Как ввести Linux-сервер в домен Windows: Ubuntu, Samba и Winbind

Домен 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. Не открывайте все порты всему интернету.

Этапы ввода Linux в домен: DNS и время, обнаружение AD, join, идентификаторы и проверка доступа к SMB
Порядок проверки и настройки. Команды, ограничения и диагностика приведены в статье.

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 и файловыми серверами обратитесь в АВАНГАРД ИТ.