![如何防止用户在 php-fpm 和 nginx 中访问另一个用户文件,就像 suphp 所做的那样](https://linux22.com/image/692871/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E7%94%A8%E6%88%B7%E5%9C%A8%20php-fpm%20%E5%92%8C%20nginx%20%E4%B8%AD%E8%AE%BF%E9%97%AE%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7%E6%96%87%E4%BB%B6%EF%BC%8C%E5%B0%B1%E5%83%8F%20suphp%20%E6%89%80%E5%81%9A%E7%9A%84%E9%82%A3%E6%A0%B7.png)
我正在使用 Nginx 和 PHP-FPM,并且有很多用户,每个用户都有自己的用户名和组,但我看到每个 php 执行都以 id、uid、gid nobody 的身份运行,而且我知道 php-fpm.conf 的用户和组配置为 nobody
我尝试使用池,但没有成功
[website.com]
user = user1
group = user1
listen = /var/run/php5-fpm-user1.sock
listen.owner = user1
listen.group = user1
;listen.mode = 0666
pm = ondemand
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
而且每次 php 运行都是nobody
从显示的 php shell(甚至来自 user1)
uid=99(nobody) gid=99(nobody) groups=99(nobody)
ps -aux| grep nginx
root 11736 0.0 0.0 964508 2120 ? Ss 13:14 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
root 11737 0.0 0.0 967460 4012 ? S 13:14 0:00 nginx: worker process
root 11738 0.1 0.0 970668 5316 ? S 13:14 0:01 nginx: worker process
root 11739 0.0 0.0 967588 4000 ? S 13:14 0:00 nginx: worker process
root 11741 0.0 0.0 967464 4604 ? S 13:14 0:00 nginx: worker process
root 11742 0.0 0.0 966428 3448 ? S 13:14 0:00 nginx: worker process
root 11744 0.0 0.0 966428 3648 ? S 13:14 0:00 nginx: worker process
root 11745 0.0 0.0 966428 3520 ? S 13:14 0:00 nginx: worker process
root 11746 0.0 0.0 966428 3484 ? S 13:14 0:00 nginx: worker process
root 11749 0.0 0.0 964672 2412 ? S 13:14 0:00 nginx: cache manager process
ps -aux| grep php (for all another user expect user1)
root 11760 0.0 0.0 1232104 6512 ? Ss 13:14 0:00 php-fpm: master process (/etc/php/php-fpm.conf)
nobody 13568 7.3 0.6 1307036 107936 ? S 13:21 0:41 php-fpm: pool www
nobody 13627 7.6 0.6 1306808 111000 ? S 13:22 0:37 php-fpm: pool www
nobody 13628 7.4 0.6 1291900 99348 ? S 13:22 0:36 php-fpm: pool www
nobody 13629 7.0 0.6 1306748 109308 ? S 13:22 0:33 php-fpm: pool www
ps -aux| grep user1
gerges 15586 7.0 0.0 1231908 13464 ? S 13:32 0:00 php-fpm: pool san-gerges.com
来自 user1 的 php shell
uid=99(nobody) gid=99(nobody) groups=99(nobody)
问题是,如果文件夹权限为 755,我可以轻松访问其他用户的文件,也可以读取文件内容。避免这种情况的唯一方法是将所有文件夹的权限设置为 711,但某些脚本不支持此方法
有没有办法阻止任何用户访问另一个用户文件并使用 php-fpm 和 nginx 以他们的所有者身份运行脚本,就像 SuPHP 所做的那样。
答案1
通常,你会将 php-fpm 用户绑定与 PHP open_basedir 限制结合起来,将用户锁定在他们自己的目录中,即:
/etc/php.ini
open_basedir = /home/username