我按照以下教程隔离了我的两个网站。
https://www.vultr.com/docs/use-php-fpm-pools-to-secure-multiple-web-sites/
这是我所做的:
创建两个用户,然后为他们分配权限。
$ sudo useradd site1 $ sudo useradd site2 $ usermod -a -G site1 www-data $ usermod -a -G site2 www-data
分配的目录权限
$ sudo mkdir /var/www/site1 $ sudo chown -R site1:site1 /var/www/site1 $ sudo mkdir /var/www/site2 $ sudo chown -R site2:site2 /var/www/site2 $ sudo chmod 770 /var/www/site2
创建了两个 fpm 池
$ sudo cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/fpm-site1.conf $ sudo cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/fpm-site2.conf
然后配置这些池
- 更改了括号内的顶行,将池名称从 [www] 更改为 [site1]。
- 将 user = www-data 行更改为 user = site1。
- 将行 group = www-data 更改为 group = site1。
- 将listen = /var/run/php/php7.4-fpm.sock 行更改为listen = /var/run/php/php7.4- site1-fpm.sock
对第二个池也做了同样的事情。
配置 nginx 并在每个站点中定义这些池
location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm-site1.sock; include snippets/fastcgi-php.conf; }
对 site2 执行相同操作,然后重新启动 php-fpm 和 nginx。
现在来解决问题了。第一个站点的所有 PHP 页面均由 拥有,site1:site1
而第二个站点则由 拥有site2:site2
。除了拥有的第二个站点的一页之外site1:site1
。我预计当我尝试在浏览器中访问第二个站点的该页面时,我会收到一些错误(因为它不属于site2:site2
),但我没有收到任何错误并且页面正常打开。您认为它工作正常吗?我对它应该如何工作的理解不正确?或者第二个站点中的页面不应该在浏览器中打开?
您只更改了
/var/www/site2
目录本身的权限,但没有更改其中文件的权限 - 它们可能仍然是世界可读的(具有 0644 权限)。如果“其他”可以读取该文件,则所有权并不重要,因为site2
用户帐户仍然有权读取该文件。