postfix、dovecot、dovecot-sasl、ldap 和用于 NFS 共享电子邮件存储的静态 UID

postfix、dovecot、dovecot-sasl、ldap 和用于 NFS 共享电子邮件存储的静态 UID

我正在尝试构建这样的 Ubuntu 12.04 邮件服务器。

必须:针对现有 Open-LDAP 服务器进行身份验证。存储在现有 NFS 服务器上的 Maildirs 中,所有内容归 8:8 (mail:mail) 所有。smtp 和 imap 需要身份验证。

应该(我认为):Postfix 使用 Dovecot SASL。

一切工作正常,除了当我使用 ldap 作为 userdb 时:

userdb {
driver = ldap
args = /etc/dovecot/ldap-userdb.conf.ext
}

... 然后 maildir 文件作为 UID:GID 从 LDAP 读取/写入。但邮件必须归 8:8 所有(因为有其他邮件服务器),我收到如下错误:

Error: open(/var/mail/...) ...
 failed: Permission denied (euid=1193(<...>) egid=555(<...>) missing +r perm
.... dir owned by 8:8 ...

但如果我使用静态用户数据库:

userdb {
 driver = static
 args = uid=8 gid=8 home=/var/mail/%u
}

...然后当我在新邮件服务器上从一个 ldap 用户向另一个 ldap 用户发送邮件时,我收到一个错误:(发送电子邮件至[电子邮件保护]

postfix/local[32371]: C6F7561735: to=<[email protected]>, 
 relay=local, delay=0.04, delays=0.02/0.01/0/0.01, dsn=5.1.1, 
 status=bounced (unknown user: "timmytester")

...但向本地域之外发送电子邮件则没问题。

在我看来,使用静态 userdb 会干扰 Dovecot 提供的 SASL。因此,我尝试将 8:8 插入到 ldap userdb 配置中:(我对 passdb 和 userdb 使用相同的配置文件,用于 ldap,符号链接)

uris = ldap://ldapserver.domain.com
 dn = cn=admin,dc=domain,dc=COM
 dnpass = secretPW
 auth_bind = no
 ldap_version = 3
 base = ou=Users, dc=DOMAIN, dc=COM
 pass_attrs = uid=user,userPassword=password

 user_attrs = uid=8,gid=8 # <--- here i tried to cheat.

 pass_filter = (&(objectClass=mailUser)(|(mailDestination=%u)(uid=%n)))
 default_pass_scheme = SSHA

... 这复制了静态用户数据库问题。未知用户。但至少看起来我可以在这里进行类似静态的分配。

如果我的邮件可以由真正的 uid:gid 拥有,那么就好了。Postfix 虚拟用户、虚拟域,所有这些似乎都很好。只是当 Dovecot 变为 8:8 时,postfix 会得到错误的 SASL 答案?要清楚的是,当我使用静态 uid:gid 时,文件访问问题就会消失。当我使用普通 ldap userdb 时,未知用户问题就会消失。我甚至可以 chmod 777 邮件目录,并且一切都很好,直到新邮件被旧邮件服务器处理并存储为 600。

我是否需要使用不同的 SASL 包?或者我可以让 dovecot 执行文件访问 8:8,同时仍让 postfix 正常运行?

相关内容