一般状况下,咱们运行web应用的服务器有CentOS、Ubuntu、Debian等等的Linux发行版本。这时候,构成服务架构所必须的Nginx、php和MySQL等应用的权限控制就显得很是重要,各个服务对代码目录的权限要求各不相同,缺乏某些权限会形成服务没法读写或运行的错误,下降了权限要求又会存在被入侵修改的隐患。这里咱们就来总结一下nginx、php-fpm和mysql等等这些服务的权限划分。php
1、web服务器Nginx权限
PHP的运行框架一般都是结合Nginx组成LNMP或者结合Apache组成LAMP的架构,这里用Nginx做为例子讲述一下Nginx服务运行所须要的权限。
咱们知道,Nginx自己不能解析PHP的语法,因此Nginx对于静态文件(如HTML等)会直接解析返回结果,可是对于PHP的文件,Nginx会转交给PHP的解释器php-fpm进行处理,处理完后再返回响应给客户端浏览器。
所以,咱们代码目录下须要统一Nginx和php的服务所需权限。
①若是统一使用root用户,则通常游客帐户没法访问应用,而nginx配置成以root运行的话会存在很大的安全隐患,一旦被攻击就会被获取root身份进行系统的一切操做。
②而若是统一将代码目录权限所有设置为rwxrwxrwx,则存在用户直接经过浏览器修改代码目录的隐患。
因此最好的办法就是统一归类到一个新的用户组里面,经过给该用户组分配Nginx和php运行必要的权限,来实现对web应用的权限目录管理。一般状况下,许多团队都会把这个用户组取名www,由www用户来统一管理代码目录权限。
咱们能够看到Nginx的配置文件nginix.conf里面划分的运行权限就是配置到了www用户下,所以Nginx的子进程也是由www用户执行,能够经过ps aux | grep nginx来查看:mysql
能够看到nginx的主进程是root,其他子进程均是www的用户nginx
nginx.conf的配置:web
2、php的权限配置
一样的,php的运行方式也是由主进程root运行,在子进程池(pool)里面配置由www用户执行,具体配置在php根目录下的etc\php-fpm.conf下,添加两行:
user = www
group = www
便可,一样用ps aux | grep php能够查看进程使用的用户身份:sql
3、MySQL服务的权限配置
经过ps aux | grep mysql能够看到MySQL服务是运行在mysql用户下的,该服务只须要咱们在php代码链接mysql时带上mysql的用户名密码便可,不须要统一为www,由于数据层须要与业务逻辑层隔离开,保证底层数据的安全。mysql的受权主要是在mysql服务内新增用户和划分权限,用来控制php不一样业务以不一样权限范围的身份去链接,确保数据安全。浏览器
4、总结
nginx配置:
user www www;
php-fpm:
user = www
group = www安全
转自:https://blog.csdn.net/dream_successor/article/details/78615825?locationNum=8&fps=1服务器