nginx - Web服务器运行在www-data:www-data的用户组及用户下,php程序应该设置到哪个用户组及用户,才能保证安全性?
回复内容:
就假如Nginx + PHP-FPM的组合好了,该如何设置PHP程序的用户组及用户,保证程序执行的安全性?
单独设置个用户及用户组呗。php-fpm 和 Web 服务器的用户没什么关系的,只要能相互通信就可以了。不同的服务尽量使用独立的用户和用户组来运行,这样万一哪个服务出了问题对方也只能得到那个服务所使用的用户的权限而不太可能会牵连其它服务。
php-fpm 有个 php-fpm.d 文件夹(ubuntu 下 在pool.d),里面可以设置不同的运行配置给不同的程序。默认一般只有www.conf。也就是所有的 php 程序用里面的参数运行(这是单用户很危险的),包括用户,监听类型(port or socket),nginx 通过反代到具体的 port or socket。
建议:在php-fpm.d 下多几个类似 www.conf 配置文件,不同的端口或者套接字监听运行。使用不同的用户,程序也使用相应的用户,用户组。系统可以添加相应的用户,组。
PHP-FPM 以单独的用户(如 app)跑,最好每个网站都有一个单独的用户,网站相关的文件都属于该用户(app),权限740.
PHP-FPM 监听 Unix Socket, 所有者是 app, 权限 750.
Nginx 用默认的 www-data, 把 www-data 添加到与 app 同组。
这样 Nginx 就能读 app 的文件了,但不能写,其他用户不能读也不能写,同时也只有 Nginx 能向 PHP-FPM 发起请求。
PHP-FPM 可以随意读写网站相关的文件,WordPress 这类程序的自动升级等功能都没有问题。
只要保证你启动PHP服务的用户对PHP需要操作的文件有足够的权限即可,其他的权限统统设成最低。
如果是多个网站我建议还是分开php-fpm的配置,分别使用不同的组和用户,这样可以最大的保证安全性。
我的PHP-CGI是跑得www-data用户,so,PHP文件也是www-data用户,权限是644
下一篇: thinkphp判断商品是否存在