Недавно я начал использовать suPHP и трачу много времени на отладку конфигураций и различных параметров компиляции, чтобы получить что-то, что действительно работает. Я пробовал связаться с командой разработчиков через их список рассылки, но он явно состоит из призраков ...
Я пытаюсь использовать chroot
параметр, но он вызывает внутреннюю ошибку 500, которую я просто не могу решить.
Я использую DBD MySQL для определения DocumentRoot:
<VirtualHost *:80>
ServerName *
DBDriver mysql
DBDParams <params>
DBDocRoot "SELECT document_root FROM domains WHERE name=%s" HOSTNAME
suPHP_Engine on
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
suPHP_AddHandler application/x-httpd-php
</VirtualHost>
После того, как VirtualHost установит DocumentRoot, suPHP должен применить дополнительный chroot. См. Соответствующий раздел моего /etc/suphp.conf
ниже:
docroot=${HOME}
chroot=${HOME}
allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false
check_vhost_docroot=false
В chroot
параметры не могут быть проще, но suPHP плюется:
Caused by SystemException in API_Linux.cpp:465: chdir() failed: No such file or directory
... когда я делаю запрос к сценарию PHP. В suphp
log не содержит никакой информации, эта строка взята из журнала ошибок Apache.
Делает кто угодно на Земле, как настроить эту ужасную функцию chroot? Я прошел через бесчисленное количество форумов и писем из списка, но никто еще не дал надлежащего ответа (хотя эта функция была исправлена невероятное количество раз). Или, может быть, мне стоит переключиться на suExec, надеясь, что он предложит более удовлетворительные результаты ...?
Ваша проблема вызвана тем, что вы не понимаете, как работает chroot. Как только вы перейдете в / home / user, это будет новый корень, и пути будут «относительными» к нему. Итак, если у вас есть файлы в / home / user / public_html и вы хотите выполнить chroot в / home / user, тогда chdir фактически должен быть / public_html, а корень документа fastcgi будет таким же (/ public_html).
Для suPHP технически невозможно запустить chroot на более позднем этапе пути к запуску процесса.