Проблемы с аутентификацией пользователей с использованием SSSD/Kerberos в лесу AD на AlmaLinux/Rocky Linux 9

Вопрос или проблема

Я обновил клиенты AD на CentOS 7 до Alma/Rocky 9, но что-то изменилось, потому что я больше не могу использовать AD для входа пользователей.

Всегда была проблема. Когда мы настраивали систему 10 лет назад, мы не могли сделать так, чтобы SSSD выполнял вход (аутентификацию) с использованием AD, потому что у нас есть лес AD. Мы как-то сразу перешли на Kerberos для аутентификации, потому что это работало.

Теперь я пытаюсь воссоздать конфигурацию, но пока что только воссоздал проблему:

  • realm leave и realm join сработали

  • kinit testuser работает, и klist показывает Kerberos TGT (билет на предоставление билета)

  • id testuser работает (после всего лишь двух дней попыток настроек в /etc/sssd/sssd.conf)

  • Вход через ssh -l testuser дает Permission denied, please try again., несколько записей в журнале, которые выглядят подозрительно из /var/log/sssd/sssd_ad.example.org.log ниже:

    *  (2024-11-09 16:24:34): [be[ad.example.org]] [dp_attach_req] (0x0400): [RID#27] DP Request [PAM Preauth #27]: REQ_TRACE: New request. [sssd.pam CID #1] Flags [0000].
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [dp_attach_req] (0x0400): [RID#27] Number of active DP request: 1
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [sss_domain_get_state] (0x1000): [RID#27] Domain ad.example.org is Active
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [sss_domain_get_state] (0x1000): [RID#27] Domain login.example.org is Active
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [krb5_auth_queue_send] (0x1000): [RID#27] Wait queue of user [testuser@ad.example.org] is empty, running request [0x55cc4fb6e200] immediately.
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [sss_domain_get_state] (0x1000): [RID#27] Domain ad.example.org is Active
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [sss_domain_get_state] (0x1000): [RID#27] Domain login.example.org is Active
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [krb5_setup] (0x4000): [RID#27] No mapping for: testuser@ad.example.org
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [krb5_auth_send] (0x0100): [RID#27] Home directory for user [testuser@ad.example.org] not known.
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [check_ccache_re] (0x1000): [RID#27] Ccache directory name [KCM:] does not contain illegal patterns.
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [krb5_auth_prepare_ccache_name] (0x1000): [RID#27] No ccache file for user [testuser@ad.example.org] found.
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [fo_resolve_service_send] (0x0100): [RID#27] Trying to resolve service 'KERBEROS'
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [get_port_status] (0x1000): [RID#27] Port status of port 0 for server '(no name)' is 'neutral'
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [fo_resolve_service_activate_timeout] (0x2000): [RID#27] Resolve timeout [dns_resolver_timeout] set to 6 seconds
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [resolve_srv_send] (0x0200): [RID#27] The status of SRV lookup is neutral
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [ad_cldap_ping_send] (0x0400): [RID#27] CLDAP ping is not necessary, using site 'Example' and forest 'ad.example.org'
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [ad_srv_plugin_ping_done] (0x0400): [RID#27] About to discover primary and backup servers
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [fo_discover_servers_send] (0x0400): [RID#27] Looking up primary servers
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [resolv_discover_srv_next_domain] (0x0400): [RID#27] SRV resolution of service 'KERBEROS'. Will use DNS discovery domain 'EXAMPLE._sites.ad.example.org'
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [resolv_getsrv_send] (0x0100): [RID#27] Trying to resolve SRV record of '_KERBEROS._udp.EXAMPLE._sites.ad.example.org'
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [schedule_request_timeout] (0x2000): [RID#27] Scheduling a timeout of 3 seconds
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [schedule_timeout_watcher] (0x2000): [RID#27] Scheduling DNS timeout watcher
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [unschedule_timeout_watcher] (0x4000): [RID#27] Unscheduling DNS timeout watcher
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [request_watch_destructor] (0x0400): [RID#27] Deleting request watch
    *  (2024-11-09 16:24:34): [be[ad.example.org]] [resolv_discover_srv_done] (0x0040): [RID#27] SRV query failed [4]: Domain name not found
    

Ошибки, кажется, варьируются каким-то образом, когда я играю с параметрами. Однако одна команда id и одна команда ssh -l testuser localhost генерируют 490229 строк отладочной информации в sssd_ad.example.org.log, что затрудняет мне нацеливание моих попыток на определенный вариант.

Вот /etc/krb5.conf (имена изменены для защиты невиновных):

# Конфигурационные фрагменты также могут быть размещены в этом каталоге
includedir /etc/krb5.conf.d/
includedir /var/lib/sss/pubconf/krb5.include.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = LOGIN.EXAMPLE.ORG
### default_realm = AD.EXAMPLE.ORG

 dns_lookup_realm = false
### false only when giving names below
 dns_lookup_kdc = true

 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 default_ccache_name = FILE:/tmp/krbcc_%{uid}

[realms]
 AD.EXAMPLE.ORG = {
 kdc = ad-dc-01.ad.example.org
 kdc = ad-dc-02.ad.example.org
 }

 LOGIN.EXAMPLE.ORG = {
 kdc = ad-dc-01.ad.example.org
 kdc = ad-dc-02.ad.example.org
 }

[domain_realm]
 ad.example.org = AD.EXAMPLE.ORG
 .ad.example.org = AD.EXAMPLE.ORG
 login.example.org = LOGIN.EXAMPLE.ORG
 .login.example.org = LOGIN.EXAMPLE.ORG

Вот /etc/sssd/sssd.conf:

[sssd]
domains = ad.example.org
config_file_version = 2
### services = nss, pam
services = autofs, nss, pam
### services = nss

debug_level = 0x3ff0


[domain/ad.example.org]

ad_domain = ad.example.org
krb5_realm = AD.EXAMPLE.ORG
### realmd_tags = manages-system joined-with-samba 
realmd_tags = manages-system joined-with-adcli

# offline logins
### cache_credentials = True
### krb5_store_password_if_offline = True
cache_credentials = false
krb5_store_password_if_offline = false

### must for id lookup: id_provider = ad
id_provider = ad
access_provider = ad
### access_provider = krb5
### Test since SSSD cannot do auth
### auth_provider = none
### auth_provider = ad
auth_provider = krb5
chpass_provider = krb5

enumerate = True

sudo_provider = none
selinux_provider = none

default_shell = /bin/bash
override_shell = /bin/bash

ldap_sasl_authid = hostname1$
ldap_id_mapping = True
### ldap_id_mapping = False

### test workaround, see https://pagure.io/SSSD/sssd/issue/3197
ldap_referrals = False
ad_enable_gc = False

use_fully_qualified_names = False
### disables lookup     use_fully_qualified_names = True

fallback_homedir = /home/%u

### krb5_validate = False
krb5_validate = true

debug_level = 0x3ff0

[domain/ad.example.org/login.example.org]
use_fully_qualified_names = False

debug_level = 0x3ff0

[domain/login.example.org]
use_fully_qualified_names = False

debug_level = 0x3ff0

[domain/vdi.example.org]
use_fully_qualified_names = False

debug_level = 0x3ff0


[nss]
debug_level = 0x3ff0

[pam]
debug_level = 0x3ff0

[autofs]
debug_level = 0x3ff0

ИЗМЕНЕНИЕ: Новый /etc/krb5.conf с явным указанием контроллеров домена в реалмах. Новое сообщение об ошибке:

# systemctl status sssd 

● sssd.service - Демон системных служб безопасности
     Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-11-09 17:45:52 CET; 1min 38s ago
   Main PID: 9343 (sssd)
      Tasks: 6 (limit: 98286)
     Memory: 48.6M
        CPU: 149ms
     CGroup: /system.slice/sssd.service
             ├─9343 /usr/sbin/sssd -i --logger=files
             ├─9345 /usr/libexec/sssd/sssd_be --domain ad.example.org --uid 0 --gid 0 --logger=files
             ├─9346 /usr/libexec/sssd/sssd_autofs --uid 0 --gid 0 --logger=files
             ├─9347 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
             ├─9348 /usr/libexec/sssd/sssd_pam --uid 0 --gid 0 --logger=files
             └─9349 /usr/libexec/sssd/sssd_pac --uid 0 --gid 0 --logger=files

Nov 09 17:45:52 hostname1.ad.example.org sssd[9343]: Starting up
Nov 09 17:45:52 hostname1.ad.example.org sssd_be[9345]: Starting up
Nov 09 17:45:52 hostname1.ad.example.org sssd_autofs[9346]: Starting up
Nov 09 17:45:52 hostname1.ad.example.org sssd_nss[9347]: Starting up
Nov 09 17:45:52 hostname1.ad.example.org sssd_pam[9348]: Starting up
Nov 09 17:45:52 hostname1.ad.example.org sssd_pac[9349]: Starting up
Nov 09 17:45:52 hostname1.ad.example.org systemd[1]: Started System Security Services Daemon.
Nov 09 17:45:52 hostname1.ad.example.org sssd_be[9345]: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (Decrypt integrity check failed)
Nov 09 17:45:52 hostname1.ad.example.org sssd_be[9345]: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (Decrypt integrity check failed)
Nov 09 17:45:52 hostname1.ad.example.org sssd_be[9345]: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (Decrypt integrity check failed)

Теперь команда id не удается.

Ответ или решение

Проблемы с аутентификацией пользователей при использовании SSSD/Kerberos с Active Directory Forest на AlmaLinux/Rocky Linux 9

Введение

Аутентификация пользователей в распределённых системах с использованием Active Directory (AD) и Kerberos может быть сложной задачей, особенно при миграции на новые версии операционных систем, таких как AlmaLinux или Rocky Linux. Во время перехода с CentOS 7 на AlmaLinux/Rocky Linux 9 вы столкнулись с проблемами аутентификации через SSSD, что требует глубокого анализа конфигураций и логов.

Анализ проблемы

  1. Успешные операции:

    • Команды realm leave и realm join прошли без ошибок, что подтверждает успешное присоединение системы к домену.
    • Команда kinit testuser успешно работает, и вы получаете TGT, что является положительным знаком корректной работы Kerberos.
    • Команда id testuser также успешно возвращает информацию о пользователе, указывая на то, что SSSD может разрешать идентификацию пользователя.
  2. Проблемы с SSH:

    • При попытке SSH-входа (команда ssh -l testuser localhost) вы получаете сообщение об ошибке: Permission denied, please try again., что подтверждает неудачные попытки аутентификации через SSSD. Логи SSSD (например, sssd_ad.example.org.log) показывают ряд тревожных сообщений, включая:
      • Были осуществлены попытки запросов к Kerberos, которые не дали результата.
      • Логи указывают на ошибки, связанные с отсутствием домашней директории для пользователя и проблемами с разрешением SRV-записей.
  3. Ошибки в конфигурации:

    • Ваша конфигурация в файле /etc/krb5.conf может требовать корректировок, особенно в разделе [realms], где следует точно указать адреса контроллеров домена.
    • Конфигурация SSSD в /etc/sssd/sssd.conf, особенно используемые параметры для id_provider, auth_provider и cache_credentials, требует внимательной настройки в зависимости от специфики вашего окружения.

Рекомендации по устранению неполадок

Проверка и коррекция конфигураций

  • Конфигурация krb5.conf:

    • Убедитесь, что ваш файл /etc/krb5.conf корректно указывает на контроллеры домена и соответствует использованию DNS:
      [realms]
      AD.EXAMPLE.ORG = {
      kdc = ad-dc-01.ad.example.org
      kdc = ad-dc-02.ad.example.org
      }
      LOGIN.EXAMPLE.ORG = {
      kdc = ad-dc-01.ad.example.org
      kdc = ad-dc-02.ad.example.org
      }
  • Конфигурация sssd.conf:

    • Убедитесь, что параметры id_provider, auth_provider, access_provider соответствуют вашим требованиям. Попробуйте следующую конфигурацию:
      [domain/ad.example.org]
      id_provider = ad
      access_provider = ad
      auth_provider = krb5
  • Разрешение SRV-записей:

    • Проверьте, что DNS работает правильно и что ваши машины могут разрешать SRV-записи. Например, используйте утилиту dig для проверки:
      dig _kerberos._udp.ad.example.org SRV

Логирование и отладка

  • Увеличьте уровень отладки SSSD и Kerberos, чтобы получить более подробную информацию о происходящих процессах:

    [sssd]
    debug_level = 0x3ffff
  • Перезапустите службы для применения изменений:

    systemctl restart sssd
    systemctl restart krb5kdc

Дополнительные проверки

  • Проверьте, корректно ли настроена SELinux. В некоторых случаях, если SELinux функционирует в строгом режиме, это может блокировать необходимые операции. Рассмотрите возможность временного отключения SELinux для проверки:
    setenforce 0

Заключение

Проблемы с аутентификацией пользователей с помощью SSSD и Kerberos в окружении Active Directory Forest могут быть сложными и многогранными. Однако, следуя представленным рекомендациям, вы сможете диагностировать и, надеюсь, решить возникшие у вас проблемы. Если проблемы сохраняются, рассмотрите возможность обращения за поддержкой на сообщества, такие как Stack Overflow или специализированные форумы, сосредоточенные на Linux и администрировании сетей.

Оцените материал
Добавить комментарий

Капча загружается...