【问题标题】:procmail is not executing scripts correctlyprocmail 没有正确执行脚本
【发布时间】:2011-04-20 22:04:07
【问题描述】:

我在从 procmail 本地传递的传入邮件中运行脚本(perl 和 ruby​​ 失败)时遇到一个奇怪的问题。

系统是 CentOS 5.5,我的邮件是 postfix,然后是 .forward 设置以将电子邮件发送到 procmail。 .procmailrc 和脚本与 Ubuntu 服务器上的工作设置相同。

这是 .procmailrc:

PATH= /usr/local/bin:/usr/bin:${PATH}
SHELL=/bin/bash
MAILDIR=$HOME/Maildir
DEFAULT=${MAILDIR}/
LOGABSTRACT=yes
LOGFILE=$HOME/Maildir/proclog
VERBOSE=YES

:0 wc
* ^To.*web@mydomain.com
| /home/web/perltest.pl

这里是 perl 脚本:

#!/usr/bin/env perl

system("touch /home/web/touchedfile");

然后在收到邮件后日志中的失败:

procmail: Executing "/home/web/perltest.pl"
/home/web/perltest.pl: line 3: syntax error near unexpected token `"touch /home/web/touchedfile"'
/home/web/perltest.pl: line 3: `system("touch /home/web/touchedfile");'

行尾都是 UNIX。该脚本在命令行中运行良好。

如果我直接从命令行通过管道连接到 procmail,整个设置工作正常,但是当它作为本地传递过程的一部分被调用时,#!脚本中似乎忽略了行。

如果我在管道中显式执行 perl,我可以让 perl 脚本运行,如下所示:

:0 wc
* ^To.*web@mydomain.com
| perl /home/web/perltest.pl

...但我真的不想认输并那样做。

【问题讨论】:

    标签: linux scripting centos procmail


    【解决方案1】:

    问题是selinux,如果你关闭它应该可以工作。我不确定如何在启用 selinux 的情况下修复它。

    这是一种修复它并且仍然运行 selinux 的方法。在您的 perl 或 ruby​​ 脚本上运行 chcon system_u:object_r:procmail_exec_t。我已经验证这是一个修复,但我对 selinux 不够熟悉,无法确定它是“正确”的修复。

    【讨论】:

    • SELinux 确实是罪魁祸首!谢谢!
    猜你喜欢
    • 2012-10-12
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2022-01-27
    • 2019-08-16
    • 1970-01-01
    相关资源
    最近更新 更多