我一直在尝试使用几种方法让用户的 ccache 文件自动更新,但这两种方法对我来说都不起作用。这是一个 debian 11 盒子,MIT kerberos。我首选的选项是使用 SSSD 配置选项自动更新票证,而无需 cron 作业。第二种选择是使用个人用户设置的 cron 作业。目标是始终拥有有效的票证供用户登录时使用,以及他们可能建立的需要连接到网络资源(通常是 MSSQL 主机)的 cron 作业使用
1.使用位于底部的配置参数这个答案我/etc/krb5.conf
通过将以下内容添加到[libdefaults]
部分并重新启动机器来编辑我的文件:
ldap_krb5_init_creds = True
krb5_ccname_template = FILE:/tmp/krb5cc_%U
krb5_lifetime = 86400
krb5_renewable_lifetime = 604800
krb5_renew_interval = 7200
预期行为是,我的 ccache 文件在重新启动时将显示为 krb5cc_用户名但更改没有明显的效果 - 我继续看到一个包含随机字母数字的文件(如“krb5cc_123456789_7mabEj”)/tmp
。我运行时会显示此文件klist
,但我相信它是在我最初登录机器时创建的。据我所知,这台机器满足使用 SSSD 对抗 Active Directory 的先决条件,以使此解决方案发挥作用。
- 我还尝试设置一个 cronjob 来
kinit -fkt
使用我的 keytab 运行。我从终端测试了它,它确实有效,但从 cron 来看它只是有点有效 - 我看到每分钟都会重新创建一个文件(按照测试计划)/tmp
。但是这个文件有一个意外的名称(附加了随机数字字符 - 如“krb5cc_1922807467”),它是与我登录到框时获得的初始 ccache 文件一起创建的/除了初始 ccache 文件之外,并且这个文件是不显示当我运行klist
。为了使 cron 解决方案正常工作,我需要使用/更新 klist 显示的预期票证缓存文件名。
如果有人能指出我在解决方案 1(最佳)或解决方案 2 中可能做错的地方,我将非常感激您的帮助 - 提前谢谢。
答案1
我编辑了 /etc/krb5.conf 文件,将以下内容添加到 [libdefaults] 部分并重新启动机器
这些参数都不适用于 krb5.conf – 它们是参数对于 SSSD。将它们放入sssd.conf
与您的 SSSD“域”相对应的部分中。
为了使 cron 解决方案发挥作用,我需要使用/更新 klist 显示的预期票证缓存文件名。
klist
和都kinit
使用通过KRB5CCNAME
环境变量。这是不是自动对用户运行的所有程序都采用相同的设置(事实上,它作为环境变量的意义在于它可以与 krb5.conf“默认”格式不同 - pam_sss 为每个新登录设置变量时,SSSD 会故意添加随机后缀)。当 PAM 模块为交互式登录设置它时,它不一定会为 cronjobs 设置,因为它们可能配置了不同的 PAM 模块堆栈。
因此,如果您想依赖 SSSD(请记住它只能在这么长时间内保持更新票证),您应该让 SSSD 使用确定性的缓存名称(使用 krb5_ccname_template),然后KRB5CCNAME
相应地设置您的 cronjobs。
另一方面,如果你使用 keytab,那么你应该从...开始设置KRB5CCNAME
“kinit”cronjob 和实际使用 Kerberos 的任务指向某个自定义位置(或取消设置它使用系统默认的“krb5cc_<uid>”)。
例如,我们所有的 cronjob shellscript 都这么做export KRB5CCNAME=/tmp/krb5cc_${UID}_cron
。
请记住,当你使用任何使用 keytab 获取票证的方法时,SSSD 的缓存将变得完全无关紧要;尝试重复使用与 SSSD 相同的路径几乎没有意义,因为kinit -k
将获得新鲜的无论如何都要买票。
但是这个文件有一个意外的名字(附加了随机数字字符 - 例如“krb5cc_1922807467”),
这些不是“随机数字字符”,而是用户的 UID(即部分%U
);库存默认缓存格式很简单FILE:/tmp/krb5cc_<uid>
。长 UID 是 SSSD 将 Windows SID/RID 映射到 Unix UID 的典型方法。
只有第三pam_sss 添加的组件(例如_7mabEj
您示例中的组件)确实是随机的。