nginx worker进程须以非特权用户运行以提升安全性。主进程用root绑定端口,worker降权为www-data或nginx等专用用户,并配以最小文件权限、日志归属及systemd安全限制。

让Nginx的worker进程以非特权用户身份运行,是提升系统安全等级最基础也最关键的一步。主进程仍需root权限完成端口绑定(如80/443)和配置加载,但实际处理HTTP请求的worker进程必须降权,避免因漏洞导致提权风险。
确认并设置运行用户与组
编辑 /etc/nginx/nginx.conf,在全局块(main context)顶部添加或修改 user 指令:
- Debian/Ubuntu 系统常用:user www-data www-data;
- RHEL/CentOS 系统常用:user nginx nginx;
- 若需自定义,用 useradd -r -s /sbin/nologin nginx-worker 创建无登录能力的系统用户,并确保该用户对网站根目录、日志路径等有最小必要访问权限
验证用户权限是否生效
重启服务后,通过进程查看确认权限分离是否成功:
- 执行 ps aux | grep nginx
- 应看到一行 root 开头的 master process,以及多行非root用户(如 www-data 或 nginx)开头的 worker process
- 若所有进程都显示为 root,说明配置未生效或Nginx未重载;若worker进程显示为 nobody 或其他不匹配用户,需检查配置语法及用户是否存在
配套权限与目录控制
仅改运行用户不够,还需同步收紧文件系统权限:
- 网站根目录(如 /var/www/html)建议设为 750,属主为部署用户,属组为Nginx运行组,worker可读不可写
- 日志目录(如 /var/log/nginx)应归属Nginx运行用户,保证worker能追加写入
- 禁用 777、666 等宽松权限,尤其避免web目录可执行或可写
- 在server或location块中启用 disable_symlinks on if_not_owner; 防止符号链接越权访问
加固systemd服务单元(如使用systemd)
对于现代Linux发行版,可进一步限制Nginx服务的运行环境:
- 编辑 /etc/systemd/system/multi-user.target.wants/nginx.service 或对应单元文件
- 在 [Service] 段添加:
NoNewPrivileges=yes
RestrictSUIDSGID=yes
ProtectHome=true
ProtectSystem=full - 执行 systemctl daemon-reload && systemctl restart nginx 生效











