
У меня проблемы с Kerberos и Ubuntu 20.04.
Я использую FreeIPA Server, но поскольку он работает на моих машинах Centos, я предполагаю, что это проблема клиента.
Главная цель — иметь систему единого входа для нескольких служб. В основном она работает так, как задумано, но у меня отказывается работать одна вещь:
заставить automount/autofs принять мою конфигурацию для Kerberos. Одна из основных проблем заключается в том, что autofs не может прочитать KRB5CCNAME
переменную окружения. Он всегда использует libdefault, что было бы неплохо, если бы Ubuntu также делал это. Однако по какой-то причине, независимо от того, что я пытаюсь, Ubuntu не устанавливает переменную окружения KRB5CCNAME правильно во время входа в систему, а всегда по умолчанию FILE:/tmp/krb5cc_\<UID>_\<VALUE>
.
Я бы предпочел использовать связку ключей, поэтому я написал default_ccache_name = KEYRING:persistent:%{uid}
в krb5.conf в разделе libdefaults. При ручной настройке KRB5CCNAME все просто отлично, и automount подключается к моим дискам samba.
Но если позволить системе решать, что должна содержать переменная, это всегда приводит кFILE:...
У моего клиента krb5.conf выглядит так:
includedir /etc/krb5.conf.d/
includedir /var/lib/sss/pubconf/krb5.include.d/
[logging]
default = FILE:/var/log/krb5.log
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
rdns = false
dns_canonicalize_hostname = false
ticket_lifetime = 24h
forwardable = true
udp_preference_limit = 0
default_ccache_name = KEYRING:persistent:%{uid}
ccache_type = 4
[realms]
EXAMPLE.COM = {
kdc = ipa.example.com:80
master_kdc = ipa.example.com:88
admin_server = ipa.example.com:749
kpasswd_server = ipa.example.com:464
default_domain = example.com
pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem
}
[domain_realm]
.example.com = <EXAMPLE.COM>
example.com = <EXAMPLE.COM>
client.example.com = <EXAMPLE.COM>
Конфигурация SSSD:
[domain/example.com]
debug_level=10
cache_credentials = True
krb5_store_password_if_offline = True
ipa_domain = EXAMPLE.COM
id_provider = ipa
auth_provider = ipa
access_provider = ipa
ipa_hostname = client.example.com
chpass_provider = ipa
ipa_server = _srv_, ipa.example.com
ldap_tls_cacert = /etc/ipa/ca.crt
ldap_search_base = cn=accounts,dc=example,dc=com
krb5_ccname_template = KEYRING:persistent:%U
[sssd]
services = nss, sudo, pam, ssh
config_file_version = 2
domains = example.com
debug_level=10
[nss]
override_shell = /bin/bash
[pam]
offline_credentials_expiration = 60
debug_level=10
[domain/default]
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
access_provider = ldap
ldap_access_filter = (objectClass=posixAccount)
debug_level=10
[ssh]
[sudo]
Есть идеи?
решение1
всегда по умолчанию
FILE:/tmp/krb5cc_<UID>_<VALUE>
Если KRB5CCNAME указывает на кэш со случайным суффиксом, это означает, что какое-то программное обеспечение решило явно настроить изолированный кэш.вместоиспользуя значение по умолчанию.
(Значение по умолчанию вообще не помещается в KRB5CCNAME — его цель — использовать, когда переменная окруженияотсутствует(Кроме того, если бы использовался традиционный путь по умолчанию, FILE:/tmp/krb5cc_<UID>
в конце вы бы не получили никакого дополнительного случайного значения.)
Я установил все с помощью пакета freeipa-client из репозитория. Он установил pam_krb5 и использовал его в common-password, -account, -session(-interactive) и -auth. sss используется в common-password, -account, -session, -auth и в некоторых .pam-olds
Ваша проблема в том, что пароль проверяется по Kerberos двумя независимыми модулями: один раз pam_sss (SSSD) и один раз pam_krb5. Оба они используют уникальные кэши для каждого сеанса, и оба они установят KRB5CCNAME на такой временный путь к кэшу на основе файла.
В идеале вам вообще не следует использовать pam_krb5 – те же задачи уже выполняет SSSD в рамках интеграции FreeIPA. Рассмотрите возможность отключения pam_krb5 во всех конфигурациях PAM, если они уже вызывают pam_sss в том же разделе.
Если это невозможно, pam_krb5 имеет свой собственный параметр для шаблона кэша для каждого сеанса, который можно задать /etc/krb5.conf
(или непосредственно в конфигурации PAM, но это не так удобно):
Pam_krb5 Расса Олбери (используется Debian/Ubuntu/Arch):
[appdefaults] pam = { ccache = KEYRING:persistent:%u }
Pam_krb5 от Fedora:
[appdefaults] pam = { ccname_template = KEYRING:persistent:%U }
Наконец, обратите внимание, что когда вы подключаетесь по ssh к серверу с включенной аутентификацией и делегированием GSSAPI (например, с помощью ssh -K
), sshdсамсохраняет делегированный TGT в уникальный кэш для каждого сеанса. Это поведение жестко закодировано в sshd и не может быть изменено.