Email

使用使用者名@域格式時,Dovecot 使用者查找失敗

  • May 2, 2021

我在 FreeBSD 伺服器上安裝了 Dovecot v2.0.11,使用者查找傳入電子郵件地址失敗,但查找系統使用者成功。

Dovecot 設置為使用系統使用者,所以我的 dovecot.conf 有

userdb {
 driver = passwd
}

passdb {
 driver = passwd
}

我啟用了身份驗證調試。

例如,我有一個名為 webmaster 的使用者,使用 doveadm 使用者作為“webmaster”的工作方式如下:

#doveadm user webmaster
userdb: webmaster
 system_groups_user: webmaster
 uid       : 1020
 gid       : 1020
 home      : /home/webmaster

但是使用 doveadm 使用者查找 webmaster@myregisteredname.com 失敗如下:

# doveadm user webmaster@myregisteredname.com
userdb lookup: user webmaster@myregisteredname.com doesn't exist

這會導致 webmaster@myregisteredname.com 的傳入郵件因“未知使用者”錯誤而退回。

這是 /var/log/maillog 中記錄的失敗:

Apr 16 20:13:35 www dovecot: auth: passwd(webmaster@myregisteredname.com): unknown user

這是 /var/log/debug.log 中記錄的失敗:

Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER       1       webmaster@myregisteredname.com  service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd(webmaster@myregisteredname.com): lookup
Apr 16 20:13:35 www dovecot: auth: Debug: master out: NOTFOUND  1

使用者及其主目錄是從另一台伺服器導入的,並且使用者是使用 vipw 工具設置的。我確定我在導入時遺漏了一些東西,它沒有將系統使用者與 dovecot 查找“連結”。

關於那可能是什麼的任何想法?

編輯:使用 BillThor 的建議,我更新了 dovecot.conf 如下:

#doveconf -n passdb userdb
passdb {
 args = username_format=%n
 driver = passwd
}
userdb {
 args = username_format=%n
 driver = passwd
}

但是,現在, doveadm 使用者以不同的方式失敗:

#doveadm user webmaster@pantronx.com
doveadm(root): Error: userdb lookup(webmaster@myregisteredname.com): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster@myregisteredname.com

而且,它不再適用於沒有域的使用者:

#doveadm user webmaster
doveadm(root): Error: userdb lookup(webmaster): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster

當我收到上述消息時,/var/log/maillog 中有以下內容:

Apr 17 17:30:02 www dovecot: auth: Fatal: passdb passwd: Unknown setting: username_format=%u
Apr 17 17:30:02 www dovecot: master: Error: service(auth): command startup failed, throttling

dovecot 中使用 passdb 的使用者 ID 不包括域。使用者應該使用的使用者 ID 是本地部分,而不是完整的電子郵件地址。

通過和失敗的檢查按預期工作。auth_username_format=%n在密碼數據庫定義之前設置確實有效。該域未經過驗證。

我正在使用 Ubuntu Server 12.04 並嘗試了上述解決方案。但是,我發現最簡單的方法是在 10-auth.conf 中設置

auth_username_format = %n

我使用 PAM 進行身份驗證,這是 Ubuntu 12.04 中的預設設置。

引用自:https://serverfault.com/questions/260488