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

Gor*_*rić 3 email 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}
Run Code Online (Sandbox Code Playgroud)

当此脚本为帐户创建文件夹时,其中的文件夹和文件属于“守护进程”组,并且 Courier IMAP 不想读取文件夹的内容,因为它期望 username:group 为 vmail:vmail。

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

ERR: authdaemon: s_connect() failed: Permission denied Invalid user specified.
Run Code Online (Sandbox Code Playgroud)

并且邮件无法投递。我猜这是因为 maildrop 需要访问由“守护进程”组拥有的 /var/run/courier/authdaemon。但我真的不明白为什么 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`
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:

我正在使用 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)
Run Code Online (Sandbox Code Playgroud)

Gor*_*rić 5

这是我发现的:

使用带有 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 组中的某个人将能够访问盒子上的所有电子邮件。如果我的系统已经像那样受到损害,保护密码似乎没什么大不了的:)