核心是让 nginx worker 进程以专用低权限用户+组运行,彻底剥离 root 权限:需创建无登录系统用户(useradd -r -s /sbin/nologin -m nginx),在 nginx.conf 全局块顶部显式配置 user nginx nginx;,验证 ps 中 worker 进程 uid 为 nginx,并严格设置配置目录755(root:root)、私钥600(root:root)、根目录750(root:nginx)、上传目录755(nginx:nginx)且禁脚本执行,同时关闭 autoindex、ssi、server_tokens 等高危项。

核心是让 Nginx Worker 进程以专用低权限用户+组运行,彻底剥离 root 权限,从源头限制攻击面。主进程仍需 root 启动(绑定 80/443、读配置等),但所有实际处理请求的 Worker 必须降权到最小必要身份。
创建专用运行用户与组
禁用共享账号(如 nobody 或 www-data),避免权限交叉污染:
- 执行
useradd -r -s /sbin/nologin -m nginx创建无登录能力的系统用户 - 确保该用户不属于 wheel、sudo 等特权组
- 验证命令:
id nginx应仅显示 uid/gid,无额外组成员关系
显式声明 user 指令并校验生效
在 nginx.conf 最顶层(全局块) 添加明确配置:
-
user nginx nginx;—— 不写则回退默认行为,必须显式指定 - 重启后检查进程:
ps aux | grep nginx,确认 worker 进程 UID 显示为 nginx,而非 root 或 nobody - 若使用宝塔等面板,需关闭其“自动覆盖 user 配置”选项,防止被重置
严格约束文件与目录权限边界
用户权限再低,若能读取私钥或写入配置,仍可导致提权:
- 配置目录
/etc/nginx:属主 root:root,权限755(禁止 nginx 用户写入) - SSL 私钥文件:权限
600,属主 root:root(Worker 进程无需读私钥,由主进程加载后传递) - 静态资源根目录(如
/var/www/html):属主 root:nginx,权限750(目录可遍历,文件只读) - 上传目录(如有):单独路径,属主 nginx:nginx,权限
755,且 location 中禁用脚本执行
配套关闭高危模块与暴露项
权限收紧后,还需堵住可能绕过用户隔离的漏洞路径:
- 确认配置中无
autoindex on;,防止目录遍历泄露结构 - 禁用
ssi on;和未审计的 Lua/Perl 模块,避免服务端代码执行 - 设
server_tokens off;,隐藏版本号,降低针对性攻击成功率 - 日志路径(
access_log/error_log)属主设为 root:nginx,权限750,确保 Worker 可追加但不可删改











