尝试在CentOS上的Postfix中添加后队列邮件过滤器,获得execvp权限被拒绝

时间:2016-06-07 21:32:07

标签: email filter postfix-mta centos7 execv

所以我按照[指南] [1]关于如何使用Postfix设置简单的邮件过滤器,以便我可以在外发电子邮件的正文中进行查找替换。我在/tmp/mailfilter.sh创建了一个脚本,并按照说明更改了/etc/postfix/master.cf文件

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
      -o content_filter=filter:dummy

filter    unix  -       n       n       -       10      pipe
    flags=Rq user=filter null_sender=
    argv=/tmp/mailfilter.sh -f ${sender} -- ${recipient}

我创建了一个名为filter的用户,并使其成为脚本的所有者。但是当我尝试发送电子邮件时,我收到以下错误:

Jun  7 03:01:53 localhost postfix/qmgr[31288]: 134D944A0673: from=<sender@gmail.com>, size=894, nrcpt=1 (queue active)
Jun  7 03:01:53 localhost pipe[31603]: fatal: pipe_command: execvp /tmp/mailfilter.sh: Permission denied
Jun  7 03:01:53 localhost postfix/pipe[31562]: 134D944A0673: to=<receiver@gmail.com>, relay=filter, delay=8974, delays=8974/0/0/0.01, dsn=4.3.0, status=deferred (temporary failure. Command output: pipe: fatal: pipe_command: execvp /tmp/mailfilter.sh: Permission denied )

具体而言,我所假设的是

(temporary failure. Command output: pipe: fatal: pipe_command: execvp /tmp/mailfilter.sh: Permission denied )

/tmp/mailfilter.sh有chmod a + x并且由filter拥有。我尝试删除其中的所有内容,因此它只是一个空文件,我仍然得到权限被拒绝错误。

我无法弄清楚我错过了什么。我已经设置了我能找到的所有权限,但Postfix正在做一些我不明白的奥术。

1 个答案:

答案 0 :(得分:2)

CentOS使用SELinux作为MAC框架,因此您可能需要正确设置可执行文件的类型。您可以检查/var/log/audit/audit.log是否存在安全违规行为。如果SELinux拒绝您,您可以尝试此命令root

chcon -t postfix_pipe_exec_t /tmp/mailfilter.sh

该手册是一个很好的参考:http://linux.die.net/man/8/postfix_selinux