1

我们有一台运行 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 文档说“在 2.2 上,无法使用 Setenv 设置 PATH 环境变量。”

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

可能是我安装 perlbrew 的方式有问题吗?它应该作为不同的用户(作为 apache)吗?不同的位置(在 /var/www 下)?

欢迎任何其他建议!

4

1 回答 1

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,更改了根目录:

# 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

于 2016-01-09T20:57:15.757 回答