我遇到了FreeBSD(8.2-STABLE)上的OpenLDAP使用Kerberos票证进行身份validation的一些问题。 我希望我的脑子有毛病,所以请随时告诉我,我错过了一些明显的事情。
这里是事情的地方:
Kerberos工作得很好。
我可以使用kinit获取凭证,并且可以使用这些凭证进行身份validation(例如,用于ssh或telnetlogin)。
OpenLDAP已安装并与基本身份validation配合使用。
slapd显然与SASL库链接; ldd .../slapd报告:
libsasl2.so.2 => /usr/local/lib/libsasl2.so.2 (0x800d07000)
存在/usr/local/lib/sasl2/slapd.conf,内容如下:
mech_list: GSSAPI
支持GSSAPIauthentication的slapd报告:
$ ldapsearch -x -b '' -s base supportedSASLMechanisms dn: supportedSASLMechanisms: GSSAPI
存在/etc/krb5.keytab其中包含host/<myhostname>和ldap/<myhostname> 。
示例SASL服务器/客户端似乎与gssapi身份validation正常工作:
# server -p 2222 -s ldap -m gssapi
其次是:
# client -p 2222 -s ldap -m gssapi
最终导致:
successful authentication
但是…
我一直无法让slapd接受GSSAPIauthentication。 简单地尝试使用有效的Kerberos票证运行ldapwhoami导致以下错误:
SASL/GSSAPI authentication started ldap_sasl_interactive_bind_s: Other (eg, implementation specific) error (80) additional info: SASL(-1): generic failure: GSSAPI Error: No credentials were supplied, or the credentials were unavailable or inaccessible. (unknown mech-code 0 for mech unknown)
slapdlogging相同的错误。 我在这里打了一堵墙。 甚至打开各种debuggingslapd不提供任何有用的东西。 帮帮我?
更新 :只是为了踢我决定尝试在Linux(CentOS 5)监狱里设置OpenLDAP,看看这个行为是否有任何不同。 在重buildOpenLDAP软件包(FreeBSD的Linux支持不包括epoll()系统调用)后,它给了我一些似乎更有用的错误消息(关于缺lessKerberos主体)。 至less似乎是正确执行GSSAPI协商。 所以看起来这是一个FreeBSD的问题…也许? 希望从那里有人的投入。
而且……神秘地它开始工作。 为了logging,这似乎是一个可重复的过程:
ldap/...主体。 确保slapd能够读取密钥表文件。 最简单的机制是:
chgrp ldap /etc/krb5.keytab chmod g+r /etc/krb5.keytab
sasl-host , sasl-realm和sasl-regexp 。 /usr/local/etc/openldap/ldap.conf为BASE和URIconfiguration合适的值。 通过获取Kerberos票证然后运行ldapwhoami -Y GSSAPI 。
我有完全相同的问题,最后发现这是因为我已经在slapd.conf中设置了sasl-host作为kerberos服务器的主机名。
当我将sasl-host更改为ldap主机名(例如sasl-host ldap.example.com)时,它工作正常。