apache - 通过在 shebang 行中添加“-w”解决了 perl 脚本的内部服务器错误。但为什么?
问题描述
我花了好几个小时试图修复 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/www/facialsurgery/root/cgi-bin
/data/www/facialsurgery/root
/data/www/facialsurgery
/data/www
/data
如果这些权限没有问题,您也可能正在运行违规或卷范围的限制(例如noexec
值的属性)或其他安全措施(例如 SELinux 限制)
- 我认为古代系统曾经将 shebang (
#!
) 之后的所有内容都视为要执行的命令。在这样的系统上,内核会尝试执行不存在的文件/usr/local/bin/perl -w
。但这会导致 errno2
(No such file or directory
),我不相信任何现代系统都会这样做。
推荐阅读
- python-3.x - 如何在烧瓶应用程序中使用 cgitb 增强回溯日志记录?
- sleep - 如何在超低功耗模式下使用 MPU 6050
- python - 熊猫直方图
- python - 改组 pandas 数据帧行,同时避免连续的条件值
- xaringan - 我可以使用 css 为 xaringan 模板的每张幻灯片添加徽标吗?
- python - 在python3中表示数字
- python - 使用 matplotlib 和 subplot 绘制多个条形图
- eclipse - Eclipse PDT 在注释块中标记“错误”
- java - UI 在异步后台任务中缓慢执行
- mysql - 私有子网和公共子网(均为 EC2)的安全组