SuExec:“命令不在文档根目录中”即使它在?

SuExec:“命令不在文档根目录中”即使它在?
  • Arch Linux 2011.08.19(Linux 3.4.2 i686)
  • 带有 SuExec 的 Apache 2.2.22
  • PHP 5.4.4 (cli) 通过 FastCGI

我的网站之前都运行良好......我不确定什么时候发生的,因为我是在一周后才注意到的(我猜可能是在系统升级之后),但我的所有 VirtualHosts 都离线了,出现了可怕的“脚本头过早结束:php-fcgid-wrapper”500 错误。

SuExec 日志为每个站点提供了以下信息:

[2012-07-16 00:45:02]: uid: (1001/site) gid: (1001/site) cmd: php-fcgid-wrapper
[2012-07-16 00:45:02]: command not in docroot (/var/www/site/fcgi-bin/php-fcgid-wrapper)

这不是(或至少不应该是)事实……我自动编译 Apache--with-suexec-docroot=/srv/wwwset。不过,我还是尝试了健全性检查,看看 docroot SuExec 实际上认为它有什么:

$ suexec -V
suexec policy violation: see suexec log for more details

日志中声称:

[2012-07-16 01:07:52]: too few arguments

也尝试过使用 sudo;结果一样。所以,这也没有意义,并且使我无法正确诊断问题。

我尝试的另一件事是将所有内容从/srv/www移至/var/www默认的 docroot,以查看是否在升级过程中恢复为原始存储库版本。更新了我的 VirtealHosts,重新启动了 Apache,但仍然出现相同的 500 错误。

还有什么原因造成这种情况?

答案1

您需要重新编译 suexec.c --with-suexec-docroot=/srv/www

答案2

您不需要重新编译它。您可以使用此包在 debian 或 ubuntu 上设置自定义路径:

apt-get install apache2-suexec-custom

安装软件包后,会有一个特殊目录,您可以在其中为每个用户设置 suexec 路径。应该有一个针对 www-data 用户的示例文件:

/etc/apache/suexec/<some-user-name>

如果你没有 Debian 或 Ubuntu,你必须寻找这样的包或使用正确的 docroot 重新编译 suexec(请参阅suexec 文档)。参数为:

--with-suexec-docroot=DIR

您必须检查如何为您的发行版执行此操作。

答案3

使用以下命令查找 fcgid 配置:

/usr/lib/apache2/suexec -V

-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="www-data"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=100
-D AP_USERDIR_SUFFIX="public_html"

包装器必须写入目录树:AP_DOC_ROOT 才能被访问和运行。

答案4

有一个 www-data 文件(/etc/apache2/suexec/www-data),其中有两行:

/var/www
/public/cgi-bin/

你可以把这些行改成你喜欢的

相关内容