如何使用 kerberos 在 openssh 服务器上配置服务器范围的跨领域身份验证,而不必在 .k5login 文件中为两个领域添加原则?
答案1
当给定一个帐户名(由 SSH 提供)和一个主体名称时,Kerberos 库使用该krb5_kuserok()
函数来允许或拒绝访问。
默认情况下,krb5_kuserok()
如果主体名称在 中列出,则允许访问~/.k5userok
。如果该文件不存在,它会检查 krb5_aname_to_localname() 函数是否返回相同的帐户名。
krb5_aname_to_localname()
现在,如果主体只有一个名称组件并且其领域与系统的默认领域完全匹配,则默认情况下返回主体名称(不带领域);否则,它将返回带有领域的整个主体名称。
所以改变这种情况的最简单方法是教授krb5_aname_to_localname()
如何翻译外国校长名字.有以下几种方法:
如果你想对整个领域进行简单的一对一映射,您可以编写一条转换规则,krb5.conf
简单地删除该领域。(请注意,这些示例适用于 MIT Kerberos;您需要对它们进行一些调整以适应 Heimdal。)
[境界] NULLROUTE.EU.ORG = { auth_to_local = 规则:[1:$1@$0](.*@EXAMPLE\.COM)s/@.*// auth_to_local = 规则:[1:$1@$0](.*@ATHENA\.MIT\.EDU)s/@.*/@athena/ auth_to_local = 默认 }
在此示例中,[1:...]
检查“本地”(左侧)是否只有一个组件;[1:$1@$0]
从第一个组件 + @ + 领域名称构造单个字符串(本质上是原始主体名称);(.*@EXAMPLE\.COM)
将构造的字符串与正则表达式进行匹配,以验证它是否以指定的领域名称结尾;用空字符串s/@.*//
替换正则表达式@.*
(符号后面的所有内容@
)。结果将用作系统帐户名称。
第二条规则的工作方式相同,但用“@athena”替换领域,从而得到类似这样的用户名root@athena
。我只是将其作为示例,因为 SSSD LDAP/AD 客户端可以使用此语法,允许每个主机有多个领域。
第三条规则正是我在一开始所描述的。
如果你只想映射特定名称,您可以添加一个auth_to_local_names
部分;配置如下:(注:Heimdal 使用auth_to_local
)
[libdefaults] 默认领域 = NULLROUTE.EU.ORG [境界] NULLROUTE.EU.ORG = { auth_to_local_names = { 重力/[电子邮件保护]= 重力 [电子邮件保护]= 根 } }
这仅将两个主要名称转换为一个本地帐户。
如果你正在寻找一种自动化方法,MIT Kerberos 的最新版本有一个 API“localauth”插件它们可以为授权检查以及主体/账户转换提供自己的实现。
例如,固态存储系统IPA/AD 客户端最近(大约一个月前)开始提供自己的插件,用于翻译 FreeIPA 和 Active Directory 用户的主体名称。