Назад | Перейти на главную страницу

Dovecot + OpenLDAP

Я пытаюсь заставить dovecot 2.0.19 аутентифицировать пользователей через LDAP (OpenLDAP 2.4.28) и использовать Wireshark для отладки процесса. Похоже, что с базовой конфигурацией dovecot все в порядке, но она не справляется с отправкой правильного запроса на сервер LDAP. Во-первых, так выглядят мои LDAP-записи:

# ht
dn: dc=ht
objectClass: top
objectClass: dcObject
objectClass: organization
o: ip
dc: ht

# admin, ht
dn: cn=admin,dc=ht
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9cFY1b0ZZVUhack1aRTVvaUg1T3c2cytVWHV4aUNvaHI=

# people, ht
dn: ou=people,dc=ht
objectClass: organizationalUnit
objectClass: top
ou: people

# groups, ht
dn: ou=groups,dc=ht
objectClass: organizationalUnit
objectClass: top
ou: groups

# ipusers, groups, ht
dn: cn=ipusers,ou=groups,dc=ht
gidNumber: 500
cn: ipusers
objectClass: posixGroup
objectClass: top

# Max Mustermann, people, ht
dn: cn=Max Mustermann,ou=people,dc=ht
cn: Max Mustermann
givenName: Max
gidNumber: 500
homeDirectory: /home/users/mmustormann
sn: Mustermann
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
uidNumber: 1000
uid: mmustermann
userPassword:: e01ENX1ETUYxdWNEeHRxZ3h3NW5pYVhjbVlRPT0=
loginShell: /bin/bash
mail: mustorm@test.com

Сейчас я использую следующую конфигурацию голубятни:

hosts = 10.1.2.1
dn = cn=admin,dc=ht
dnpass = a
auth_bind = yes
auth_bind_userdn = uid=%u,ou=people,dc=ht
ldap_version = 3
scope = subtree
base = ou=people,dc=ht
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid      
user_filter = (&(objectClass=posixAccount)(uid=%u))
pass_attrs = uid=user,userPassword=password
pass_filter = (&(objectClass=posixAccount)(uid=%u))

Теперь, что я вижу в Wireshark:

Dovecot по какой-то причине не может пройти аутентификацию ...

Если я изменю конфигурацию следующим образом:

auth_bind = no 
#auth_bind_userdn = uid=%u,ou=people,dc=ht

Тогда я получаю следующую картину:

Он не подбирает настройку base = ou=people,dc=ht. Но что более важно, даже глядя на все дерево "<ROOT>" wholeSubTree он не может найти нужную запись.

Я в отчаянии и не знаю, как заставить это работать. Мне просто нужно, чтобы это как-то работало.

Забавное решение ... но с другой стороны, очень раздражающее. Ошибка заключалась в том, чтобы взять пример файла конфигурации dovecot-ldap.conf.ext где все закомментировано. Я ДУМАЛ, что это было закомментировано. Единственная строка без комментариев была base =. Я узнал это после двух дней пыток ...

Это причина, по которой dovecot отправил поисковый запрос с base=<ROOT>. И поэтому он не возвращает никаких результатов. И решение было закомментировать эту строку.

Актуальная конфигурация:

hosts = 10.1.2.1
dn = cn=admin,dc=ht
dnpass = a
base = ou=people,dc=ht
ldap_version = 3
scope = onelevel