You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP-FPM与Nginx多站点安全隔离验证疑问:权限不匹配的PHP文件仍能正常访问

PHP-FPM与Nginx多站点安全隔离验证疑问:权限不匹配的PHP文件仍能正常访问

你好,你的配置步骤是没问题的,之所以那个属于site1:site1的PHP文件能在site2站点正常访问,核心原因是文件权限的读取逻辑和你对隔离的预期有偏差,咱们来拆解清楚:

  • 首先,目录权限是关键:你给/var/www/site2设置了770权限,且所有者是site2:site2,这意味着site2用户(也就是site2站点的PHP-FPM进程运行身份)完全有权限进入这个目录,不管目录里的文件属于谁。
  • 其次,文件本身的权限:如果那个异常文件的权限是常见的644(所有者读/写,组读,其他用户读),那么site2用户作为“其他用户”,是拥有该文件的读权限的——PHP-FPM进程只需要能读取文件内容,就能加载并执行它,并不要求文件必须属于当前运行用户。
  • 你配置的隔离核心是执行身份的隔离,而不是“只能访问同所有者的文件”:也就是说,哪怕这个文件属于site1,它执行时的权限是site2用户的权限,而不是site1的。举个例子,如果这个文件尝试修改site2目录下的其他文件,或者访问site1站点的目录,它会受到site2用户的权限限制,这才是隔离的真正意义。

你可以做个简单的测试来确认隔离是否生效:

  1. 在那个权限不匹配的PHP文件里添加一段代码:
<?php
file_put_contents('test_isolation.txt', 'verify user');
?>
  1. 访问这个页面后,查看生成的test_isolation.txt的所有者:
ls -l /var/www/site2/test_isolation.txt

你会发现文件所有者是site2:site2,这就证明PHP代码确实是用site2用户身份执行的,你的隔离配置已经生效了。

如果想要让site2站点无法访问非site2所有者的文件,你需要调整文件的权限,比如把那个异常文件的其他用户权限去掉(改成640),这样site2用户就无法读取它,访问时才会触发权限错误。

备注:内容来源于stack exchange,提问作者Frank Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 13:03:08