Dovecot:每个服务使用单独的 passdb

Dovecot:每个服务使用单独的 passdb

情况:一台前端服务器运行 Dovecot 作为 IMAP/POP3/ManageSieve 代理,后端混合使用 IMAP 服务器(Dovecot、Exchange 等)。Dovecot 的 passdb 针对包含简单用户/主机映射的 MySQL 进行查找,实际身份验证发生在后端 IMAP 服务器上。配置大致如下所述:http://wiki2.dovecot.org/PasswordDatabase/ExtraFields/Proxy

现在我想在前端服务器上添加一个 Postfix 实例,该实例监听提交端口并使用本地 Dovecot 的 UNIX 套接字通过 SASL 对用户进行身份验证。这个想法是,用户只需记住一个主机名、一个用户名和一个密码即可使用所有与邮件相关的服务。

问题在于,Dovecot 以代理模式运行,这意味着 password_query 返回 NULL 作为密码,并明确返回包含“Y”的字段“nopasswd”。因此,用户无法通过 UNIX 套接字进行身份验证。

我想做的是说服 Dovecot 对 imap/pop3/managesieve 服务使用一个 passdb,对“auth”服务使用另一个 passdb。

下面的配置片段不起作用,但它应该说明我想要实现的目标:

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'

有什么指点吗?

相关内容