我在 FreeBSD (8.2-STABLE) 上使用 OpenLDAP 使用 Kerberos 票证进行身份验证时遇到了一些问题。我希望只是我的大脑出了问题,所以请随时告诉我我错过了一些显而易见的事情。
事情是这样的:
Kerberos 运行良好。
我可以使用 获取凭证
kinit
,并且可以使用这些凭证进行身份验证(例如,用于 ssh 或 telnet 登录)。OpenLDAP 已安装并使用基本身份验证。
slapd 显然与 SASL 库相关;
ldd .../slapd
报告:libsasl2.so.2 => /usr/local/lib/libsasl2.so.2 (0x800d07000)
存在 /usr/local/lib/sasl2/slapd.conf,其内容如下:
mech_list: GSSAPI
slapd 报告支持 GSSAPI 身份验证:
$ ldapsearch -x -b '' -s base supportedSASLMechanisms dn: supportedSASLMechanisms: GSSAPI
存在和 的
/etc/krb5.keytab
键。host/<myhostname>
ldap/<myhostname>
示例 SASL 服务器/客户端似乎可以与 gssapi 身份验证配合使用:
# server -p 2222 -s ldap -m gssapi
其次是:
# client -p 2222 -s ldap -m gssapi
最终导致:
successful authentication
但是...
我无法让 slapd 接受 GSSAPI 身份验证。只需尝试ldapwhoami
使用有效的 Kerberos 票证运行,就会出现以下错误:
SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Other (e.g., 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)
记录了相同的错误slapd
。我在这里遇到了麻烦;即使打开了各种调试功能,slapd 也没有提供任何有用的信息。帮忙?
更新:我决定尝试在 Linux(CentOS 5)监狱内设置 OpenLDAP,看看行为是否有任何不同。重建 OpenLDAP 软件包后(FreeBSD 的 Linux 支持不包括系统epoll()
调用),它向我提供了似乎更有用的错误消息(关于缺少 Kerberos 主体)。它至少似乎正确地执行了 GSSAPI 协商。所以看起来这是 FreeBSD 的问题...也许?希望有人能提供意见。
答案1
然后……神奇的是,它开始起作用了。记录显示,这似乎是一个可重复的过程:
- 安装 security/cyrus-sasl2。
- 安装 net/openldap24-server。确保启用 SASL 支持。
- 安装 net/openlda24-client,也支持 SASL。
- 初始化 Kerberos手册. 确保添加了适当的
ldap/...
主体。 确保 slapd 能够读取 keytab 文件。最简单的机制是:
chgrp ldap /etc/krb5.keytab chmod g+r /etc/krb5.keytab
- 为 SASL 配置 slapd。您可能需要设置
sasl-host
、sasl-realm
和sasl-regexp
。 - 中的
BASE
和配置适当的值。URI
/usr/local/etc/openldap/ldap.conf
通过获取 Kerberos 票证然后运行进行测试ldapwhoami -Y GSSAPI
。
答案2
我遇到了完全相同的问题,最后发现这是因为我将 slapd.conf 中的 sasl-host 设置为 kerberos 服务器主机名。
当我将 sasl-host 更改为 ldap 主机名(例如 sasl-host ldap.example.com)时,它可以正常工作。