使用username @ domain格式时,Dovecot用户查找失败


14

我在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用户查找webmaster@myregisteredname.com失败,如下所示:

# doveadm user webmaster@myregisteredname.com
userdb lookup: user webmaster@myregisteredname.com doesn't exist

这导致webmaster@myregisteredname.com的传入邮件被退回,并显示“未知用户”错误。

这是在/ var / log / maillog中记录的故障:

Apr 16 20:13:35 www dovecot: auth: passwd(webmaster@myregisteredname.com): unknown user

这是在/var/log/debug.log中记录的故障:

Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER       1       webmaster@myregisteredname.com  service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd(webmaster@myregisteredname.com): 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 webmaster@pantronx.com
doveadm(root): Error: userdb lookup(webmaster@myregisteredname.com): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster@myregisteredname.com

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

#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

Answers:


15

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

通过和失败的检查按预期进行。auth_username_format=%n在密码数据库定义起作用之前进行设置。但是该域未验证。


谢谢您的答复,但这也不起作用。我用最新结果编辑了我的问题。
cigarman 2011年

1
@科尔曼:找到了Dovecot 1.2的可行解决方案。也应该适用于Dovecot 2。请参阅编辑我的回复。在ubuntu的默认配置文件中找到了解决方案。
BillThor

13

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

auth_username_format = %n

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


3

我怀疑Dovecot 2.1要么破坏了此解决方案,要么改变了预期的行为。

我已经将相同的授权错误跟踪到userdb:

userdb {
  driver = passwd
}

当本地用户(非虚拟用户)通过exim-> lmtp接收到电子邮件时,它将包括域。定义auth_username_format =%Ln确实可以修复本地传递,但会中断虚拟传递。提供的添加args = username_format的修复程序似乎被忽略了:

userdb {
  driver = passwd
  args = username_format=%n
}

并且日志中包含警告

Apr  4 11:24:57 moe dovecot: auth: Warning: userdb passwd: Move templates args to override_fields setting

有趣的是,使用passwd-file 确实可以工作,但是auth担心passwd文件由root拥有。

userdb {
  driver = passwd-file
  args = username_format=%n /etc/passwd
}

Apr  4 11:26:12 moe dovecot: auth: Error: passwd-file /etc/passwd: User root has invalid UID '0'
Apr  4 11:26:12 moe dovecot: auth-worker(6855): Error: passwd-file /etc/passwd: User root has invalid UID '0'

1

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之间有两个空格。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.