我有一个电子邮件服务器设置为使用 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 中找到经过身份验证的用户,身份验证查找 id=345505793(client-pid=30121 client-id=1)
dovecot:auth:错误:密码文件([电子邮件保护],93.184.216.34,): 在 userdb 中未找到用户
我尝试了很多变体,阅读了 Dovecot Wiki 的许多页面,包括验证数据库/密码文件,但我似乎无法正确解释该文档。
我如何将我的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
}
答案1
只是为了补充你的答案,你只需要二密码字段后面的冒号用于输入要输入的default_values
内容。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
-------------------
[email protected]:{SHA512}longPasswordHash::
验证doveadm
还给出了主文件夹:
$ doveadm user [email protected]
field value
uid 5000
gid 5000
home /srv/vmail/[email protected]
mail maildir:/srv/vmail/[email protected]/Maildir
答案2
我错误地认为除user
和之外的其他字段password
是可选的,因为default_fields
会处理它们。
实际上,文档州(重点是我的)
[密码文件]格式如下:
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 [email protected]