使用用户名@域名格式时 Dovecot 用户查找失败

使用用户名@域名格式时 Dovecot 用户查找失败

我在 FreeBSD 服务器上安装了 Dovecot v2.0.11,用户对传入电子邮件地址的查找失败,但系统用户的查找成功。

Dovecot 设置为使用系统用户,所以我的 dovecot.conf 有

 userdb {
  driver = passwd
}

passdb {
  driver = passwd
}

我已经启用了身份验证调试。

例如,我有一个名为 webmaster 的用户,使用 doveadm 用户作为“webmaster”的操作如下:

#doveadm user webmaster
userdb: webmaster
  system_groups_user: webmaster
  uid       : 1020
  gid       : 1020
  home      : /home/webmaster

但是使用 doveadm 用户查找[电子邮件保护]失败如下:

# doveadm user [email protected]
userdb lookup: user [email protected] doesn't exist

这导致收到的邮件[电子邮件保护]因“未知用户”错误而弹出。

以下是 /var/log/maillog 中记录的故障:

Apr 16 20:13:35 www dovecot: auth: passwd([email protected]): unknown user

以下是 /var/log/debug.log 中记录的故障:

Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER       1       [email protected]  service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd([email protected]): lookup
Apr 16 20:13:35 www dovecot: auth: Debug: master out: NOTFOUND  1

用户及其主目录是从另一台服务器导入的,并且用户是使用 vipw 工具设置的。我确信我在导入过程中遗漏了某些内容,没有将系统用户与 dovecot 查找“关联”。

您知道那个东西可能是什么吗?

编辑:根据 BillThor 的建议,我更新了 dovecot.conf,如下所示:

#doveconf -n passdb userdb
passdb {
  args = username_format=%n
  driver = passwd
}
userdb {
  args = username_format=%n
  driver = passwd
}

但是,现在,doveadm 用户以不同的方式失败:

#doveadm user [email protected]
doveadm(root): Error: userdb lookup([email protected]): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for [email protected]

并且,它不再适用于没有域名的用户:

#doveadm user webmaster
doveadm(root): Error: userdb lookup(webmaster): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster

当我收到上述消息时,/var/log/maillog 中的内容如下:

Apr 17 17:30:02 www dovecot: auth: Fatal: passdb passwd: Unknown setting: username_format=%u
Apr 17 17:30:02 www dovecot: master: Error: service(auth): command startup failed, throttling

答案1

使用 passdb 的 dovecot 中的用户 ID 不包含域。用户应使用的用户 ID 是本地部分,而不是完整的电子邮件地址。

通过和失败的检查均按预期工作。auth_username_format=%n密码数据库定义之前的设置确实有效。但域未经过验证。

答案2

我使用的是 Ubuntu Server 12.04,我尝试了上述解决方案。但是,我发现最简单、最容易的方法是在 10-auth.conf 中设置

auth_username_format = %n

我使用 PAM 进行身份验证,这是 Ubuntu 12.04 中的默认设置。

答案3

auth_username_format = %n

破坏同一台服务器上的虚拟域,更好的想法是使用条件(应该从 2.2.33 开始工作)

(看:https://doc.dovecot.org/configuration_manual/config_file/config_variables/

我在用着:

auth_username_format=%{if;%d;eq;hostname.startdedicated.de;%Ln;%Lu}

运行正常。但是,如果您使用的用户名是大写或大小写混合,则可以使用 %n 代替 %Ln,使用 %u 代替 %Lu。将 hostname.startdedicated.de 更改为服务器的 fqdn-hostname。

答案4

passwd-file: Unknown setting: username_format 对我来说原因是额外的空间:

passdb {
  driver = passwd-file
  args = scheme=SHA256-CRYPT **extra-space-here**username_format=%u /etc/dovecot/users
}

即在 CRYPT 和 uesrname 之间有两个空格。

相关内容