适用于多个Windows域的Linux SSO

我已经成功地在apache上为apache服务器所在的AD域中的windows用户实现了SSO:AD domain = example.com Linux server = linux.example.com KDC = ad.example.com

我在httpd.conf中将KrbLocalUserMapping设置为ON,因为用户login的应用程序需要剥离用户名的@ example.com部分。

现在我想让分支机构的用户login到应用程序,但他们来自不同的域= branches.example.com。 两个域都处于可信关系。

当branches.example.com的用户尝试login时,他们得到“内部服务器错误”,并且apache错误日志显示“Krb5_aname_to_localname()找不到主体[email protected]的映射”

我的猜测是,来自子域branch.example.com的用户没有得到剥离的用户名的域名部分。

我需要改变什么地方(可能是krb5.conf?)。 我是否需要为分支子域生成单独的密钥表?

另外,因为它是一个我不能任意重启的生产服务器,所以在改变krb5.conf中的东西之后我需要重启哪些服务?

我刚刚遇到同样的问题,感谢这里的线索 ,我find了答案!

在我的mod_auth_kerb设置中打开第二个(可信任)领域,并将正确的东西放在密钥表中,如果我试图用第二个域中的用户login,我在httpd日志中得到如下错误:

 [auth_kerb:notice] [pid 1234] [client XXXX:12345] krb5_aname_to_localname() found no mapping for principal [email protected] 

好消息是,我已经解决了! 下面的细节….

首先,在你的Apache HTTPDconfiguration中,你需要这样的东西:

 # 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]转到pipe理员,而[email protected]转到guest

接下来,假设MIT Kerberos,你需要编辑你的/etc/krb5.conf文件,并告诉如何将校长映射到用户名。 由于各种历史原因,这不是你所期望的libdefaults部分。 这也没有在每个领域的部分,这让我感到失望。 而是使用缺省领域的[realm]部分中的auth_to_local条目完成的。

默认情况下, krb5_aname_to_localname() libkrb5函数将从默认krb5_aname_to_localname()删除领域,否则将其留在那里。 所以,我们必须添加一个条目来告诉它从领域剥离领域。 (更复杂的规则也是可能的,更多的参见krb5.conf手册页)

所以,我们希望我们的configuration是这样的:

 [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服务需要在更改后重新启动