我已经成功地编译、配置和运行了带有虚拟用户功能的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
我能做到这一点吗?
你好,斯托伊科
发布于 2012-04-24 12:09:51
想一想你想要什么。您希望在mail_location中包括用户的主目录。表面上看,这似乎是一个合理的请求--但您必须问-- Dovecot如何知道用户的主目录?
系统用户存储在/etc/passwd -该文件包含
username:password:uid:gid:comment:home:shell(注意:您可以将密码存储在/etc/ x中,而不是密码;或者使用*关闭帐户;注释实际上是“gecos场”)
如果Dovecot读取这个文件--它提供了用户的主目录--一旦它获得了该信息,它就可以在其他地方使用它(也就是说,它将能够使用‘~/to signify the home directory, and will set%h’)。
但是,如果您使用的是虚拟用户--而不是系统用户--基本思想之一是,并不是每个虚拟用户都必须是系统用户。在这种情况下,Dovecot无法知道与系统用户同名的虚拟用户是否真的是同一个用户(它也不能使用UID,因为可以让多个虚拟用户映射到同一个UID)。它不会假设用户数据库中提供的内容之外的任何内容。
用户数据库可以向Dovecot提供以下信息:
在您的配置中,您使用的是passwd文件--即与系统passwd文件格式相同的文件,但您已经为此目的设置了该文件(即它不是系统passwd文件)。Dovecot接受以下passwd文件格式 (并忽略gecos和shell字段):
user:password:uid:gid:(gecos):home:(shell):extra_fields您可以在每个用户的基础上覆盖某些默认值,方法是指定(空格分隔的) key=value额外字段(在大多数情况下以userdb_为前缀的键)。例如,userdb_mail=Maildir:~/mail将覆盖mail_location。
重申一下,通过使用虚拟用户(而不是使用系统passwd文件),您已经告诉Dovecot,这些用户可能与系统用户没有任何关系,所以它只会使用您提供的信息,而不考虑任何其他情况。
最后,试着回答你的问题:
mail_location中使用多个变量--这些变量是在Dovecot变量页上定义的。%h或(最好是~/ )可用于返回Dovecot从其UserDB查询中检索的主目录(并设置mail_home)。mail_location来覆盖userdb_mail。因此,基本上,如果您想使用Dovecot中的home目录,可以在userdb中设置主目录,因为它不知道您没有告诉它什么。
发布于 2012-04-24 06:06:29
根据此链接,您可以使用“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
https://serverfault.com/questions/382434
复制相似问题