如何获取 Kerberos 默认主体

How to get Kerberos default principal

如果我在我的终端中输入 kinit

kinit

...然后我得到以下 Kerberos 身份验证提示:

Password for JayFrizzle@ANT.whosebug.com:

我想知道的是,有没有办法通过 shell(或 python)以编程方式获取 username@DOMAIN.COM 字符串? kinit 以某种方式知道默认用户是谁(在我的例子中,JayFrizzle)。有没有一种方法可以通过调用 Kerberos 或从我计算机上预先存在的文件中获取此信息?

简短的回答是,在用户获得有效的 Kerberos 票据之前,没有可靠的机制可以确定用户的 Kerberos 主体

正如我在评论中提到的,kinit 将使用您的本地用户名作为 Kerberos 主体的用户名部分。但是:不能保证这是正确的;完全有可能有人总是 kinit 使用与本地用户名不同的明确用户名。

甚至比这更棘手:根据本地系统配置,kinit 甚至可能不会参与获取 Kerberos 令牌。例如,sssd 身份验证服务本身支持 Kerberos,并且有自己的配置,完全独立于 MIT(或 Heimdal)Kerberos 包使用的配置。

SSSD 允许在本地用户名和 Kerberos 主体名称之间进行映射(例如,当您以 JayFrizzle 身份登录本地系统时,您将自动获取 jayf@EXAMPLE.COM 的 Kerberos 票证)。

这也意味着实际上也无法确定 Kerberos 域。如果您只是使用麻省理工学院的 kerberos 工具,理论上您可以从 /etc/krb5.conf 中解析出默认域...但是,这实际上可能正确也可能不正确(因为用户可以指定一个明确的域名当 运行 kinit).

因此,如果您了解自己的环境,并且知道自己仅依赖于传统的 MIT kerberos 命令行工具,则可以使用 /etc/krb5.conf 中的本地用户名和默认域来获取您需要的信息想要。

但实际上,您应该只要求用户通过其他方式获取凭据,然后使用 klist 或某些编程模拟来获取主体名称。