我已经成功编译、配置并运行了具有虚拟用户功能的 Dovecot。
/etc/dovecot.conf
这是我的配置文件的一部分:
mail_location = maildir:/home/%d/%n/Maildir
auth default {
mechanisms = plain login
userdb passwd-file {
args = /home/%d/etc/passwd
}
passdb passwd-file {
args = /home/%d/etc/shadow
}
socket listen {
master {
path = /var/run/dovecot/auth-worker
mode = 0600
}
}
}
我遇到了一个自己无法解决的问题。有没有办法创建用户的域映射并提供用户名mail_location
?
示例: 1. 目前我有 /home/domain.com/user/Maildir 2. 我想要 /home/USER/domain.com/user/Maildir
我能以某种方式实现这个目标吗?
问候,Stojko
答案1
考虑一下你的要求。你想在 中包含用户的主目录mail_location
。从表面上看,这似乎是一个合理的要求 - 但你必须问 - Dovecot 如何知道用户的主目录?
系统用户存储在 /etc/passwd 中 - 该文件包含
username:password:uid:gid:comment:home:shell
(注意:除了密码之外,您还可以使用x
存储在 /etc/shadow 中的密码;或者*
停用该帐户;注释实际上是“gecos 字段')
如果 Dovecot 读取此文件 - 它提供了用户的主目录 - 一旦它拥有该信息,它就可以在其他地方使用它(即它将能够使用'〜/ to signify the home directory, and will set
%h'来实现相同的目的)。
但是,如果您使用的是虚拟用户(而不是系统用户),那么基本思想之一是并非每个虚拟用户都必须是系统用户。在这种情况下,Dovecot 无法知道与系统用户同名的虚拟用户是否真的是同一个用户(它也不能使用 UID,因为可能有多个虚拟用户映射到同一个 UID)。它不会假设您的用户数据库中提供的任何内容。
A用户数据库可以向 Dovecot 提供以下信息:
- uid:用户的 UID(UNIX 用户 ID),覆盖全局 mail_uid 设置。
- gid:用户的 GID(UNIX 组 ID),覆盖全局 mail_gid 设置。
- home:用户的主目录,覆盖全局 mail_home 设置。虽然不是必需的,但强烈建议虚拟用户也这样做。
- mail:邮件位置,覆盖全局 mail_location 设置。
- 在环境变量中传递给 IMAP/POP3 进程的可选额外字段。
在您的配置中,您使用的是密码文件 - 即与系统密码文件格式相同的文件,但您已为此目的设置了该文件(即它不是系统密码文件)。Dovecot 接受以下密码文件格式(并忽略 gecos 和 shell 字段):
user:password:uid:gid:(gecos):home:(shell):extra_fields
key=value
您可以通过指定(空格分隔的)额外字段(大多数情况下,键以 为前缀)来覆盖每个用户的某些默认值userdb_
。例如,userdb_mail=Maildir:~/mail
将覆盖mail_location
。
重申一下,通过使用虚拟用户(而不是使用系统密码文件),您已经告诉 Dovecot 这些用户可能与系统用户没有任何关系,因此它只会使用您提供的信息,而不假设任何其他信息。
最后,尝试回答你的问题:
- 您可以使用多个变量
mail_location
- 这些变量定义在Dovecot 的变量页面。 - 变量
%h
或最好~/
可用于返回 Dovecot 从其 UserDB 查询中检索到的主目录(并设置mail_home
) - 您应该为 UserDB 中的所有用户指定一个主目录
- 您可以
mail_location
通过从 userdb 查询返回 userdb_mail 来覆盖。
因此,基本上,如果您想在 Dovecot 中使用主目录,请在您的用户数据库中设置主目录,因为它无法知道您没有告诉它的内容。
答案2
根据此链接您可以使用“mail_location 设置中的几个变量”
%u: Full username.
%n: User part in user@domain, same as %u if there's no domain.
%d: Domain part in user@domain, empty if there's no domain.
例如。
mail_location = maildir:/home/%n/%d/%n/Maildir
应指向 /home/user/domain/user/Maildir