我正在使用 lighttpd 和 php-fpm。
.php 脚本使用正确的用户权限进行处理,我在浏览器中看到了结果。目前,如果我在 PFM conf 文件中注释 chroot= 选项,则所有脚本都可以正确运行。如果我添加它,我总是会收到 404 未找到错误。
我的文档根目录(在 lighttpd conf 文件上)是:/home/lighttpd/vhosts/website/web
我该如何使用 chroot 参数?我必须使用什么路径?
谢谢你!
答案1
请记住,无论何时使用 chroot,您的 chroot 环境必须包含一切您需要。在这种情况下,您需要 php.exe、php.ini 和所有 .php 脚本,这只是开始。如果您的 Web 应用程序需要写入某些目录(例如 /tmp),那么它也必须在您的 chroot 内。
请记住,chroot 的字面意思是“更改根目录”,即更改文件系统的根目录。因此,如果您想要将 php-fpm chroot 到例如 /home/lighttpd/,那么如果它必须写入 /tmp,则实际上是 /home/lighttpd/tmp,因此请确保它存在。如果您正在寻找 /etc/php/php.ini,则它类似于 /home/lighttpd/etc/php/php.ini——本质上,chroot 应用程序的任何文件路径上的前导“/”都会被 chroot 路径替换。
这使得设置 chroot 环境变得相当棘手,因为您必须创建 chroot 路径中所需的根文件系统部分的镜像。这也意味着您必须了解 chroot 环境所需的一切。
我的建议是根本不要使用 chroot。它充其量只是一层非常薄弱的安全层,使它工作所需的努力几乎毫无价值,老实说,我认为最好确保 php-fpm 在正确的用户上下文(即受限用户,而不是 root)下运行,并使用正确的文件系统权限为该用户授予系统上必要的最低权限。这包括确保该用户根本无法登录到交互式 shell(删除用户的密码,并将其 shell 设置为 /bin/false 或 /bin/nologin),并且根本没有任何权限sudo
(除非绝对必要,然后仅授予sudo
对其所需的特定命令的访问权限)。