Dovecot 虚拟用户和用户域映射

Dovecot 虚拟用户和用户域映射

我已经成功编译、配置并运行了具有虚拟用户功能的 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

相关内容