我正在尝试构建这样的 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 正常运行?