我使用mod_auth_kerb &Apache HTTPD通过Kerberos服务器对网站用户进行身份验证。我在Apache错误日志中收到一个奇怪的错误消息。(请注意,出于安全原因,我在这篇文章中更改了主体,但格式保持不变)。打开Apache的调试级输出允许我获得更多信息的日志:
[debug] src/mod_auth_kerb.c(1932): [client x.x.x.x] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[debug] src/mod_auth_kerb.c(1277): [client x.x.x.x] Acquiring creds for HTTP/kerberos_server.example.com@REALM.EXAMPLE.COM
[debug] src/mod_auth_kerb.c(1470): [client x.x.x.x] Credentials cache FILE:/tmp/krb5cc_48 not found, create one
[error] [client x.x.x.x] Could not parse principal HTTP/kerberos_server.example.com@REALM.EXAMPLE.COM/server_hostname: Malformed representation of principal (-1765328250)
[debug] src/mod_auth_kerb.c(1598): [client x.x.x.x] Failed to obtain credentials for s4u2proxy
[debug] src/mod_auth_kerb.c(1137): [client x.x.x.x] GSS-API major_status:000d0000, minor_status:0000000d
[error] [client x.x.x.x] gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information (, Permission denied)
我想问题是在主体结束时的"/server_hostname"。在我的Kerberos keytab文件中,主体被列为HTTP/kerberos_server.example.com@EXAMPLE.COM
。我如何更改提交给mod_auth_kerb的主体?或者是否有其他方法来调和这个解析错误?
原来是文件系统权限问题。keytab由root:root拥有,并且权限被设置为仅为所有者(0600)读/写。因此,Apache HTTPD无法访问keytab文件。我仍然不知道mod_auth_kerb是如何提出的上下文启动器的原则,它是。但是,现在keytab可以被Apache读取,一切都正常工作。