SuExec:“命令不是在docroot”即使它是?

  • 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) 

这不是(或者至less不应该)是真的…我用--with-suexec-docroot=/srv/www设置自动编译Apache 。 不过,我尝试了一个理智的检查,看看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 ,以查看在升级过程中是否可能恢复为原始存储库版本。 更新我的VirtealHosts,重新启动Apache,但仍然有相同的500错误。

还有什么可能导致这个?

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

你不需要重新编译它。 你可以使用这个软件包在debian或ubuntu上设置一个自定义path:

 apt-get install apache2-suexec-custom 

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

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

如果你没有Debian或Ubuntu,你必须寻找这样的软件包,或者用正确的docroot重新编译suexec(参见suexec doc )。 这个参数是:

 --with-suexec-docroot=DIR 

你必须检查,如何做你的发行。

使用以下命令查找fcgidconfiguration:

 /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中。

有两行的www-data文件(/ etc / apache2 / suexec / www-data):

 /var/www /public/cgi-bin/ 

你可以改变你喜欢的东西