ubuntu 忽略 default_ccache_name
我在使用 Kerberos 和 Ubuntu 20.04 時遇到問題。
我正在執行一個 FreeIPA 伺服器,但由於它可以在我的 Centos 機器上執行,我想這是一個客戶端問題。
最大的目標是擁有一個 SSO 系統,用於多種服務。大多數情況下它按預期工作,但有一件事拒絕為我工作:
讓 automount/autofs 接受我的 Kerberos 配置。一個主要問題是 autofs 無法讀取
KRB5CCNAME
環境變數。它總是使用 libdefault,如果 Ubuntu 也這樣做的話,那很好。但是,出於某種原因,無論我嘗試什麼,Ubuntu 都不會設置 KRB5CCNAME 環境。變種。在正確登錄部分期間,但始終預設為FILE:/tmp/krb5cc_\<UID>_\<VALUE>
.我更喜歡使用密鑰環,所以我寫
default_ccache_name = KEYRING:persistent:%{uid}
在 libdefaults 部分的 krb5.conf 中。當手動設置 KRB5CCNAME 時,一切都很好,自動掛載連接到我的 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]
有任何想法嗎?
始終預設為
FILE:/tmp/krb5cc_<UID>_<VALUE>
如果 KRB5CCNAME 指向帶有隨機後綴的記憶體,這表明某些軟體已決定顯式設置隔離記憶體而不是使用預設記憶體。
(預設值根本沒有放在 KRB5CCNAME 中——它的目的是在環境變數不存在時使用。最重要的是,如果它使用傳統的預設路徑,你實際上會得到
FILE:/tmp/krb5cc_<UID>
沒有額外的隨機值結束。)我使用 repo 中的 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 配置已在同一部分中呼叫 pam_sss,請考慮在所有 PAM 配置中禁用它們。
如果這是不可能的,pam_krb5 有自己的每個會話記憶體模板的參數,可以在
/etc/krb5.conf
(或直接在 PAM 配置中設置,但這不太方便):
- Russ Allbery 的 pam_krb5(由 Debian/Ubuntu/Arch 使用):
[appdefaults] pam = { ccache = KEYRING:persistent:%u }
- Fedora 的 pam_krb5:
[appdefaults] pam = { ccname_template = KEYRING:persistent:%U }
最後,請注意,當您通過 ssh 連接到啟用了 GSSAPI 身份驗證和委託的伺服器時(例如,通過使用
ssh -K
),sshd本身會將委託的 TGT 儲存到唯一的每個會話記憶體中。此行為在 sshd 中硬編碼,無法更改。