suPHP:正确使用 chroot 功能

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日志不包含任何信息,此行来自 Apache 错误日志。

任何人现在究竟如何设置这个可怕的 chroot 功能?我浏览了无数论坛和来自列表的邮件,但还没有人给出正确的答案(尽管此功能已被修补了令人难以置信的次数)。或者我应该切换到 suExec,希望它能提供更令人满意的结果……?

答案1

您的问题是由于您不了解 chroot 的工作原理。一旦您 chroot 到 /home/user,它就是新的根目录,路径与它“相关”。因此,如果您的文件位于 /home/user/public_html 中,并且想要 chroot 到 /home/user,那么 chdir 实际上应该是 /public_html,而 fastcgi 文档根目录将是相同的 (/public_html)。

从技术上来说,suPHP 不可能在启动进程的过程中更远的位置运行 chroot。

相关内容