情况:一台前端服务器运行Dovecot作为IMAP / POP3 / ManageSieve代理服务器,后端是IMAP服务器(Dovecot,Exchange,…)的混合体。 Dovecot的passdb对包含简单用户/主机映射的MySQL进行查询,实际的身份validation发生在后端IMAP服务器上。 configuration或多或less如下所述: http : //wiki2.dovecot.org/PasswordDatabase/ExtraFields/Proxy
现在我想在前端服务器上添加一个Postfix实例,它侦听提交端口,并使用本地Dovecot的UNIX套接字通过SASL对用户进行身份validation。 这个想法是,用户只需要记住所有邮件相关服务的一个主机名,一个用户名和一个密码。
问题是Dovecot正在以代理模式运行,这意味着password_query返回NULL作为密码,并显式返回包含“Y”的字段“nopasswd”。 因此,用户无法对UNIX套接字进行身份validation。
我想我想要做的是说服Dovecot为imap / pop3 / managingieve服务使用一个passdb,为“auth”服务使用不同的passdb。
下面的configuration代码不起作用,但它应该说明我想实现的:
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'
任何指针?