ユーザーに複数のUIDがあるため、LDAPを介して認証できません。

ユーザーに複数のUIDがあるため、LDAPを介して認証できません。

SLES11からSLES 12にアップグレードするには、実行中のCyrusメールサーバーをハトの場所に置き換える必要がありました。残念ながら、LDAPを介して認証することはできません(Cyrusでは問題ではありません)。

私のLDAPユーザーには2つのuid属性があります。 IMAPを介して認証すると、ハトフィールド検出()が発生しました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

そのため、IMHO、dovecotがuserdb、およびpassdbを照会するために使用されるユーザー名を引き続き使用できる方法が必要です。代わりに、LDAPから返された値を引き続き使用します。

ベストアンサー1

なぜ複数ありますか?UID属性値?

IMO これをしないでください。

例えばピジョンロフト構成の一部のパス名は、ユーザー名から派生します。したがって、dovecot は、LDAP 検索結果で使用するユーザー名を確実に決定できません。

これは属性タイプが次のように記述されているためです。UIDSINGLE-VALUE属性を1つの値に制限する必要はありません。たとえば、OpenLDAPではslapd.confで設定できます(参照:スラフォ制約):

constraint_attribute uid count 1

既に複数ある場合UID他のLDAPサポートソフトウェアを使用しても問題が発生するため、データをクリーンアップする必要があります。

おすすめ記事