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

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

我已经用 maildrop 替换了 Postfix LDA。如果邮箱文件夹不存在,我正在使用的 maildroprc 脚本也会创建它们。

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

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

当此脚本为某个帐户创建一个文件夹时,该文件夹及其内部的文件属于组“daemon”,并且 Courier IMAP 不想读取该文件夹的内容,因为它期望用户名:组为 vmail:vmail。

如果我将 master.cf 中 maildrop 的服务定义更改为“vmail:vmail”,我会收到来自 maildrop 的错误

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

邮件无法投递。我猜这是因为 maildrop 需要访问 /var/run/courier/authdaemon,而该文件属于“daemon”组。但我真的不明白为什么 maildrop 需要访问 authdaemon 文件夹。

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到创建 maildir 后要运行的脚本,但该文件夹仍然属于“守护进程”组。

编辑:

我正在使用 Debian Lenny (5.0) 存储库中的 maildrop 2.0.4 包,根据包信息判断,它是针对 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)

答案1

以下是我的发现:

当使用带有 courier-authlib 的独立 maildrop 构建时,必须使用下列配置之一:

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

A 将 /var/run/courier/authdaemon 文件夹的组所有权从“daemon”更改为“vmail”,现在一切正常。我已重新启动 courier-authdaemon,我仍然可以登录到我的 IMAP 帐户(我猜这个库在 Courier id 查找用户帐户和密码时也用到)。

我应该知道这样做是否存在安全隐患吗?

我想不是。用户 vmail 在盒子上没有本地帐户,而 vmail 组中的某个人将能够访问盒子上的所有电子邮件。如果我的系统已经受到这样的攻击,保护密码似乎不是什么大问题 :)

相关内容