详解nginx、php-fpm用户权限
通常情况下,我们运行 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 可以查看进程使用的用户身份:
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: