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

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

如何使用 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 用户的主体名称。

相关内容