我正在设置启用了 chrooting 的 php-fpm。现在我看到有两个选项,我想知道它们之间的确切区别是什么。
设置有:
chroot = /var/www/domains/domain.tld/
; Chdir to this directory at the start. This value must be an absolute path.
; Default Value: current directory or / when chroot
chdir = /docroot/
这里为什么有两个不同的位置,php 允许访问哪个路径。php 网站可以访问吗/var/www/domains/domain.tld/
,还是只能访问docroot
目录内的文件。
===
也许有一些具体的建议给我。我想要这样的设置:
webroot 位置:/var/www/
domain.com/
|---conf/
| |--nginx.conf
| |--php-fpm.conf
|
|---ssl/
|---logs/
|---session/
|---domains/
|---www/
|---app/
|---dev/
现在 php-fpm 设置如下:
chroot = /var/www/domain.com/
chdir = /domains/www
现在这里的主要问题是,位于www
子域中的应用程序是否能够访问dev
或中的文件app
。 或者甚至是位于 session(即会话保存路径)中的文件,或者其他文件夹(例如 ssl 和 logs)。
答案1
- Chroot 设置“根”目录 - 您无法在根目录之上导航。
- Chdir 只是改变了起始目录 - 仍然可以导航到其他目录(包括该目录上方的目录)。
- 如果您未指定 chroot 路径,则适用“真实”根 - 并且您指定绝对 chdir。
- 如果您确实指定了 chroot 路径,那么您指定了相对于 chroot 路径(重新定义根目录)的路径。
您建议的设置看起来非常好。
- 起始路径将是 chroot 路径 + chdir 路径
- 该应用程序将能够访问 chroot 路径下的所有文件(除非存在其他限制 - 例如 php_openbasedir、权限等)。
附注:根据您所显示的文档结构,您的 php 应用程序也将有权访问您的 nginx.conf 和 php-fpm.conf,这似乎是您可能想要更改的内容(至少使文件对该用户为只读)。