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内部完成:
- 创建专用用户:避免使用root连接数据库,例如:
CREATE USER 'web_user'@'localhost' IDENTIFIED BY 'password'; - 分配最小权限:仅授予必要数据库的读写权限,如:
GRANT SELECT, INSERT ON app_db.* TO 'web_user'@'localhost'; - 禁用远程访问:若无需远程连接,限制用户仅能从本地访问。
关键点:MySQL用户与系统用户(如www)分离,防止Web应用漏洞导致数据库被直接攻击。
总结
- Nginx:子进程用www用户,目录权限755,文件644。
- PHP-FPM:进程用www用户,权限与Nginx一致。
- MySQL:服务用mysql用户,应用连接使用独立数据库用户并限制权限。
通过分层隔离权限,可平衡安全性与功能性,避免单点漏洞影响整个系统。