使用 SSSD/realm 列出 Kerberos 票证、到期详细信息

使用 SSSD/realm 列出 Kerberos 票证、到期详细信息

tl;dr - 我如何检查用户的 kerberos 票证的详细信息以确认它们正在按照我试图配置的方式进行更新,使用领域或 sssd(未安装 klist)?

您好 - 我使用的是 Debian 11 系统,该系统结合了 AD/域和 SSSD 和领域的混合。值得注意的是,我没有任何提供“kinit”、“klist”等命令的软件包,而这些命令是我在以前的平台上熟悉的。

每次域用户登录时,他们都会获得一张新的 Kerberos 票证,我相信这是因为 /tmp 中会创建一个新文件,例如“/tmp/krb5cc_1922807467_vhNkj5”。这允许他们使用 Windows 凭据访问网络资源。我注意到票证似乎会在 12-24 小时后过期,因此我正在寻找一种方法来请求更长的有效票证(最长可达我的域所能提供的最长有效票证),和/或自动续订现有票证并获取新票证。这样我就可以允许用户使用 cron 安排任务并保证有效票证可用。

我已编辑 /etc/sssd/sssd.conf 中的某些设置,尝试增加可更新生命周期并设置票证的更新间隔,然后重新启动 sssd 服务。现在我被困在尝试确认这些设置已生效 - 我找不到列出活动票证详细信息的方法。我可以看到每次登录时都会创建我的票证文件,但无法判断它是否按照我为测试目的设置的短间隔进行更新。

有没有办法使用 sssd、realm 或我可能已经安装/启用的其他程序来显示用户的票证状态/详细信息?如果没有,是否有其他我可以安装的软件包(例如提供 klist 的软件包),它不会破坏我现有的 realm/sssd 配置并且不需要 AD 管理员凭据?最终,我只想找到一种方法来确认我的尝试是否有效。

答案1

tl;dr - 我如何检查用户的 kerberos 票证的详细信息以确认它们正在按照我试图配置的方式进行更新,使用领域或 sssd(未安装 klist)?

安装 klist。对于 MIT Kerberos,该软件包是krb5-user无害的;其依赖项(krb5 库)已安装,因为 SSSD 无论如何都需要它。

在极少数情况下,你的系统可能使用 Heimdal Kerberos(这不是默认的,但由于 Debian 已支持该软件包,因此等效软件包为heimdal-clients

最后,您可以将scp票证缓存到另一个系统并klist -c <path>在那里运行(基于文件的缓存格式即使在 MIT Krb5 和 Heimdal 系统之间也是兼容的)。

有没有办法使用 sssd、realm 或我可能已经安装/启用的其他程序来显示用户的票证状态/详细信息?

不,它们旨在与 Kerberos 发行版中的标准工具协同工作,也就是说,您大多需要klist安装常规工具。

我注意到票似乎会在 12-24 小时后过期,因此我正在寻找一种方法来请求更长有效期的票,直至达到我的域名所能提供的最大值,和/或自动更新现有票并获取新票。

24 小时通常是我期望域名能够提供的最长期限。(更长的生命周期会增加票证被盗的影响,如果发生这种情况,因为不可能撤销仍然有效的票证 - 这就是为什么它们具有单独的“可更新”生命周期,需要再次联系 KDC 来延长有效期。)

但是,最长可续订期限通常为 7 天或 14 天,之后需要再次提供凭证(密码、智能卡)。要让 cronjobs 长时间无人值守工作,系统需要存储初始凭证(就像 Windows 服务或计划任务要求您以明文形式提供帐户密码一样)。

这样我就可以允许用户使用 cron 安排任务并保证有效的票证可用。

除了 SSSD 之外,还有几种现有的方法可以做到这一点。(我实际上不确定 Debian 中的 SSSD 版本是否自行更新用户票证;我认为这是后来添加的,而且即使如此,也只针对 SSSD 管理的KCM:缓存类型,而不针对基于文件的缓存。)

依赖交互式登录过程中获取的票证很可能毫无意义(因为迟早有人将要在密码过期前忘记登录)。 相反,让用户明确存储他们的实际密码——对于 Linux,它将采用密钥表存储派生密钥(而非明文密码)。毕竟,如果您信任系统永久存储用户的 Kerberos TGT,那么也可以信任同一系统保护该用户的密码。

一旦你有了 keytab(可以使用addent -f的子命令创建ktutil),就有多种方法可以执行 cronjob使用该密钥表:

  1. gssproxy 守护进程,它有点类似于 ssh-agent,但适用于 Kerberos。它附带一个 NFS 示例,该示例使用存储在的密钥表来代表/var/lib/gssproxy/clients/<uid>.keytab配置为使用它的程序自动获取票证(对于使用常规 libkrb5 的程序,即GSS_USE_PROXY=1在环境中)。

    gssproxy 的一个优点是它可以提供以下 keytab:不是用户自己可以访问,类似于 ssh-agent 不允许提取解密的密钥。

  2. 最近的 libkrb5 中内置的“客户端凭证”功能允许您在/var/lib/krb5/user/<uid>/client.keytab(或定义的某个自定义位置KRB5_CLIENT_KTNAME=)放置一个密钥表,libkrb5 将根据需要使用它来获取票证。

    与 gssproxy 不同,这要求 keytab 可被作业读取。

  3. k5start该软件包中的工具是kstart一个使用 keytab 获取票证并在其运行的进程期间保持票证更新的程序。

  4. kinit -k -t <keytab>每隔几个小时重新获取票证的基本cronjob。

(如果您确实想依赖现有的缓存,相同的kstartDebian 软件包中也有一个krenew类似的工具k5start,但仅用于保持现有票证的更新。)

相关内容