Назад | Перейти на главную страницу

suPHP: правильное использование функции chroot

Недавно я начал использовать 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 на более позднем этапе пути к запуску процесса.