- Вопрос или проблема
- Ответ или решение
- Проблемы с аутентификацией пользователей при использовании SSSD/Kerberos с Active Directory Forest на 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, что требует глубокого анализа конфигураций и логов.
Анализ проблемы
-
Успешные операции:
- Команды
realm leave
иrealm join
прошли без ошибок, что подтверждает успешное присоединение системы к домену. - Команда
kinit testuser
успешно работает, и вы получаете TGT, что является положительным знаком корректной работы Kerberos. - Команда
id testuser
также успешно возвращает информацию о пользователе, указывая на то, что SSSD может разрешать идентификацию пользователя.
- Команды
-
Проблемы с SSH:
- При попытке SSH-входа (команда
ssh -l testuser localhost
) вы получаете сообщение об ошибке:Permission denied, please try again.
, что подтверждает неудачные попытки аутентификации через SSSD. Логи SSSD (например,sssd_ad.example.org.log
) показывают ряд тревожных сообщений, включая:- Были осуществлены попытки запросов к Kerberos, которые не дали результата.
- Логи указывают на ошибки, связанные с отсутствием домашней директории для пользователя и проблемами с разрешением SRV-записей.
- При попытке SSH-входа (команда
-
Ошибки в конфигурации:
- Ваша конфигурация в файле
/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
- Проверьте, что DNS работает правильно и что ваши машины могут разрешать 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 и администрировании сетей.