尝试在 CentOS 上的 Postfix 中添加队列后邮件过滤器,获得 execvp 权限被拒绝
Trying to add an after-queue mail filter in Postfix on CentOS, get execvp permission denied
所以我按照[指南][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 并且归过滤器所有。我尝试删除其中的所有内容,因此它只是一个空文件,但我仍然收到权限被拒绝的错误。
我不知道我错过了什么。我已经设置了我能找到的所有权限,但 Postfix 正在做一些我不明白的神秘事情。
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
所以我按照[指南][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 并且归过滤器所有。我尝试删除其中的所有内容,因此它只是一个空文件,但我仍然收到权限被拒绝的错误。
我不知道我错过了什么。我已经设置了我能找到的所有权限,但 Postfix 正在做一些我不明白的神秘事情。
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