我已经为这个问题绞尽脑汁一段时间了。基本上,以下是概要:
我们的 MX 记录指向前端 SMTP 服务器,其中包含实际路由邮件的别名。没有别名,就无法访问后端存储服务器,而这正是我们的客户端所连接的服务器。
我正在升级后端电子邮件服务器。目前,服务器上为每个电子邮件用户都创建了一个用户,从而创建了邮箱。在新服务器上,所有内容都通过 PAM 向 LDAP 服务器进行身份验证(所有服务器均正常运行)。我的目标是让 Postfix 自动为用户创建 Maildir 目录。当我拥有具有 777 权限的 /home 目录时,此操作可以正常工作,但出于显而易见的原因,应避免这种情况。我想在 /home 上使用 775 权限,并使用 Postfix 以任何用户身份运行的组所有者来执行此操作,但我似乎无法弄清楚要使用哪个用户。使用 777 权限,在消息传递时会创建 /home/$user/Maildir 目录。有人知道我如何在没有 777 权限的情况下执行此操作吗?
我正在使用的系统是 64 位 Debian Lenny 5.07 安装。
任何意见,将不胜感激。
答案1
这个问题的答案取决于您的 Postfix 系统的配置方式。您提到了 pam 和 LDAP,所以我假设您的所有域都在 $mydestination 中,或者您只使用一个域(例如 example.com)
使用 LDAP 映射而不是 mysql/pgsql 映射来配置 virtual_mailbox_domains 可能会更容易(但逻辑完全相同)。
您创建一个没有登录权限的单个系统用户。我在此假设用户名和组为 vmail:vmail,但具体名称并不重要。
在 LDAP 中,为 vmail 创建相对于 $HOME 的邮箱路径(因此 maildir 变为 /home/vmail/user/Maildir/)。
将您的域添加到 virtual_mailbox_domains。创建一个 virtual_mailbox_maps 映射,以用户名作为输入并返回用户名/Maildir 作为输出。
放
virtual_mailbox_domains = example.com
virtual_mailbox_base = /home/vmail/
virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual.cf
virtual_uid_maps = static:$uid_of_vmail
virtual_gid_maps = static:$gid_of_vmail
#$uid_of_vmail and $gid_of_vmail are obtained from the output of
#id vmail
在 main.cf 中。
看http://www.postfix.org/ldap_table.5.html和http://www.postfix.org/VIRTUAL_README.html以获取更多信息(以及您需要在 ldap_virtual.cf 中输入的内容)。
值得一提的是,Postfix 以您要传送到的系统用户的 uid/gid 来运行本地传送过程。
/home 的一般权限为 755,所有者和组均为 root,但用户可以在 ~user 内写入。因此 Postfix 会很乐意将邮件投递到 ~user/Maildir/,但无法创建 ~user。使用虚拟用户可避免此问题,方法是将所有邮箱的访问权限授予单个 uid/gid,然后仅由 pop3/imap 软件访问。用户将无法直接访问邮箱。
答案2
如果 postfix(该组成员mail
)无法写入目录,则无法完成投递。秘诀是让该mail
组在用户的主目录。775 足以让 postfix 进入 /home;但一旦进入,可能不足以让它在 /home/$user 中创建目录,因为分配的组可能不是mail
,所有者肯定不是mail
,而且世界位肯定不会设置为rwx
。因此,对于 postfix 来说,它“对你来说毫无用处”。
作为权宜之计,你总是可以将用户目录的组设置为mail
,但我真的不推荐这个。
更好的解决方案是使用扩展属性,在 EXT3 和 EXT4 中可用。这将允许您定义多个组,而不仅仅是一个。因此,您可以使用 (而不是 )将mail
组添加到每个用户目录rwx
,从而r-x
绕过问题并允许创建目录。
只是好奇,为什么不使用它/var/spool/mail/$user
并完成它?使用这种安排将解决整个问题;目录的组是事实上的mail
,绕过整个“我需要 777”问题。我只能猜测您需要 NFS 安装用户主目录或类似的东西。