Ситуация: один фронтальный сервер, на котором Dovecot работает как прокси IMAP/POP3/ManageSieve, смесь серверов IMAP (Dovecot, Exchange, ...) на бэкэнде. Passdb Dovecot выполняет поиск в MySQL, который содержит простое сопоставление пользователя/хоста, фактическая аутентификация происходит на бэкэнд-серверах IMAP. Конфигурация более или менее такая, как описано здесь:http://wiki2.dovecot.org/PasswordDatabase/ExtraFields/Proxy
Теперь я хотел бы добавить экземпляр Postfix на фронтальный сервер, который прослушивает порт отправки и аутентифицирует пользователей через SASL, используя локальный сокет Dovecot UNIX. Идея заключается в том, что пользователю нужно запомнить только одно имя хоста, одно имя пользователя и один пароль для всех почтовых служб.
Проблема в том, что Dovecot работает в режиме прокси, а это значит, что password_query возвращает NULL в качестве пароля и явно возвращает поле «nopasswd», содержащее «Y». Таким образом, пользователи не могут аутентифицироваться с помощью сокета UNIX.
Думаю, мне нужно убедить Dovecot использовать одну базу данных passdb для служб imap/pop3/managesieve и другую для службы «auth».
Приведенный ниже фрагмент конфигурации не работает, но он должен проиллюстрировать, чего я хочу добиться:
protocols = imap pop3 sieve
service auth {
passdb sql {
driver = sql
args = /etc/dovecot/mysql-auth-sasl.conf.ext
}
unix_listener /var/spool/postfix/private/auth {
user = postfix
group = postfix
mode = 0666
}
}
# IMAP/POP3/ManageSieve auth against MySQL
passdb sql {
driver = sql
args = /etc/dovecot/mysql-auth-default.conf.ext
}
Пример mysql-auth-sasl.conf.ext
driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail password=somethingrandom
password_query = SELECT password AS password FROM users WHERE login = '%u'
Пример mysql-auth-default.conf.ext:
driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail password=somethingrandom
password_query = SELECT NULL AS password, 'Y' as nopassword, host, 'Y' AS proxy FROM users WHERE login = '%u'
Есть какие-нибудь указания?