为什么 Apache 中的 mod_fastcgi 抱怨它没有创建服务器的权限?

为什么 Apache 中的 mod_fastcgi 抱怨它没有创建服务器的权限?

这是一个非常古老的 FastCGI 问题,但我从未找到令人满意的答案。

搜索短语“(13)权限被拒绝 fastcgi 无法创建服务器”在 Google 上查找会发现有很多人长期遇到此问题。

有些人将此归咎于 selinux 并建议将其关闭(这不是可接受的解决方案)。

其他人认为这是一个奇怪的符号链接权限问题,并建议将 Apache 日志目录从符号链接转变为普通目录。(不可接受,因为它涉及移动日志文件)请参阅安装 FastCGI

以下是 Apache 通常记录的可怕错误。

[Wed Jun 14 22:09:34 2009] [notice] Apache/2.0.40> (Red Hat Linux) configured 
-- resuming normal operations
[Wed Jun 14 22:09:35 2009] [crit] (13)Permission
denied: FastCGI: can't create server "/var/rt3/bin/mason_handler.fcgi": bind()
failed [/etc/httpd/logs/fastcgi/70d9a528c5892f2bf0c25e5a334bed81]

希望服务器故障最终可以为这个困扰 FastCGI 用户多年的令人困惑和恼人的问题提供明确的答案。

当没有人真正了解这种疾病的根本原因时,我对实施建议的“治疗方法”感到不安。希望能彻底解开这个谜团。

答案1

/usr/lib/errno.h

#define EACCES          13      /* Permission denied */

mod_fcgi通过命名管道。Apache 在生成子进程之前创建管道。我猜 Apache 没有权限创建

/var/rt3/bin/mason_handler.fcgi

要检查此尝试

su - apache "touch /var/rt3/bin/mason_handler.fcgi"

如果失败,请适当调整文件系统权限以授予 apache 在该目录中创建文件的权限。

答案2

我已经解决了这个问题

chown apache:apache /etc/httpd/logs/

答案3

要在 SELinux 下工作,请尝试使用 mod_fcgid 而不是 mod_fastcgi。我在 CentOS 5.6 上尝试了带有 SELinux 的 mod_fastcgi 三个小时,并在 google 上搜索了一圈,但一无所获。这是 mod_fastcgi 尝试创建管道/套接字与 fastcgi 应用程序通信时出现的问题。我在 /var/log/httpd/fastcgi 文件夹(mod_fastcgi 创建命名管道的地方)上尝试了所有我能想到的权限/SELinux 上下文,但都不起作用。然后我切换到 mod_fcgid(从 rpm.pbone.net 下载的 EL5 rpm),它显然不使用相同的通信方法与 fastcgi 应用程序通信,一切都运行正常,就像 fastcgi 应用程序是常规 cgi 应用程序一样!您仍然必须在文件上设置正确的 SELinux 上下文(请参阅 httpd_selinux 的手册页)。例如,您想要对脚本访问/修改的任何文件执行 chcon -t httpd_sys_script_exec_t fcgiapp 以及 chcon -t httpd_sys_script_r[w|o|a]_t,并且您可能必须使用 setsebool 命令设置一些 allow_httpd... 布尔值。当然,您还必须正确设置常规文件权限。有一些网络教程介绍了典型的 mod_fcgi 配置。

答案4

运行 fastcgi 进程的用户没有权限绑定到您要求它绑定的任何套接字。原因可能有很多,但没有足够的信息来做出有用的诊断。

相关内容