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'

有什麼指點嗎?

相關內容