Ubuntu

ubuntu 忽略 default_ccache_name

  • December 14, 2020

我在使用 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 中硬編碼,無法更改。

引用自:https://serverfault.com/questions/1045956