错误的搜索过滤器——postfix、OpenLDAP、Saslauthd

错误的搜索过滤器——postfix、OpenLDAP、Saslauthd

我正在尝试在 Debian Jessie 上设置邮件服务器,但遇到了一个令我头疼的问题。

尝试通过 saslauthd 命令访问 OpenLDAP 时

testsaslauthd -u user1 -p user1pw -f /var/spool/postfix/var/run/saslauthd/mux

我在 auth.log 中收到以下错误

Apr 17 10:36:50 debmailserv saslauthd[1661]: user ldap_search_st() failed: Bad search filter
Apr 17 10:36:50 debmailserv saslauthd[1661]: Retrying authentication
Apr 17 10:36:50 debmailserv saslauthd[1661]: user ldap_search_st() failed: Bad search filter
Apr 17 10:36:50 debmailserv saslauthd[1661]: Authentication failed for user1: Retry condition (ldap server connection reset or broken) (-3)
Apr 17 10:36:50 debmailserv saslauthd[1661]: do_auth         : auth failure: [user=user1] [service=imap] [realm=] [mech=ldap] [reason=Unknown]

但是如果我使用 saslauthd.conf 中使用的相同搜索过滤器,使用以下 ldapsearch,它可以正常工作。

ldapsearch -D "uid=saslauthd,ou=services,dc=example,dc=com" -w saslauthdpw \
  -p 389 -h 127.0.0.1 -b "ou=people,dc=example,dc=com" \
  -s sub "(&(uid=user1)(mailEnabled=TRUE))"

我的 saslauthd.conf 如下所示

# Server
ldap_servers: ldap://127.0.0.1/

# Identity
ldap_bind_dn: uid=saslauthd,ou=services,dc=example,dc=com
ldap_bind_pw: saslauthdpw
ldap_auth_method: bind

# Connection
ldap_version: 3
ldap_timeout: 10
ldap_time_limit: 10
ldap_referrals: yes

# Search
ldap_scope: sub
ldap_search_base: ou=people,dc=example,dc=com
ldap_filter: (&(uid=%u)(mailEnabled=TRUE))

# SSL
ldap_ssl: no
ldap_starttls: no

如果我注释掉 ldap_filter,则 testsaslauth 可以正常工作。

任何指点都将不胜感激!

答案1

我今天也遇到了同样的错误。通过使用 wireshark 检查 saslauthd 和 LDAP 服务器之间的对话,我能够确定两件可能对您有帮助的事情……

  1. 默认过滤器似乎是 (uid=%u)

  2. saslauthd 的查询将结果的大小限制为 1 条记录。

在我的例子中,搜索 uid=fred 会从 LDAP 服务器返回两条记录。

相关内容