ubuntu 忽略default_ccache_name

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}在 krb5.conf 的 libdefaults 部分中寫入。當手動設定 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]

有任何想法嗎?

答案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 配置中已在同一部分中呼叫 pam_sss,請考慮停用 pam_krb5。

如果不可能,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 中且無法變更。

相關內容