情況:一台前端伺服器運行 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'
有什麼指點嗎?