如何获取Kerberos默认主体

时间:2016-01-08 19:21:37

标签: python bash shell terminal kerberos

如果我在我的终端输入kinit

kinit

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

Password for JayFrizzle@ANT.STACKOVERFLOW.COM:

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

1 个答案:

答案 0 :(得分:1)

简短的回答是,在获取有效的Kerberos票证之前,您没有可靠的机制来确定用户的Kerberos主体。

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

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

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

这也意味着确定Kerberos域也不可能。如果您只是使用MIT kerberos工具,理论上您可以解析/etc/krb5.conf之外的默认域...但同样,这可能实际上也可能不实际(因为用户可以指定显式域名)在运行kinit)时。

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

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