admin管理员组

文章数量:1542784

nginx、php-fpm和mysql用户权限

前言

通常情况下,我们运行web应用的服务器有CentOS、Ubuntu、Debian等等的Linux发行版本。这时候,构成服务架构所必须的Nginx、php和MySQL等应用的权限控制就显得非常重要。

各个服务对代码目录的权限要求各不相同,缺少某些权限会造成服务无法读写或运行的错误,降低了权限要求又会存在被入侵修改的隐患。

这里我们就来总结一下nginx、php-fpm和mysql等等这些服务的权限划分。

一、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来查看:

可以看到nginx的主进程是root,其余子进程均是www的用户。

nginx.conf的配置:

二、php的权限配置

同样的,php的运行方式也是由主进程root运行,在子进程池(pool)里面配置由www用户执行,具体配置在php根目录下的etc\php-fpm.conf下,添加两行:

user = www
group = www

即可,同样用 ps aux | grep php 可以查看进程使用的用户身份:

三、MySQL服务的权限配置

通过 ps aux | grep mysql 可以看到MySQL服务是运行在mysql用户下的,该服务只需要我们在php代码连接mysql时带上mysql的用户名密码即可。

不需要统一为www,因为数据层需要与业务逻辑层隔离开,保证底层数据的安全。

mysql的授权主要是在mysql服务内新增用户和划分权限,用来控制php不同业务以不同权限范围的身份去连接,确保数据安全。

四、总结

nginx配置:
user www www;

php-fpm:
user = www
group = www

目录:
drwxr-xr-x 就是755

宝塔 php-fpm 给root权限

centos 7:
使用systemctl,Root 身份运行php-fpm
参考文献:https://blog.csdn/u012560213/article/details/80816103

宝塔 php-fpm 给root权限

/www/server/php/71/etc
[www]
listen.owner = root
listen.group = root
user = root
group = root

[root@bogon etc]# php-fpm -R   # 重启php

nginx 配置修改
user  root root;


[root@bogon etc]# ps aux | grep php  # 查看运行进程
root      9186  0.0  0.1 352100  6876 ?        Ss   17:59   0:00 php-fpm: master process (/www/server/php/71/etc/php-fpm.conf)
root      9187  3.1  2.2 406520 85652 ?        S    17:59   0:09 php-fpm: pool www
root      9188  1.9  0.8 357276 33624 ?        S    17:59   0:06 php-fpm: pool www
root      9189  1.8  0.8 357236 32396 ?        S    17:59   0:05 php-fpm: pool www
root      9190  0.7  0.5 355088 22296 ?        S    17:59   0:02 php-fpm: pool www
root      9191  0.7  0.5 355088 22568 ?        S    17:59   0:02 php-fpm: pool www
root      9301  1.5  2.2 414624 89128 ?        S    18:00   0:04 php-fpm: pool www
root      9305  0.6  0.5 355100 21644 ?        S    18:00   0:01 php-fpm: pool www
root      9869  0.0  0.0 112812   968 pts/2    S+   18:05   0:00 grep --color=auto php

[root@bogon etc]# vi /www/server/php/71/etc/php-fpm.d/www.conf.default

user = root
group = root


================php-fpm以root身份启动
[root@chaoge ~]# ps -aux | grep php-fpm
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      4539  0.0  0.0 205552  3716 ?        Ss   10:22   0:00 php-fpm: master process (/etc/php-fpm.conf)
apache    4540  0.0  0.0 205552  3332 ?        S    10:22   0:00 php-fpm: pool www
apache    4541  0.0  0.0 205552  3332 ?        S    10:22   0:00 php-fpm: pool www
apache    4542  0.0  0.0 205552  3332 ?        S    10:22   0:00 php-fpm: pool www
apache    4543  0.0  0.0 205552  3332 ?        S    10:22   0:00 php-fpm: pool www
apache    4544  0.0  0.0 205552  3332 ?        S    10:22   0:00 php-fpm: pool www
root      4556  0.0  0.0 103248   888 pts/1    S+   10:22   0:00 grep php-fpm

找到 www.conf 文件:user = apache 改成 user = root

重新启动php-fpm
[root@chaoge ~]# php-fpm -R
[root@chaoge ~]# ps -aux | grep php-fpm
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      5497  0.0  0.0 205552  3712 ?        Ss   10:36   0:00 php-fpm: master process (/etc/php-fpm.conf)
root      5498  0.0  0.0 205552  3196 ?        S    10:36   0:00 php-fpm: pool www
root      5499  0.0  0.0 205552  3196 ?        S    10:36   0:00 php-fpm: pool www
root      5500  0.0  0.0 205552  3196 ?        S    10:36   0:00 php-fpm: pool www
root      5501  0.0  0.0 205552  3200 ?        S    10:36   0:00 php-fpm: pool www
root      5502  0.0  0.0 205552  3200 ?        S    10:36   0:00 php-fpm: pool www
root      5524  0.0  0.0 103252   888 pts/1    S+   10:36   0:00 grep php-fpm

参考文献:https://www.qttc/461-php-fpm-run-as-root.html

1 编辑文件
[root@localhost etc]# vi /www/server/php/74/etc/php-fpm.conf

设置此四项为root

listen.owner = root
listen.group = root
user = root
group = root

修改后

[global]
pid = /www/server/php/74/var/run/php-fpm.pid
error_log = /www/server/php/74/var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi-74.sock
listen.backlog = 8192
listen.allowed_clients = 127.0.0.1
listen.owner = root
listen.group = root
listen.mode = 0666
user = root
group = root
pm = dynamic
pm.status_path = /phpfpm_74_status
pm.max_children = 80
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 20
request_terminate_timeout = 100
request_slowlog_timeout = 30
slowlog = var/log/slow.log

2、NGINX修改权限

3 重启PHP

[root@localhost etc]# php-fpm -R

[root@localhost etc]# ps -aux | grep php-fpm
root      13570  0.0  0.1 249732  7452 ?        Ss   23:26   0:00 php-fpm: master process (/www/server/php/74/etc/php-fpm.conf)
root      13571  0.2  0.4 256400 18244 ?        S    23:26   0:01 php-fpm: pool www
root      13572  0.0  0.1 249732  6576 ?        S    23:26   0:00 php-fpm: pool www
root      13573  0.0  0.1 249732  6576 ?        S    23:26   0:00 php-fpm: pool www
root      13574  0.0  0.1 249732  6576 ?        S    23:26   0:00 php-fpm: pool www
root      13575  0.0  0.1 249732  6576 ?        S    23:26   0:00 php-fpm: pool www
root      13587  0.0  0.1 249732  6576 ?        S    23:26   0:00 php-fpm: pool www
root      14087  0.0  0.0 112812   972 pts/1    S+   23:33   0:00 grep --color=auto php-fpm

本文标签: 宝塔权限fpmPHProot