我们有一台运行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下)?
欢迎任何其他建议!
答案 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