SuExec: "команда не в докруте", хотя она есть?

  • Arch Linux 2011.08.19 (Linux 3.4.2 i686)
  • Apache 2.2.22 с SuExec
  • PHP 5.4.4 (cli) через FastCGI

Раньше все мои сайты работали нормально… Я не уверен, когда это произошло, потому что я заметил это через неделю (наверное, после обновления системы), но все мои виртуальные хосты перешли в автономный режим с ужасным "преждевременным концом сценария". Заголовки: 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/www задавать. Тем не менее, я попытался проверить работоспособность, чтобы узнать, что на самом деле думала 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/wwwdocroot по умолчанию, чтобы увидеть, возможно, он вернулся к исходной версии репозитория во время обновления. Обновил мой VirtealHosts, перезапустил Apache, но все равно получил те же 500 ошибок.

Что еще может быть причиной этого?

4 ответа

Решение

Вам нужно перекомпилировать suexec.c --with-suexec-docroot=/srv/www

Вам не нужно перекомпилировать это. Вы можете использовать этот пакет, чтобы установить собственный путь в Debian или Ubuntu:

apt-get install apache2-suexec-custom

После установки пакета появляется специальный каталог, в котором вы можете установить путь suexec для каждого пользователя. Для пользователя www-data должен быть файл примера:

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

Если у вас нет Debian или Ubuntu, вам нужно искать такой пакет или перекомпилировать suexec с правильным документированием (см. Suexec doc). Параметр это:

--with-suexec-docroot=DIR

Вы должны проверить, как это сделать для вашего дистрибутива.

Есть файл www-data (/etc/apache2/suexec/www-data) с двумя строками:

/var/www
/public/cgi-bin/

Вы можете изменить эти строки на то, что вы предпочитаете

Найдите настройки 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 для доступа и запуска.

Другие вопросы по тегам