使用 ssh 进行跨领域 kerberos 身份验证

Iai*_*hie 5 ssh kerberos

如何使用 kerberos 在 openssh 服务器上配置服务器范围的跨领域身份验证,而不必在 .k5login 文件中为两个领域添加原则?

use*_*686 8

当给定帐户名称(由 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]
        default_realm = NULLROUTE.EU.ORG

[领域]
        NULLROUTE.EU.ORG = {
                auth_to_local_names = {
                        重力/admin@EXAMPLE.COM = 重力
                        root@ATHENA.MIT.EDU = 根
                }
        }

这仅将两个主体名称转换为一个本地帐户。

如果您正在寻找一种自动化方法,最近版本的 MIT Kerberos 有一个用于“localauth”插件的 API,它可以为授权检查以及主体/帐户转换提供自己的实现。

例如,SSSD IPA/AD 客户端最近(大约一个月前)开始提供自己的插件,用于翻译 FreeIPA 和 Active Directory 用户的主体名称。