Email-Server

Dovecot 從靜態遷移到 passwd-file userdb 驅動程序

  • November 15, 2020

我有一個電子郵件伺服器設置為使用 dovecot 和虛擬使用者:

passdb {
 driver = passwd-file
 args = username_format=%n /etc/vmail/%d/users
}

userdb {
 driver = static
 args = uid=109 gid=111 home=/home/vmail/%d/%n
}

現在我需要為一些使用者設置儲存配額。顯然這對驅動程序來說是不可能的static,所以我想最簡單的啟用它的方法是切換到passwd-file. 但是我很難讓它真正發揮作用。

使用與passdb上述相同的方法和

userdb {
 driver = passwd-file
 args = username_format=%n /etc/vmail/%d/users
 default_fields = uid=vmail gid=vmail home=/home/vmail/%d/%n
}

93.184.216.34 我收到以下錯誤:

dovecot:imap:錯誤:未從 userdb 中找到經過身份驗證的使用者,auth 查找 id=345505793(client-pid=30121 client-id=1)

dovecot: auth: 錯誤: passwd-file(username@example.org,93.184.216.34,): user not found from userdb

我嘗試了許多變體並閱讀了 dovecot wiki 的許多頁面,包括AuthDatabase/PasswdFile,但我似乎無法正確解釋文件。

如何將我的static配置轉換為passwd-file修改最少的配置?

/etc/vmail/%d/users文件是標準格式

user:{SHA512}…

這是dovecot userdb這些設置的輸出:

userdb {
 args = username_format=%n /etc/vmail/%d/users
 auth_verbose = default
 default_fields = uid=vmail gid=vmail home=/home/vmail/%d/%n
 driver = passwd-file
 name = 
 override_fields = 
 result_failure = continue
 result_internalfail = continue
 result_success = return-ok
 skip = never
}

我錯誤地認為除了user和之外的欄位password是可選的,因為default_fields會照顧它們。

實際上,文件狀態(強調我的)

$$ The password file is $$採用以下格式: user:password:uid:gid:(gecos):home:(shell):extra_fields

對於密碼數據庫,只有使用者和密碼欄位就足夠了。對於使用者數據庫,您還需要設置 uid、gid,最好還設置 home(請參閱 VirtualUsers)。Dovecot 未使用 (gecos) 和 (shell) 欄位。

所以這些欄位實際上是強制性的。但由於它們已經由 設置default_fields,它們可以為空:

user:{SHA512}pwd:::

我是偶然想到的,因為唯一的工作帳戶是我正在測試配額的那個(使用每個使用者userdb_quota_rule的額外欄位)……

doveadm user user@example.org對於調試此問題也非常有用。

只是為了補充您的答案,您只需要在密碼欄位後添加兩個冒號即可獲取default_valuesin userdb

/etc/dovecot/local.conf
-----------------------
passdb { 
 driver = passwd-file
 args = scheme=CRYPT username_format=%u /etc/dovecot/passwd
}

userdb {
   driver = passwd-file
   args = username_format=%u /etc/dovecot/passwd
   default_fields = uid=vmail gid=vmail home=/srv/vmail/%u
#    driver = static
#    args = uid=vmail gid=vmail home=/srv/vmail/%u
}
/etc/dovecot/passwd
-------------------
user@example.com:{SHA512}longPasswordHash::

驗證doveadm也給出了主文件夾:

$ doveadm user user@example.com
field   value
uid     5000
gid     5000
home    /srv/vmail/user@example.com
mail    maildir:/srv/vmail/user@example.com/Maildir

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