您好,我想知道如何将 Linux MIT Kerberos 与 Windows 2003 Active Directory 链接起来以实现以下目标:
用户,[电子邮件保护],尝试登录 Apache 网站,该网站与 Linux MIT Kerberos 在同一台服务器上运行。
Apache 模块首先询问本地 Linux MIT Kerberos 是否知道该名称或领域的用户。
MIT Kerberos 发现它不负责该领域,并将请求转发到 Windows 2003 Active Directory。
Windows 2003 Active Directory 做出肯定答复并将此信息提供给 Linux MIT Kerberos,后者又将此信息告知 Apache 模块,Apache 模块授予用户访问其文件的权限。
以下是该情况的图片:
我读过的有关此问题的文档通常与此问题不同:
一些人讨论将 MIT Kerberos 与 Active Directory 连接起来以访问 Active Directory 服务器上的资源;
另一个则使用该链接向 MIT Kerberos 验证 Windows 用户身份通过Windows 2003 Active Directory。(我的问题恰恰相反。)
所以我的问题可以归结为:
是否可以让 Linux MIT Kerberos 服务器传递对 Active Directory 领域的请求,然后让其接收答复并将其发送给请求服务?(尽管如果请求服务和 Windows 2003 Active Directory 直接通信则没有问题。)
非常感谢您的建议和建设性批评。:)
后续编辑
我遇到了一些问题。我已成功配置 mod_auth_kerb 与 MIT Kerberos(在我的情况下为 EINDWERK.LAN)进行协商,如果我在kinit
Ubuntu 上获取本地 MIT Kerberos 的票证,我就可以浏览 Apache 网络服务器而无需登录。
但是,如果我从 Active Directory 服务器(在我的情况下是 WINDOWS.LAN)获取票证并浏览 Apache Web 服务器,则会收到登录提示。通过 Wireshark 查看数据包,似乎 Apache Web 服务器错误地尝试将 EINDWERK.LAN 的 TGT 用于 WINDOWS.LAN。
我已经上传了以下 Wireshark 输出:
A
kinit
代表 Active Directory 用户“测试员”([电子邮件保护]),成功(忽略 KRB5KDC_ERR_PREAUTH_REQUIRED,这里没有预认证)访问一次 Apache 网络服务器,您就会发现它出了问题。[关联]
编辑:是的,它总是尝试使用 TGT 对 EINDWERK.LAN 进行身份验证。我将尝试在 AD 和 MIT Kerberos 之间建立信任,看看是否能解决这个问题。
编辑2:好的,通过创建信任(以下是教程),一切似乎都检查正确,但我不得不强制对来自 Active Directory 的票证进行 rc4-hmac 加密,而 Apache HTTP 服务则以 des3-cbc-sha1 加密。有人知道如何删除主体并使用特定加密来加密其密钥吗?
答案1
您可以在 Linux 上的文件中设置多个领域/etc/krb5.conf
。请参阅MIT Kerberos 文档的领域部分。您可以在那里配置您的 Windows 领域,并且以属于该领域的主体登录的用户将根据您的 Windows 2003 Active Directory 进行身份验证。
然后你只需要设置 Apachemod_auth_kerb并确保设置KrbAuthRealms
配置变量以包含您希望能够通过 Apache 进行身份验证的所有领域。
除非我遗漏了什么,否则在使用多领域 Kerberos 配置时,这种配置并不复杂,而且是相当标准的做法。
答案2
好的,通过重新创建我的 Kerberos 数据库并添加每个可用 enctype 的主体(aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3),然后将 HTTP/link.to.website@REALM 导出到 apache 的密钥表,Active Directory 用户现在也可以登录了。
以下是添加具有每个单独编码的主体并将其导出到密钥表的示例:
addprinc -e "aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3" HTTP/www.eindwerk.lan
ktadd -e "aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3" -kt /etc/apache2/apache.keytab HTTP/www.eindwerk.lan
编辑:好的,这一切似乎都正常工作,只是 Internet Explorer 总是在第一次尝试时尝试获取 HTTP/[TRUSTED_DOMAIN_NAME_IN_WIN_2003] 的票证。在我的例子中,它被转换为“HTTP/EINDWERK.LAN”,而它应该是“HTTP/NS.EINDWERK.LAN”。
我还注意到,尝试更改信任的域名[图像]完全和绝对地破坏任何跨领域身份验证:TGT 已正确交换,但当您的本地 Linux KDC 尝试实际使用该票证时,它发现它无法解密,并抛出“PROCESS_TGS:authtime 0,对于 HTTP/[电子邮件保护],KDC 日志中出现“条目中没有匹配的密钥”错误。出现这种情况的原因很可能是许多加密机制将领域和用户名作为盐,因此域名确实需要正确设置。