php-fpm 和 nginx 安全隔离不起作用....或者可能是我的理解不正确

php-fpm 和 nginx 安全隔离不起作用....或者可能是我的理解不正确

我按照以下教程对我的两个网站进行了隔离。
https://www.vultr.com/docs/use-php-fpm-pools-to-secure-multiple-web-sites/

这是我所做的:

  1. 创建两个用户然后为他们分配权限。

    $ sudo useradd site1  
    $ sudo useradd site2  
    $ usermod -a -G site1 www-data  
    $ usermod -a -G site2 www-data  
    
  2. 分配目录权限

    $ 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  
    
  3. 创建了两个 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 
    
  4. 然后配置这些池

    • 将设置池名称的括号内的顶行从 [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

    对第二个池执行了同样的操作。

  5. 配置 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),但我没有收到任何错误并且页面正常打开。您认为它工作正常吗?我对它应该如何工作的理解是错误的?或者第二个站点中的页面不应该在浏览器中打开?

答案1

您只更改了/var/www/site2目录本身的权限,而没有更改其中文件的权限——它们可能仍可供所有人读取(具有 0644 权限)。如果文件可供“其他人”读取,则所有权并不重要,因为用户site2帐户仍具有读取文件的权限。

相关内容