我已成功在 apache 上为与 apache 服务器位于同一 AD 域中的 Windows 用户实现了 SSO:AD 域 = example.com Linux 服务器 = linux.example.com KDC = ad.example.com
我在 httpd.conf 中将 KrbLocalUserMapping 设置为 ON,因为用户登录的应用程序需要删除用户名的 @example.com 部分。
现在我想让分支机构的用户也能登录应用程序,但他们来自不同的域 = branch.example.com。这两个域之间存在信任关系。
当来自 branch.example.com 的用户尝试登录时,他们会收到“内部服务器错误”,并且 apache 错误日志显示“Krb5_aname_to_localname() 未找到主体映射[电子邮件保护]“
我的猜测是,来自子域 branch.example.com 的用户的用户名的域部分没有被剥离。
我需要更改什么以及在哪里更改(可能是 krb5.conf?)。我是否需要为分支子域生成单独的密钥表?
另外,由于它是一台我无法任意重启的生产服务器,在 krb5.conf 中更改内容后我需要重启哪些服务?
答案1
我刚刚遇到了和你一样的问题,感谢此主题在这里,我找到了答案!
在我的设置中打开第二个(受信任的)领域mod_auth_kerb
,并在密钥表中添加正确的内容后,如果我尝试使用第二个域中的用户登录,则会在 httpd 日志中收到如下错误:
[auth_kerb:notice] [pid 1234] [client X.X.X.X:12345] krb5_aname_to_localname() found no mapping for principal [email protected]
好消息是,我已经解决了!详情如下....
首先,在您的 Apache HTTPD 配置中,您需要类似这样的内容:
# Use this one for both Examples and Branches together
KrbAuthRealms EXAMPLE.COM BRANCHES.EXAMPLE.COM
# Strip the realm from the username
KrbLocalUserMapping On
这告诉mod_auth_kerb
您接受来自主域领域或分支领域的用户,并从用户名中剥离领域。这意味着[email protected]
转到管理员,而[email protected]
转到guest
接下来,假设使用 MIT kerberos,您需要编辑文件/etc/krb5.conf
,并告诉它如何将主体映射到用户名。由于各种历史原因,这并非libdefaults
如您所期望的那样在部分中完成。它也不是在每个领域部分中完成的,这让我很困惑。相反,它是使用默认领域部分auth_to_local
中的条目完成的。[realm]
默认情况下,krb5_aname_to_localname()
libkrb5 函数会从默认领域中删除该领域,否则将其保留在那里。因此,我们必须添加一个条目来告诉它也从分支领域中删除该领域。(也可能有更复杂的规则,krb5.conf
有关更多信息,请参阅手册页)
因此,我们希望我们的配置是这样的:
[libdefaults]
default_realm = EXAMPLE.COM
[realms]
EXAMPLE.COM = {
kdc = dc.example.com
admin_server = dc.example.com
auth_to_local = RULE:[1:$1@$0](^.*@BRANCHES\.EXAMPLE\.COM)s/@.*//
auth_to_local = DEFAULT
}
BRANCHES.EXAMPLE.COM = {
kdc = dc.branches.example.com
admin_server = dc.branches.example.com
}
请注意,BRANCHES.EXAMPLE.COM
映射规则不存在于其领域中,而是存在于主EXAMPLE.COM
领域(即默认领域)中。
另外,由于它是一台我无法任意重启的生产服务器,在 krb5.conf 中更改内容后我需要重启哪些服务?
更改后只需重新启动 Apache HTTPD 服务
答案2
只需添加@Gragravarr 的答案(效果很好,非常感谢!),如果你的KrbServiceName PROTOCOL/domain.of.your.service
apache 配置中有一个指令,则需要将其替换为KrbServiceName Any
(否则你会收到错误,因为 Kerb/Apache 会根据每个领域检查你的 ServiceName……)