如果我在我的终端输入kinit
:
kinit
...然后我得到以下Kerberos身份验证提示:
Password for JayFrizzle@ANT.STACKOVERFLOW.COM:
我想知道的是,有没有办法通过shell(或python)以编程方式获取username@DOMAIN.COM
字符串? kinit
以某种方式知道默认用户是谁(在我的例子中,JayFrizzle)。有没有办法通过调用Kerberos或从我计算机上的预先存在的文件中获取此信息?
答案 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
或某些程序化模拟来获取主体名称。