FreeBSD:OpenLDAP、SASL 和 GSSAPI

FreeBSD:OpenLDAP、SASL 和 GSSAPI

我在 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-hostsasl-realmsasl-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)时,它可以正常工作。

相关内容