由于用户有多个 UID,因此无法通过 LDAP 进行身份验证

由于用户有多个 UID,因此无法通过 LDAP 进行身份验证

从 SLES11 升级到 SLES 12 我必须用 dovecot 替换正在运行的 Cyrus 邮件服务器。不幸的是,我无法通过 LDAP 进行身份验证(这对 Cyrus 来说不是问题):

我的 LDAP 用户有两个uid属性。通过 IMAP 进行身份验证时,dovecot 检测到 ( Warning: ldap(*uid*,*IP*,<*SID*>): Multiple values found for '*uid*', using '*uid2*')。

虽然这不应该是问题,但身份验证失败并且没有进一步的消息。如何在不更改 LDAP 用户的情况下进行身份验证? (在 UNIX/PAM 中我可以使用任一 uid 登录)

这是我的/etc/dovecot/dovecot-ldap.conf.ext(为简洁起见,删除了大多数评论,并且实际域已更改(无论如何都无法访问)):

# This file is commonly accessed via passdb {} or userdb {} section in
# conf.d/auth-ldap.conf.ext
hosts = ds2.domain.org ds1.domain.org
tls = yes
tls_require_cert = demand
debug_level = 0
auth_bind_userdn = uid=%u,ou=people,dc=domain,dc=org
ldap_version = 3
base = ou=people,dc=domain,dc=org
scope = onelevel

# User attributes are given in LDAP-name=dovecot-internal-name list. The
# internal names are:
#   uid - System UID
#   gid - System GID
#   home - Home directory
#   mail - Mail location
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid

# Filter for user lookup. Some variables can be used (see
# http://wiki2.dovecot.org/Variables for full list):
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if user there's no domain
user_filter = (&(objectClass=posixAccount)(uid=%n))
pass_attrs = uid=%n,userPassword=password
pass_filter = (&(objectClass=posixAccount)(uid=%u))
iterate_attrs = uid=user
iterate_filter = (objectClass=posixAccount)
default_pass_scheme = SSHA

所以恕我直言,需要一种方法让 dovecot 继续使用用于查询 userdb 和 passdb 的用户名。相反,它继续使用从 LDAP 返回的值。

答案1

为什么你有多个uid属性值?

海事组织你不应该这样做。

例如在鸽舍config 中的一些路径名是从用户名派生的。因此,dovecot 无法从 LDAP 搜索结果中可靠地确定要使用的用户名。

因为属性类型描述为uid不强制执行SINGLE-VALUE应将属性限制为一个值。例如,使用 OpenLDAP,您可以在 slapd.conf 中设置(请参阅slapo约束):

constraint_attribute uid count 1

如果您已经拥有多个uid您应该清理您的数据,因为您肯定也会在使用其他支持 LDAP 的软件时遇到麻烦。

相关内容