nginx worker 进程应以专用低权限用户运行以增强安全。需创建系统级无登录用户(如 nginx),并通过 nginx.conf 全局块顶部的 user nginx nginx; 指令显式配置,确保主进程 root 启动而 worker 降权执行。

让 Nginx Worker 进程以非 root 用户运行,是生产环境中最基础、最有效的提权防护手段。主进程仍需 root 启动(用于绑定 80/443 端口、读取私钥、加载配置),但所有处理请求、读文件、写日志的 Worker 必须降权——哪怕 PHP 或 Nginx 自身存在 RCE 漏洞,攻击者也只能拿到低权限 shell,无法修改系统关键文件或逃逸容器。
创建专用无登录用户
不要用 nobody(多服务共用、边界模糊)或普通账户(可能带 shell 或 sudo 权限)。执行:
- useradd -r -s /sbin/nologin -M nginx —— 创建系统级、无家目录、禁止登录的专用用户
- id nginx —— 验证 UID/GID 是否存在(如 uid=998(nginx) gid=996(nginx))
- passwd -S nginx —— 确认状态为 LK(锁定,无密码)
在 nginx.conf 全局块顶部显式配置 user 指令
该指令必须位于 main context 最顶部(events 块之前),否则不生效:
- user nginx nginx; —— 同时指定用户和组(推荐保持一致)
- user root root;、user nobody; 或留空
- USER root,改用 USER 998:996(与 host UID/GID 对齐)
同步收紧关键路径权限
Worker 用户权限再低,若能读私钥、写配置或遍历目录,仍可能被绕过:
-
网站根目录(如
/usr/share/nginx/html):chown -R root:nginx + chmod -R 750(root 可写,nginx 可读不可写) -
SSL 私钥(如
/etc/ssl/private/example.key):chmod 600 + chown root:root(仅主进程读取,Worker 复用内存上下文) -
日志目录(
/var/log/nginx):chown -R nginx:nginx + chmod -R 700 -
配置目录(
/etc/nginx):chown -R root:root + chmod -R 755;配置文件单独设为 644
验证降权是否真正落地
仅改配置 ≠ 生效,必须通过进程级检查确认:
- ps aux | grep nginx —— 应看到一行 root … master process,其余多行是 nginx … worker process
- 若全为 root:检查是否漏执行 nginx -s reload,或配置被
include覆盖 - 若显示 nobody:说明 user 指令未命中或用户不存在,用 id nginx 和 nginx -t 排查
- sudo -u nginx ls -l /usr/share/nginx/html/index.html —— 应可读不可写











