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 时,一切都很好,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>在最后得到任何额外的随机值。)

我使用 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_sss,请考虑在所有 PAM 配置中禁用 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 中是硬编码的,无法更改。

相关内容