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/www
docroot по умолчанию, чтобы увидеть, возможно, он вернулся к исходной версии репозитория во время обновления. Обновил мой 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 для доступа и запуска.