我遇到一个奇怪的问题,就是从procmail本地发送的传入邮件中运行脚本(perl和ruby失败)。
系统是CentOS 5.5,后缀是我的邮件程序,然后是.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
...但我真的不想承认失败而且那样做。
答案 0 :(得分:1)
问题是selinux,如果你关闭它应该工作。我不确定如何在启用selinux的情况下修复它。
这是修复它的方法,但仍然运行selinux。在perl或ruby脚本上运行chcon system_u:object_r:procmail_exec_t
。我已经确认这是一个修复,但我对selinux不够熟悉,以确保它是“正确的”修复。