Dovecot 虚拟用户未通过身份验证

Dovecot 虚拟用户未通过身份验证

我们有一个标准的 Postfix/Dovecot 安装,可以与真实用户完美协作,但无法弄清楚如何添加虚拟用户,所有虚拟用户登录尝试都会因身份验证错误而失败。

以下是配置文件的片段: /etc/postfix/main.cf:

virtual_mailbox_domains =  virtualexample.com
virtual_mailbox_base = /var/spool/vhosts
virtual_mailbox_recipients = hash:/etc/postfix/virtual_mailbox_recipients

/etc/dovecot/dovecot.conf: !include conf.d/*.conf

/etc/dovecot/conf.d/10-auth.conf auth_mechanisms = cram-md5 digest-md5 plain passdb { driver = passwd-file # Path for passwd-file. Also set the default password scheme. args = scheme=cram-md5 /etc/cram-md5.pwd }

/etc/cram-md5.pwd [email protected]:{MD5}$1$uIMvzy92$9Xt67B/qw4u6txkkxzne80

这是尝试登录时日志中的一段摘录:

auth: Debug: Loading modules from directory: /usr/lib64/dovecot/auth auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libauthdb_ldap.so auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_sqlite.so auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libmech_gssapi.so auth: Debug: passwd-file /etc/cram-md5.pwd: Read 1 users auth: Debug: auth client connected (pid=21990) auth: Debug: client in: AUTH#0111#011CRAM-MD5#011service=imap#011lip=1.1.1.1#011rip=2.2.2.2#011lport=143#011rport=51774 auth: Debug: client out: CONT#0111#011PDI1Njc0NjQ1NzQ3MTY0NTkuMTM0MTIxNzkwN0BncDM+ auth: Debug: client in: CONT auth: Debug: passwd-file([email protected],2.2.2.2): lookup: [email protected] file=/etc/cram-md5.pwd auth: Debug: client out: OK#0111#[email protected] auth: Debug: master in: REQUEST#0111630404609#01121990#0111#011b66b5f46b520a08e1d19d3d249be7073 auth: Debug: passwd([email protected],2.2.2.2): lookup auth: passwd([email protected],2.2.2.2): unknown user auth: Error: userdb([email protected],2.2.2.2): user not found from userdb passwd auth: Debug: master out: NOTFOUND#0111630404609 imap: Error: Authenticated user not found from userdb, auth lookup id=1630404609 (client-pid=21990 client-id=1) imap-login: Internal login failure (pid=21990 id=1) (auth failed, 1 attempts): user=, method=CRAM-MD5, rip=2.2.2.2, lip=1.1.1.1, mpid=21993 auth: Debug: auth client connected (pid=22010) auth: Debug: client in: AUTH#0111#011CRAM-MD5#011service=imap#011lip=1.1.1.1#011rip=2.2.2.2#011lport=143#011rport=51775 auth: Debug: client out: CONT#0111#011PDcxMDkwNDY1NTQzODUzMDkuMTM0MTIxNzkyOEBncDM+ auth: Debug: client in: CONT auth: Debug: passwd-file([email protected],2.2.2.2): lookup: [email protected] file=/etc/cram-md5.pwd auth: Debug: client out: OK#0111#[email protected] auth: Debug: master in: REQUEST#011343539713#01122010#0111#011e47b1345784e2845d59e794afa9a6bbe auth: Debug: passwd([email protected],2.2.2.2): lookup auth: passwd([email protected],2.2.2.2): unknown user auth: Error: userdb([email protected],2.2.2.2): user not found from userdb passwd auth: Debug: master out: NOTFOUND#011343539713 imap: Error: Authenticated user not found from userdb, auth lookup id=343539713 (client-pid=22010 client-id=1) imap-login: Internal login failure (pid=22010 id=1) (auth failed, 1 attempts): user=, method=CRAM-MD5, rip=2.2.2.2, lip=1.1.1.1, mpid=22011

尽管日志表明 Dovecot 正在使用 /etc/cram-md5.pwd 文件并且用户在同一个文件中配置,但用户查找似乎不起作用。

当然,有几十个使用 Dovecot 虚拟用户的例子,但我们发现的所有例子要么引用 Dovecot 1.x(我们使用的是 2.x),要么只使用虚拟用户(我们必须使用真实用户和虚拟用户),要么想要使用 MySQL db,我们需要使用文本文件。

dovecot.org 上的示例很好,但它们没有提供如何在不使用 MYSQL 的情况下结合真实用户和虚拟用户的示例。

如果能得到一些关于我们哪里做错了的提示,我们将非常感激。 编辑

配置中缺少的主要部分是 /etc/dovecot/conf.d/10-auth.conf 文件中缺少“userdb”部分。现在看起来像这样:

passdb { driver = passwd-file # Path for passwd-file. Also set the default password scheme. args = scheme=cram-md5 /etc/cram-md5.pwd } userdb { driver=static args = uid=vmail gid=vmail home=/var/spool/vhosts/%d/%n /etc/dovecot/userdb }

还创建了新的用户和组“vmail”,并赋予其虚拟用户“主”目录的所有权。

这些更改已完成大部分工作,我们现在可以向虚拟用户发送邮件,但遗憾的是缺少与真实用户相关的内容,因为系统现在在错误的地方查找他们的电子邮件,所以他们全部消失了。不过,我们将为该主题创建一个新问题,因为这是一个相关问题,真实用户和虚拟用户,但不再涉及身份验证。

答案1

我第一眼注意到的是,你忘记在用户名和密码之间加冒号了/etc/cram-md5.pwd文件。这里您可能会找到有关文件格式以及如何生成密码的更多信息。

编辑 :此外,你的用户密码似乎是使用 MD5 方案加密的,但实际上Dovecot wiki 中提到然而"if you're going to use CRAM-MD5 authentication, the password needs to be stored in either PLAIN or CRAM-MD5 scheme. If you want to allow both CRAM-MD5 and DIGEST-MD5, the password must be stored in plaintext.",我不确定这是否是导致“未找到用户”问题。

相关内容