我最近开始使用 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。