通过apache + suexec运行perlbrew脚本时出错

时间:2016-01-09 11:43:00

标签: apache perl perlbrew suexec

我们有一台运行Centos 5.11,Apache 2.2和默认perl的服务器。通过suexec运行脚本正在运行"很好",但是我已经安装了perlbrew,这样我就可以安装一大堆额外的模块而不会干扰它。

我创建了一个简单的perl脚本来测试:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "perl: ". $^X . "\n";

当通过apache + suexec运行时,它会按预期输出:

Hello, world! perl: /usr/bin/perl

但是,当我将shebang线改为:

#!/root/perl5/perlbrew/perls/perl-5.22.1/bin/perl

并以相同的方式运行,我收到内部服务器错误,并且apache错误日志显示:

suexec failure: could not open log file
fopen: Permission denied
Premature end of script headers: test.cgi

但在命令行运行很好:

# ./test.cgi 
Content-type: text/html
Hello, world!
perl: /root/perl5/perlbrew/perls/perl-5.22.1/bin/perl

我尝试过各种各样的事情。我确实想知道它是否是一个" PATH"问题,但apache docs说"在2.2上,无法使用Setenv设置PATH环境变量。"

suexec错误通常似乎是由dos / unix编码引起的 - 但这不是问题。

这可能是我安装perlbrew的问题吗?它应该是一个不同的用户(如apache)?不同的位置(在/ var / www下)?

欢迎任何其他建议!

1 个答案:

答案 0 :(得分:1)

解决了 - 你的推动让我朝着正确的方向前进。

这是一个线索:

# suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_EXEC="/var/log/httpd/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=500
 -D AP_USERDIR_SUFFIX="public_html"

我重新安装了perlbrew,改变了root:

# export PERLBREW_ROOT=/usr/local/bin/perlbrew
# perlbrew install perl-5.22.1

然后将脚本更改为:

#!/usr/local/bin/perlbrew/perls/perl-5.22.1/bin/perl

和宾果:

你好,世界!路径:/usr/local/bin/perlbrew/perls/perl-5.22.1/bin/perl