dovecot не может найти пользователя в LDAP

моя система настроена следующим образом.

smtp -> postfix -> dovecot (через LMTP) -> почтовый ящик

Сложная часть состоит в том, что аутентификация против LDAP.

Типичная запись LDAP выглядит так:

CN=Jon Doe
uid=jond
mail=jonny@example.com

Теперь происходит то, что postfix отправляет почту в dovecot. Dovecot выполняет поиск в пользовательской базе данных, но на основе адреса электронной почты назначения, который является « jonny@example.com ».

Таким образом, LDAP ищет (uid =% u), который затем ( uid=jonny@example.com ).

Postfix отправляет это через виртуальный стек, поэтому виртуальная часть настроена следующим образом:

virtual_alias_maps = ldap:/etc/postfix/ldap/ldap-aliases.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /
virtual_mailbox_domains = ldap:/etc/postfix/ldap/virtual_domains.cf

virtual_mailbox_maps = ldap:/etc/postfix/ldap/ldap-accounts.cf
virtual_minimum_uid = 5000
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_uid_maps = static:5000

Я ожидал, что postfix использует virtual_mailbox_maps для поиска пользователя и передачи этого пользователя в LMTP, чтобы dovecot мог выполнить поиск в userdb. Поскольку postfix не знает, как это сделать, и я не нахожу параметр virtual_map *, который мог бы это сделать, я не знаю, какой будет правильная процедура.

Должен ли postfix искать пользователя через LDAP и отправлять его на LMTP? Или LMTP должен выполнить поиск на основе адреса электронной почты получателя?

РЕДАКТИРОВАТЬ: Я должен добавить, что часть IMAP в dovecot работает нормально, когда я подключаюсь к почтовому клиенту для получения почты. Он правильно ищет все на основе моего имени пользователя, которое является uid. Это, конечно, возможно, поскольку, когда я вхожу в IMAP, я передаю свой uid, поэтому его легко использовать для dovecot.

Мне как-то нужно сказать dovecot, чтобы он делал это по-другому, когда postfix его использует ...

/etc/dovecot/dovecot-ldap.conf.ext

hosts = localhost
dn = cn=linagent,ou=people,dc=example,dc=org
dnpass = SECRET
tls = no
auth_bind = yes
base = dc=example,dc=org
deref = never
scope = subtree
user_attrs = \
  =home=%{ldap:homeDirectory}, \
  =uid=5000, \
  =gid=5000, \
  =mail=maildir:%{ldap:mailMessageStore}
user_filter = (&(objectClass=inetOrgPerson)(uid=%u))
pass_attrs = uid=user,userPassword=password
pass_filter = (&(objectClass=inetOrgPerson)(uid=%u))
0
задан 6 September 2018 в 11:57
2 ответа

Не могли бы вы использовать переменную% n вместо% u?
Проверьте это: https://wiki.dovecot.org/Variables

А это отрывок из https://wiki2.dovecot.org/AuthDatabase/LDAP/Userdb

Переменные и домены

Имена пользователей и домены можно отличить с помощью переменных% n и% d. Они разделяют предыдущее имя пользователя на символ «@». Предыдущее имя пользователя:
- Для LMTP это будет user @ hostname, где имя хоста зависит, например, от конфигурация Postfix. - Для IMAP это будет то, что база данных паролей обозначила в качестве имени пользователя. Если в базе данных паролей (LDAP) указано «user_attrs = = user =% n», то доменная часть имени входа будет удалена базой паролей. UserDB не увидит никакой части домена, т.е.% n и% u - это то же самое для UserDB.

Thomas

0
ответ дан 24 November 2019 в 01:59

Я не знаю, должно ли это быть так, но я изменил конфигурацию ldap в dovecot следующим образом:

user_filter = (&(objectClass=inetOrgPerson)(|(uid=%u)(mail=%u)))
pass_filter = (&(objectClass=inetOrgPerson)(|(uid=%u)(mail=%u)))

Часть, где uid =% u, мне нужна для аутентификации из почтовый клиент, потому что почтовый клиент входит в систему через UID (имя пользователя).

Часть, где mail =% u мне нужна для получения LMTP от postfix и postfix, просто знает почту получателя.

Поскольку uid никогда не является почтовым адресом Думаю, это решение будет работать и не создавать конфликтов. Для меня это тоже имеет смысл, но мне интересно, почему Courier может справиться с этим более элегантно.

Я не буду разрешать этот вопрос, так как считаю, что это не тот способ, который был разработан.

0
ответ дан 24 November 2019 в 01:59

Теги

Похожие вопросы