操作系统: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。