如何强制maildrop以Postfix的指定用户和组运行

我用maildropreplace了Postfix LDA。 我使用的maildroprc脚本也会创build邮箱文件夹(如果它们不存在)。

在我的/etc/postfix/master.cf我已经定义了maildrop服务

maildrop unix - nn - - pipe flags=ODRhu user=vmail:daemon argv=/usr/bin/maildrop -w 90 -d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop} 

当此脚本为某个帐户创build文件夹时,其内部的文件夹和文件属于组“守护程序”,而Courier IMAP不希望读取该文件夹的内容,因为它预期用户名:group为vmail:vmail。

如果我将master.cf中的maildrop的服务定义更改为“vmail:vmail”,我会从maildrop

 ERR: authdaemon: s_connect() failed: Permission denied Invalid user specified. 

邮件不能发送。 我猜这是由于maildrop需要访问组“守护进程”所拥有的/ var / run / courier / authdaemon。 但我真的不明白为什么maildrop需要访问authdaemon文件夹。

创build该文件夹的maildrop脚本的一部分:

 `test -e $HOME_DIR/$HOST/$USER` #log "Testing for $HOME_DIR/$HOST subdirectory: result=$RETURNCODE" # Only continue if directory does NOT exist if ($RETURNCODE != 0) { log "MailDir $HOME_DIR/$HOST/$USER does NOT exist" `test -e $HOME_DIR/$HOST` if ( $RETURNCODE != 0 ) { log "Creating $HOME_DIR/$HOST" `mkdir $HOME_DIR/$HOST` `chmod -R 0700 $HOME_DIR/$HOST` } # Create users MailDir `maildirmake $HOME_DIR/$HOST/$USER` } 

我甚至尝试添加chown vmail:vmail $HOME_DIR/$HOST/$USER到创buildmaildir后运行的脚本,但该文件夹仍然属于组“守护进程”。

编辑:

我使用Debian Lenny(5.0)版本库中的maildrop 2.0.4软件包,并根据软件包信息判断是否为aganist courier authlib

 Version: 2.0.4-3 Replaces: courier-base (<= 0.58.0-1) Depends: courier-authlib, exim4 | mail-transport-agent, libc6 (>= 2.7-1), libgcc 1 (>= 1:4.1.1-21), libgdbm3, libpcre3 (>= 7.4), libstdc++6 (>= 4.2.1-4) 

这是我发现的:

当使用courier-authlib独立的maildrop版本时,必须使用下列configuration之一:

  • 您的邮件服务器必须以root用户身份调用maildrop(-d标志读取邮件帐户的uid和gid,然后删除root)。
  • 手动更改maildrop二进制文件的权限为setuid root。
  • 手动更改courier-authlib的套接字目录(默认情况下为/ usr / local / var / spool / authdaemon)的权限为全局可读或可执行。

将/ var / run / courier / authdaemon文件夹中的组所有权从“守护进程”更改为“vmail”,现在一切正常。 我已经重新启动了快递authdaemon,我仍然可以login到我的IMAP帐户(我猜这个库也用于当Courier id查找用户帐户和密码)。

有这样的安全意味,我应该知道吗?

我猜不会。 用户vmail没有本地帐户,vmail组中的某个用户将能够访问该框中的所有电子邮件。 如果我的系统已经被盗用,保护密码似乎不是什么大问题:)

maildrop -v ??? maildrop编译对快递auth库吗?