SLES11에서 SLES 12로 업그레이드하려면 실행 중인 Cyrus 메일 서버를 비둘기장으로 교체해야 했습니다. 안타깝게도 LDAP를 통해 인증할 수 없습니다(Cyrus에서는 문제가 되지 않음).
내 LDAP 사용자에는 두 가지 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
속성이 하나의 값으로 제한되어야 한다는 것은 강제되지 않습니다 . 예를 들어, OpenLDAP를 사용하면 slapd.conf에서 설정할 수 있습니다(참조:슬라포 제약):
constraint_attribute uid count 1
이미 여러 개가 있다면UID다른 LDAP 지원 소프트웨어를 사용하는 데에도 확실히 문제가 발생하므로 데이터를 정리해야 합니다.