← Документация Hope·HopeDChopedc.ru
HopeDC · Документация

Ввод Linux‑клиентов в домен

Пошаговое подключение Linux‑хостов к домену HopeDC: вход по доменным учётным записям, Kerberos, SSSD
Документ 10 · Версия 1.1
Аудитория: администраторы Linux и домена
Заменяет JOIN_LINUX.md и LINUX_INTEGRATION.md (v85)

Содержание

  1. 1. Что важно знать заранее
  2. 2. Подготовка в панели HopeDC
  3. 3. Ввод скриптом join-hopedc.sh (рекомендуется)
  4. 4. Ввод вручную
  5. 5. Проверка
  6. 6. Вывод из домена и повторный ввод
  7. 7. Что делает HopeDC при вводе
  8. 8. Диагностика
  9. 9. Домен‑зеркало с принятой ролью KDC и ограничения

1. Что важно знать заранее

В какие домены можно вводить Linux

Linux вводится в домен, для которого HopeDC является KDC (выдаёт билеты Kerberos). На странице «Домены» это видно в колонке «Linux»:

БейджЧто означаетКуда вводить Linux
«Поддерживается»Собственный домен HopeDC (создан в HopeDC или отключён от AD).В HopeDC — по этой инструкции.
«Поддерживается (KDC принят)»Домен‑зеркало MS AD, для которого выполнено «Принять роль KDC».В HopeDC — скриптом join-hopedc.sh (ввод идёт явно через HopeDC), см. раздел 9.
«через реальный DC»Домен‑зеркало MS AD: билеты выдают контроллеры Windows.В настоящий контроллер MS AD (штатными средствами AD), не в HopeDC.

Что нужно клиенту

ПортНазначение
53 TCP/UDPDNS (если DNS — HopeDC)
88 TCP/UDPKerberos
389 TCP/UDPLDAP и CLDAP (realm discover, поиск контроллера SSSD)
636 TCPLDAPS (SSSD и агент политик)
464 TCP/UDPkpasswd — установка пароля компьютера при вводе и смена паролей. Без него ввод не завершится.
3268/3269 TCPГлобальный каталог
445 TCPSMB (SYSVOL)
123 UDPNTP (время для chrony)

Дальше в примерах домен — corp.local (realm CORP.LOCAL), IP HopeDC — 10.0.0.5. Подставьте свои.

2. Подготовка в панели HopeDC

2.1. UNIX‑атрибуты пользователей и групп (обязательно)

Выдаваемый HopeDC sssd.conf берёт UID/GID из атрибутов каталога (ldap_id_mapping = false). Пользователь без uidNumber/gidNumber на Linux не появится.

  1. Домен → «Управлять» → «Структура домена» → пользователь → вкладка «UNIX Attributes» → «Назначить UID/GID автоматически» → сохранить. Заполняются uidNumber, gidNumber, loginShell (/bin/bash), unixHomeDirectory (/home/<логин>), gecos. Номера выдаются начиная с 10000, уникально по всему серверу.
  2. Для групп, которые нужны на Linux (например, для sudo), — группа → вкладка «UNIX Attributes» → «Назначить GID автоматически». Состав группы берётся из атрибута member.
  3. Основная группа пользователя (gidNumber) должна существовать как группа с тем же gidNumber — или будет показана числом.

2.2. Ключи AES у учётных записей

Современные дистрибутивы отключают RC4, поэтому нужны ключи AES. У учётных записей, созданных в HopeDC, они есть. У учётных записей, перенесённых из AD или созданных до поддержки AES, их может не быть: если kinit отвечает «KDC has no support for encryption type», один раз смените пароль учётной записи в панели.

2.3. Сервисная учётная запись агента (рекомендуется)

Скрипт ввода сразу ставит агент политик Linux (Документ 11). Чтобы агент не использовал пароль администратора:

  1. Домен → «Политики Linux» → вкладка «Агент» → «Создать сервисную учётку». Создаётся svc-hopedc-agent без административных прав; пароль показывается один раз — сохраните его.
  2. Для входа агента без пароля — «Аутентификация агента» → «Сертификат (mTLS)» → «Выдать сертификат агента». Нужен корневой ЦС домена: «Центр сертификации» в меню домена.

3. Ввод скриптом join-hopedc.sh (рекомендуется)

3.1. Получить скрипт

Домен → «Политики Linux» → «Агент»: укажите «IP контроллера HopeDC», способ аутентификации агента (и пароль bind‑учётки, если сервисная учётка не создана в этом сеансе) и нажмите join-hopedc.sh. Скрипт формируется под выбранный домен.

Скрипт содержит пароль сервисной учётки или закрытый ключ сертификата агента. Передавайте его на клиент защищённым способом и удалите после ввода.

3.2. Запустить на клиенте

sudo bash join-hopedc.sh
# другой администратор домена для ввода:
sudo JOIN_USER=admin2 bash join-hopedc.sh

Скрипт выполняет семь шагов:

ШагЧто делает
1/7 Проверка DNSПроверяет, что имя домена разрешается; если нет — останавливается с подсказкой указать DNS‑сервером HopeDC.
2/7 Пакетыapt: realmd sssd sssd-tools adcli krb5-user oddjob oddjob-mkhomedir python3-ldap3 chrony (без вопросов debconf); dnf: аналогичный набор с krb5-workstation.
3/7 ВремяНастраивает chrony на HopeDC (server <IP> iburst, makestep) и выравнивает часы — до ввода в домен.
4/7 КонфигурацияПишет /etc/krb5.conf и /etc/sssd/sssd.conf (раздел 4.2).
5/7 Ввод в доменrealm join (при неудаче — adcli join) от имени JOIN_USER; запрашивает пароль.
6/7 АгентСтавит /usr/local/bin/hopedc-agent.py (и сертификат в /etc/hopedc/ в режиме mTLS).
7/7 Таймерhopedc-agent.timer: через 2 мин после загрузки и каждые 10 минут; включает автосоздание домашних каталогов.

После скрипта проверьте вход (раздел 5).

4. Ввод вручную

4.1. Пакеты

# Debian / Ubuntu / Astra Linux
sudo DEBIAN_FRONTEND=noninteractive apt install -y realmd sssd sssd-tools adcli krb5-user oddjob oddjob-mkhomedir chrony
# RHEL / Alma / Rocky / Fedora
sudo dnf install -y realmd sssd adcli krb5-workstation oddjob oddjob-mkhomedir chrony

4.2. Конфигурация

/etc/krb5.conf:

[libdefaults]
    default_realm = CORP.LOCAL
    dns_lookup_kdc = true
    rdns = false
    default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 arcfour-hmac
    default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 arcfour-hmac
[realms]
    CORP.LOCAL = {
        kdc = 10.0.0.5
        admin_server = 10.0.0.5
    }
[domain_realm]
    .corp.local = CORP.LOCAL
    corp.local = CORP.LOCAL

/etc/sssd/sssd.conf (права 600):

[sssd]
    domains = corp.local
    config_file_version = 2
    services = nss, pam, sudo
[domain/corp.local]
    id_provider = ad
    auth_provider = ad
    access_provider = ad
    ad_gpo_access_control = permissive
    sudo_provider = ad
    ldap_sudo_search_base = DC=corp,DC=local
    ad_domain = corp.local
    krb5_realm = CORP.LOCAL
    ad_server = 10.0.0.5
    ldap_id_mapping = false
    fallback_homedir = /home/%u
    default_shell = /bin/bash
    use_fully_qualified_names = false
    cache_credentials = true
    ldap_uri = ldaps://10.0.0.5:636
    ldap_tls_reqcert = allow

4.3. Время

echo -e "server 10.0.0.5 iburst\nmakestep 1.0 3" | sudo tee /etc/chrony/conf.d/hopedc.conf   # RHEL: /etc/chrony.d/
sudo systemctl restart chrony || sudo systemctl restart chronyd
chronyc tracking

4.4. Проверка Kerberos и обнаружения

dig -t SRV _ldap._tcp.corp.local
realm discover corp.local          # type: kerberos, server-software: active-directory
kinit administrator@CORP.LOCAL
klist -e                           # etype aes256-cts-hmac-sha1-96

4.5. Ввод

sudo realm join corp.local -U administrator
# или напрямую adcli (подробный вывод, контроллер по ИМЕНИ, не по IP):
sudo adcli join corp.local -U administrator --domain-controller=hopedc.corp.local -v
# в другое подразделение:
sudo adcli join corp.local -U administrator --computer-ou="OU=Linux,DC=corp,DC=local"

Успешный adcli join -v заканчивается строками Set computer password и Added the entries to the keytab. realm join дополнительно настраивает NSS/PAM; после голого adcli join включите их сами:

sudo pam-auth-update --enable mkhomedir                                  # Debian/Ubuntu
sudo authselect select sssd with-mkhomedir --force && sudo systemctl enable --now oddjobd   # RHEL
sudo systemctl restart sssd
Если realm join переписал sssd.conf, верните в него строки ldap_id_mapping = false, ad_gpo_access_control = permissive и sudo_provider из раздела 4.2 и перезапустите sssd.

5. Проверка

realm list                         # домен, configured: kerberos-member
sudo klist -k                      # ключи host/… и HOST$ в /etc/krb5.keytab
id ivanov                          # uid/gid из UNIX‑атрибутов, группы домена
getent passwd ivanov
su - ivanov                        # или ssh ivanov@<хост>
sudo -l -U ivanov                  # sudo‑правила (Документ 11)

В панели: домен → «Структура домена» → Computers — объект компьютера с objectSid, primaryGroupID = 515 (Domain Computers), SPN host/, RestrictedKrbHost/ и cifs/.

6. Вывод из домена и повторный ввод

sudo realm leave corp.local -U administrator        # или: sudo adcli delete-computer -U administrator
sudo rm -f /etc/krb5.keytab && sudo sss_cache -E

Если машина недоступна — удалите объект компьютера в «Структуре домена». Перед повторным вводом машины с тем же именем удалите её старый объект компьютера.

7. Что делает HopeDC при вводе

Шаг клиентаОтвет HopeDC
Поиск контроллера (DNS SRV, CLDAP :389)Записи DC‑locator создаются при старте; CLDAP отвечает именем домена, контроллера (hopedc.<домен>) и SID домена.
Вход администратора по Kerberos, LDAP‑bindБилеты AES (RC4 — запасной); служебная учётка hopedc-ldap-svc со SPN ldap/, GC/, cifs/, HOST/ контроллера.
Поиск контейнера компьютеровwellKnownObjects корня домена → CN=Computers.
Создание объекта компьютераТолько администраторами домена; objectSid из пула RID домена, primaryGroupID = 515, к каждому host/X автоматически добавляется cifs/X.
Установка пароля компьютера (kpasswd :464)Принципал kadmin/changepw; HopeDC вычисляет NT‑хэш и ключи AES.
KeytabЗаписывает сам клиент (adcli/realm) в /etc/krb5.keytab.
Изменения самим компьютеромКомпьютер может менять у своего объекта только dNSHostName, SPN, msDS-SupportedEncryptionTypes, userCertificate и operatingSystem*.

8. Диагностика

СимптомПричина и решение
Скрипт: «Имя … не разрешается»DNS клиента не указывает на HopeDC. Netplan: nameservers: addresses: [10.0.0.5], search: [corp.local]; NetworkManager: nmcli con mod <соединение> ipv4.dns 10.0.0.5 ipv4.dns-search corp.local.
kinit: Clock skew too greatРасхождение часов больше 5 минут: включите NTP в HopeDC (раздел 1) или синхронизируйте время клиента.
kinit: KDC has no support for encryption typeУ учётки нет ключей AES — смените пароль в панели.
realm join: Cannot find domain / realm discover пустоНет SRV‑записей в DNS клиента или закрыт UDP 389 (CLDAP); проверьте dig -t SRV _ldap._tcp.corp.local. Домен с бейджем «через реальный DC» в HopeDC не вводится.
adcli join: Server not found in Kerberos databaseКонтроллер указан по IP — укажите имя hopedc.corp.local.
adcli join: Couldn't set password for computer accountЗакрыт порт 464 TCP/UDP.
adcli join: Insufficient accessУчётка для ввода — не администратор домена.
id ivanov: no such userНет uidNumber/gidNumber (раздел 2.1); после назначения — sudo sss_cache -E.
Вход отклоняется, в журнале sssd — GPO accessВ sssd.conf нет ad_gpo_access_control = permissive.
Нет домашнего каталогаВключите mkhomedir (раздел 4.5).
Запросы клиента отклоняются без ответаЗадан список «Сетевой доступ → Клиенты домена» без подсети клиента.

Журналы: клиент — journalctl -u sssd, /var/log/sssd/*.log (для подробностей debug_level = 6 в sssd.conf); HopeDC — раздел «Логирование» (ввод компьютера, Kerberos, kpasswd).

9. Домен‑зеркало с принятой ролью KDC и ограничения