nginx、php-fpm和mysql的用户权限如何配置

大哥们有没有人讲详细点的我想说明下,nginx、php-fpm和mysql的用户权限如何配置
最新回答
k女神经病

2026-10-21 17:50:04

Nginx、PHP-FPM和MySQL的用户权限配置需遵循最小权限原则,确保服务安全性和功能正常。以下是具体配置方法:

Nginx权限配置
Nginx主进程通常以root用户运行以绑定低权限端口(如80/443),但子进程(处理请求的核心部分)应切换至非特权用户(如www)。在nginx.conf中配置:
user www www;
此配置指定子进程以www用户和组运行。代码目录权限需满足:

  • 目录权限:755(drwxr-xr-x),确保www用户可读取目录内容,其他用户仅可执行(进入目录)。
  • 文件权限:644(-rw-r--r--),确保www用户可读取文件,其他用户无写入权限。
    关键点:避免使用root运行子进程或设置777权限,否则可能导致安全漏洞或代码被恶意修改。

PHP-FPM权限配置
PHP-FPM(FastCGI进程管理器)同样需隔离权限。在php-fpm.conf或池配置文件(如

www.conf
)中设置:
user = www
group = www
此配置使PHP子进程以www用户运行。代码目录权限需与Nginx一致(755目录、644文件),确保PHP进程能读取文件但无法修改非授权内容。
验证方法:通过ps aux | grep php-fpm检查进程用户是否为www。

MySQL权限配置
MySQL服务默认以mysql用户运行,与Web服务(www)隔离。权限管理需在MySQL内部完成:

  1. 创建专用用户:避免使用root连接数据库,例如:
    CREATE USER 'web_user'@'localhost' IDENTIFIED BY 'password';
  2. 分配最小权限:仅授予必要数据库的读写权限,如:
    GRANT SELECT, INSERT ON app_db.* TO 'web_user'@'localhost';
  3. 禁用远程访问:若无需远程连接,限制用户仅能从本地访问。
    关键点:MySQL用户与系统用户(如www)分离,防止Web应用漏洞导致数据库被直接攻击。

总结

  • Nginx:子进程用www用户,目录权限755,文件644。
  • PHP-FPM:进程用www用户,权限与Nginx一致。
  • MySQL:服务用mysql用户,应用连接使用独立数据库用户并限制权限。
    通过分层隔离权限,可平衡安全性与功能性,避免单点漏洞影响整个系统。