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サポートソフトウェアを使用しても問題が発生するため、データをクリーンアップする必要があります。