我花了很多小时试图在perl程序上修复内部服务器错误。我将程序精简到最简单,没有任何效果。实际上,这是整个程序:
#!/usr/local/bin/perl
use strict;
print "Content-type: text/html\n\n";
print <<"thepage";
<html><head><title>Test</title></head><body>
<p>help</p>
</body></html>
thepage
无法正常工作。权限正确。同一目录中,我实际上有一百多个其他脚本在不断运行。 httpd.conf很好。 SSH进入服务器时,它从命令行运行。错误消息说:
[Mon May 18 09:59:29 2020] [error] [client 98.190.183.148] (13)Permission denied: exec of '/data/www/facialsurgery/root/cgi-bin/test_print_2.pl' failed
[Mon May 18 09:59:29 2020] [error] [client 98.190.183.148] Premature end of script headers: test_print_2.pl
但是我解决了!通过在shebang行中添加“ -w”,该行显示为:
#!/usr/local/bin/perl -w
但是,正如我所提到的,没有-w,许多程序运行良好。我可以做些什么来进一步追查这个问题,所以我最终不会在更重要的程序上遇到更多的麻烦?非常感谢您对此提供的任何见解。
错误:
(13)Permission denied: exec of '/data/www/facialsurgery/root/cgi-bin/test_print_2.pl' failed
这意味着由于权限错误,Web服务器(Apache)无法执行脚本。 (13
是Permission denied
的错误号。)这与是否存在-w
无关。[[1]
首先,确定以哪个用户身份运行Web服务器(Apache)。在本文的其余部分中,我将假定它是默认的www-data
。
然后,请确保r
用户(或其组)可读取以下文件(授予x
权限)和可执行文件[www-data
):
/data/www/facialsurgery/root/cgi-bin/test_print_2.pl
这包括确保x
用户(或其组)可以访问以下目录(www-data
:]
/data
/data/www
/data/www/facialsurgery
/data/www/facialsurgery/root
/data/www/facialsurgery/root/cgi-bin
如果这些权限没有问题,那么您可能还会遇到严重的限制或卷范围限制(例如,值的noexec
属性)或其他安全措施(例如SELinux限制)
#!
)之后的所有内容都视为要执行的命令。在这样的系统上,内核将尝试执行不存在的文件/usr/local/bin/perl -w
。但这会导致errno 2
(No such file or directory
),并且我不相信任何现代系统都会这样做。