我正在尝试在 PHP-FPM chroot 中设置一个站点。我的路径如下:
chroot = /var/www/
chdir = www/
无需 chdir,chroot 也能正常工作。但是当我添加 chdir 时,php-fpm 启动时出现此错误:
ERROR: [pool www] the chdir path '/usr/www/' within the chroot path '/var/www/' ('/var/www///usr/www/') does not exist or is not a directory
有人知道为什么它会附加/usr/
到 chdir 路径吗?有没有办法将其从该路径中删除?
此外,如果我将 chdir 路径更改为/www/
,我必须浏览到http://localhost/www/filename.php
才能查看我的文件。chdir 的意义不就是让这一步变得不必要吗?
答案1
您是否已为 PHP 准备了合适的 chroot?
简单地设置一个任意目录是不够的 - 您实际上需要构建 chroot 并确保它包含所有必要的库、设备和二进制文件。
否则,DNS 解析等基本功能将无法正常工作,您将遇到随机错误、挂起或应用程序段错误。听起来您误认为open_basedir
chroot 的简单性。
首先,这个脚本一旦定制,就会为您提供 chroot 的基础。
http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
但实际上,如果你对 chroot 没有太多经验...
- 如果设置不正确,它可能不会比正常情况更安全
- 它可能比正常情况更不安全,如果设置不正确,可能会允许 root 权限升级
- 你可能会遇到随机问题,这些问题会随着时间的推移困扰你的应用程序,而这一切都是由构建不良的 chroot 引起的
我猜安全是你的目标,但你很可能会得到完全相反的结果。
答案2
昨晚从 phpfreaks IRC 获得了帮助。这是 Apache 方面的问题,我需要它将“/www”发送到 PHP-FPM。