我有一个网站运行在Linux计算机上使用Apache。我使用mod_auth_kerb对服务器进行单点Kerberos身份验证。
为了使Kerberos正确工作,我在Active中创建了一个名为dummy的服务帐户。
我使用以下命令在Windows服务器上使用ktpass.exe为Linux服务器生成了一个keytab:
ktpass /out C:\krb5.keytab /princ HTTP/example.com@REALM.EXAMPLE.COM /mapuser dummy@REALM.EXAMPLE.COM /crypto RC4-HMAC-NT /ptype KRB5_NT_PRINCIPAL /pass xxxxxxxxx
我可以使用以下命令从Linux服务器成功地获得票证:
kinit -k -t /path/to/keytab HTTP/example.com@REALM.EXAMPLE.COM
..。然后用klist查看机票。
我还用以下Kerberos属性配置了我的web服务器:
<Directory />
AuthType Kerberos
AuthName "Example.com Kerberos domain"
KrbMethodK5Passwd Off
KrbAuthRealms EXAMPLE.COM
KrbServiceName HTTP/example.com@REALM.EXAMPLE.COM
Krb5KeyTab /path/to/keytab
Require valid-user
SSLRequireSSL
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>但是,当我尝试登录到网站(从另一个用户名为“Jeff”的桌面)时,我的Kerberos凭据不会自动被web服务器接受。它应该允许我在那之后立即进入,但它没有。我从mod_auth_kerb日志中获得的唯一信息是:
kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
但是,当我将mod_auth_kerb设置KrbMethodK5Passwd更改为On时,会显示更多信息:
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(1939): [client xxx.xxx.xxx.xxx] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(1031): [client xxx.xxx.xxx.xxx] Using HTTP/example.com@REALM.EXAMPLE.COM as server principal for password verification
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(735): [client xxx.xxx.xxx.xxx] Trying to get TGT for user jeff@REALM.EXAMPLE.COM
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(645): [client xxx.xxx.xxx.xxx] Trying to verify authenticity of KDC using principal HTTP/example.com@REALM.EXAMPLE.COM
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(1110): [client xxx.xxx.xxx.xxx] kerb_authenticate_user_krb5pwd ret=0 user=jeff@REALM.EXAMPLE.COM authtype=Basic我遗漏了什么?我已经学习了很多在线教程,并且找不到Kerberos凭证不允许访问的原因。
发布于 2013-10-21 22:19:01
在深入研究了更多的日志信息之后,我发现客户机没有正确地响应服务器的票证。您可以在客户端机器上判断出问题的方法是,您将看到Apache服务器的错误消息“验证krb5凭据失败:在Kerberos数据库中找不到服务器”。在客户机上的/etc/krb5.conf文件中,您必须确保web域名映射到正确的Kerberos领域:
[domain_realm]
example.com = REALM.EXAMPLE.COM
.example.com = REALM.EXAMPLE.COM否则,客户端将拒绝服务器,因为Kerberos票证可能只来自显式允许的领域。
我希望这个信息能帮助到其他人!
https://serverfault.com/questions/547110
复制相似问题