我最近升级了我的 Apache2 服务器,现在无法运行 CGI 应用程序。我的日志显示
(13)权限被拒绝,多次尝试后仍无法连接到 cgi 守护进程
我理解该错误信息意味着 Apache 被拒绝了对某些文件的某些权限,而我不知道如何追踪和解决这个问题。
错误消息中提到的文件真的是被阻止的文件吗?或者问题可能是由其他所需文件引起的?.cgi 文件就在它原来的位置,即 /usr/share 下。文件所有权(root)和权限(全局可读/可执行)与该文件及其祖先的所有权和权限相同。SELinux 文件标签未发生改变。
SELinux 审计日志未显示与 Apache 或 CGI 程序相关的拒绝。在 donotaudit 情况下,我启用了审计,但仍然没有看到任何内容。我短暂地将 SELinux 切换到宽容模式,但无济于事。我甚至尝试在宽容模式下重新启动 Apache。这并没有解决问题。
关于如何解决这个问题有什么建议吗?我很想恢复到旧版 Apache。
答案1
可能会或可能不会起作用,似乎不太可能,但有人遇到了类似的问题,这就是解决方案;
chmod 755 /var/log/httpd/
或者您服务器上 apache 日志的目录。
答案2
确认您有以下设置00-mpm.conf
/etc/httpd/conf.modules.d/00-mpm.conf
并注释掉mod_mpm_prefork配置文件 然后评论mod_mpm_worker配置文件模块
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
答案3
虽然这是一个老问题,但我想我还是会添加我的答案,因为我在互联网上很难找到适当的解释或解决方案。
我只在使用事件 MPM(prefork MPM 工作正常)时在装有 Apache 2.4(作为 httpd24 包安装)的 RHEL 7 上遇到过此问题。SELinux 已设置为宽容。
根据有关 CGI 套接字的评论,我查看了文档:
本质上,使用 mpm-event 时,CGI 守护程序需要一个套接字文件。由于 Apache 在我的服务器上以用户 apache 和组 apache 运行(毫无疑问,许多其他服务器上也是如此),因此包含此套接字文件的文件夹必须具有 apache.apache 的读写权限。
由于不想覆盖日志文件夹权限,我选择ScriptSock
在以下位置明确设置指令conf.modules.d/00-mpm.conf
:
ScriptSock /var/run/httpd/cgid.sock
然后我确保httpd
目录存在(注意:您需要通过 进行配置tmpfiles.d
,就像/var/run
tmpfs 一样),并将所有权更改为 apache.apache。权限保留为默认的 755。
这为我解决了这个问题。
答案4
在 apache 升级过程中,模块行为发生了变化。您的 apache conf 指令可能需要进行一些更改才能正确提供 cgi。如果不知道 apache conf 和 cgi 的详细信息以及它在文件系统上的位置,就很难做出除了猜测之外的更多决定。
此外,如果您确实怀疑 SELinux,请尝试禁用它,看看 apache 是否再次开始提供 CGI。如果是这样,那么您可以开始集中精力调整策略以允许您尝试执行的操作,或者让您的系统符合 SELinux 策略。