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用户的权限限制,这才是隔离的真正意义。
你可以做个简单的测试来确认隔离是否生效:
- 在那个权限不匹配的PHP文件里添加一段代码:
<?php file_put_contents('test_isolation.txt', 'verify user'); ?>
- 访问这个页面后,查看生成的
test_isolation.txt的所有者:
ls -l /var/www/site2/test_isolation.txt
你会发现文件所有者是site2:site2,这就证明PHP代码确实是用site2用户身份执行的,你的隔离配置已经生效了。
如果想要让site2站点无法访问非site2所有者的文件,你需要调整文件的权限,比如把那个异常文件的其他用户权限去掉(改成640),这样site2用户就无法读取它,访问时才会触发权限错误。
备注:内容来源于stack exchange,提问作者Frank Martin
相关产品推荐
相关产品推荐

