CGI 错误(无法打开 perl 脚本/权限被拒绝)

CGI 错误(无法打开 perl 脚本/权限被拒绝)

操作系统:CentOS 7 / Apache:2.4

我正在升级机器和软件,其中一部分涉及从 Apache 2.2.x 升级到 Apache 2.4.x。其中很大一部分运行正常,包括 PHP 脚本和纯 html 文件,但我在尝试运行 Perl cgi 脚本时遇到了很大的问题。

暂时,在进行故障排除时,我已禁用 httpd 的 Selinux(使其变得宽容:即 semanage permissive -a httpd_t),所以我知道这不是问题。

我尝试了很多方法,但最关键的是我无法从 /cgi-bin/ 运行任何程序。由于遗留原因,这个特定站点不在 /var/www/ 下,而是在 /home/www/htdocs/ 下,但我认为这只会对 Selinux 造成问题,因为目前 Selinux 已被禁用。

因此,我在 Apache 错误日志中收到的错误消息示例如下:

AH01215: Can't open perl script "/home/www/htdocs/zac/cgi-bin/test.cgi": Permission denied

我尝试过不同的方法,但目前我已将“apache”作为 /cgi-bin/ 的组所有者,权限为 777,并将 apache 作为脚本的所有者和组,权限为 777。脚本非常简单,(只需打印一些文本进行测试)并且我已经删除并重新添加了每个脚本的顶行(即 #!/usr/bin/perl)以确保那里没有可疑字符。

我知道 conf 文件中的某些语法在 2.4 中有所不同,但我认为一切都没问题,如下所示:

<VirtualHost *>
DocumentRoot "/home/www/htdocs/zac/"
ServerName www.zacserver.pc
ServerAlias zacserver

ScriptAlias /cgi-bin/   "/home/www/htdocs/zac/cgi-bin/"

AddHandler cgi-script .cgi .pl

AddType application/x-httpd-php .html .php

<Directory "/home/www/htdocs/zac/">
AllowOverride all
Options ExecCGI Includes

Require all denied
Require ip 172.10       127.0.0.1
</Directory>

CustomLog "/var/www/sites/logs/zac_access.log" combined
ErrorLog  "/var/www/sites/logs/zac_error.log"
</VirtualHost>

奇怪的是,如果我将 test.cgi 脚本放在 cgi-bin 目录上方的 /zac/ 中,它就能正常工作。我甚至还有另一个目录 cgi-test,其所有权和权限与 cgi-bin 相同,脚本和权限也相同,它也能正常工作;但 /cgi-bin 本身似乎什么都不能正常工作。

我还尝试将上面的 conf 文件中的 ScriptAlias 行删除引号,然后重新启动,但没有效果。(不是我所期望的)。

所以,我有点难以找到其他可以查看的内容,因为权限似乎没问题,脚本没问题,而且据我所知,conf 配置也很好。快把我逼疯了!

任何帮助都将不胜感激。我觉得这一定是一件非常简单的事情,但我找不到解决方案。

更新: 随后,我通过使用 restorecon 将文件上下文从 httpd_sys_script_exec_t 改回 httpd_sys_content_t,成功解决了这个问题。不知道为什么这样做会有效,因为我认为应该反过来。

答案1

随后,我通过使用 restorecon 将文件上下文从 httpd_sys_script_exec_t 改回 httpd_sys_content_t,成功解决了这个问题。不知道为什么这样做会有效,因为我认为应该反过来。

答案2

您不能将权限完全开放,Apache 认为这存在安全风险!尝试 755。

相关内容