我在邮件服务器(我们称之为服务器 M)上设置了 Postfix + Dovecot 守护进程组合,它支持虚拟域和用户查找到 LDAP 服务器(我们称之为服务器 D)。现在,我已经设置了 Postfix 以将邮件传递给服务器 M 上专门创建的本地用户,以保存所有虚拟用户的邮件,因此用户的邮件目录格式为 /home/vmail/<domain>/<user id>。
在这种情况下,我还设置了 Dovecot 从用户目录中获取邮件:
用户数据库静态{ args = uid=501 gid=501 主页=/home/vmail/%d/%n }
密码查询如下:
passdb ldap { 参数 = /etc/dovecot-ldap.conf }
其中引用的配置文件包含以下内容:
主机 = 服务器 M 基础 = dc=www,dc=example,dc=com ldap_version = 3 auth_bind = 是 pass_filter = (邮件=%u)
现在,此配置有效(LDAP 对象类实现了 inetOrgPerson),但是当我将 posixAccount 对象类添加到服务器 M 中的用户记录时,Dovecot 停止识别 user@domain 格式的用户。
检查邮件日志显示,Dovecot 以某种方式将用户识别为“user”而不是“user@domain”,从而导致我的 userdb 指令返回 /home/vmail//user 而不是 /home/vmail/domain/user
我应该如何更改配置才能让 Dovecot 再次将用户识别为“user@domain”?
答案1
在我看来,passdb passwd-file {...} 块或者类似的 userdb 块优先于 passdb ldap 块
答案2
找到答案了!
基本上,要让 Dovecot 在身份验证完成后将用户识别为“user@domain”,请添加:
pass_attrs = mail=用户
这会导致 Dovecot 从 LDAP 中的邮件属性识别用户。由于字段的格式为“user@domain”,因此 Dovecot 会将用户接受为“user@domain”