【问题标题】:How to get Kerberos default principal如何获取 Kerberos 默认主体
【发布时间】:2016-01-08 19:21:37
【问题描述】:

如果我在终端中输入kinit

kinit

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

Password for JayFrizzle@ANT.STACKOVERFLOW.COM:

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

【问题讨论】:

  • JayFrizzle 是您的本地用户名吗?因为这是kinit 默认使用的。
  • klist 应该为您提供委托人列表。你可以grep 得到你想要的结果。
  • @chrisaycock 我认为这也可以,但是如果您没有任何票证(或者如果票证都已过期),那么您将看不到任何用户名。 kdestroy && klist 会告诉你我在说什么
  • @larsks 有效点,我从没想过。你知道我如何获得域名吗?我正在开发一个需要在三个不同的 ANT.somedomain.COM 域中交叉兼容的应用程序

标签: python bash shell terminal kerberos


【解决方案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 或一些编程模拟来获取主体名称。

【讨论】:

  • 在我的场景中,用户将使用他们/etc/krb5.conf 中列出的默认域(感谢您提及该文件),因此将其与 getpass.getuser() 结合使用对我们有用。谢谢!
猜你喜欢
  • 2015-01-15
  • 2016-03-04
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 2011-10-31
  • 2021-03-09
相关资源
最近更新 更多