perl脚本中的内部服务器错误通过在shebang行中添加“ -w”来解决。但是为什么呢?

问题描述 投票:0回答:1

我花了很多小时试图在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,许多程序运行良好。我可以做些什么来进一步追查这个问题,所以我最终不会在更重要的程序上遇到更多的麻烦?非常感谢您对此提供的任何见解。

apache perl browser server internals
1个回答
0
投票

错误:

(13)Permission denied: exec of '/data/www/facialsurgery/root/cgi-bin/test_print_2.pl' failed

这意味着由于权限错误,Web服务器(Apache)无法执行脚本。 (13Permission 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限制)


  1. [我认为,古代系统曾经将shebang(#!)之后的所有内容都视为要执行的命令。在这样的系统上,内核将尝试执行不存在的文件/usr/local/bin/perl -w。但这会导致errno 2No such file or directory),并且我不相信任何现代系统都会这样做。
© www.soinside.com 2019 - 2024. All rights reserved.