client_body_temp_path是nginx存储超限请求体临时文件的路径,由worker进程以非root用户写入,需严格设为700权限并归属worker用户(如www-data),否则可能被滥用为提权跳板。

client_body_temp_path 是 Nginx 处理大 POST 请求或文件上传时写入临时文件的关键路径。它本身不直接导致提权,但若权限配置不当——比如目录属主错误、开放写权限给无关用户、或被 root 启动的 Worker 进程滥用——就可能成为攻击跳板,尤其在配合 user root 配置或 sudo 权限场景下,极易引发任意文件读取甚至本地提权。
client_body_temp_path 的作用与触发条件
当客户端请求体(如表单提交、文件上传)大小超过 client_body_buffer_size(默认 8K–16K),Nginx 会将超出部分落盘到 client_body_temp_path 指定的目录中。这个过程由 Worker 进程完成,因此该目录必须对 Worker 实际运行用户(非 Master 进程)具备读、写、执行(rwx)权限。
常见误判是认为“只要目录存在就能用”,其实关键在于:
- 目录必须由 Worker 用户创建或拥有,不能仅靠 chmod 755 就解决;
- 父级路径每层都需对 Worker 用户可遍历(即所有上级目录至少有 x 权限);
- 若使用多级子目录(如
client_body_temp_path /data/nginx_temp 2 2;),Nginx 会自动创建带哈希结构的子目录,但根路径仍需提前授权。
权限配置的正确做法
核心原则:最小权限 + 明确属主。不要用 root 启动 Worker,也不要让其他用户能写入该目录。
- 确认 Worker 用户:执行
ps aux | grep nginx,看 worker process 的 USER 列(通常是 www-data 或 nginx); - 设置目录归属:
sudo chown -R www-data:www-data /var/lib/nginx/body(以实际路径为准); - 设严格权限:
sudo chmod 700 /var/lib/nginx/body(禁止 group/o 写入); - 确保配置中 user 指令已正确定义,且未注释或写成
user root root; - 避免将 temp 路径设在 /tmp、/home 或 Web 可访问路径下(如 /var/www/tmp),防止路径穿越或意外暴露。
提权风险的真实来源与规避
client_body_temp_path 本身不是漏洞,但它是提权链中的关键一环。真实风险来自组合配置:
- user root; + client_body_temp_path /etc/nginx/conf.d/ → Worker 以 root 写入临时文件,可能覆盖配置或触发模块加载;
- sudo 权限允许普通用户重启 Nginx,配合恶意配置(如 root 指令+autoindex)→ 可读取 /root/.ssh/id_rsa 等敏感文件;
- 目录权限为 777 或属组包含 untrusted 用户 → 其他账户可替换临时文件内容,干扰业务或注入恶意 payload。
防御要点:禁用 user root;禁用 sudo nginx 无限制权限;定期审计 client_body_temp_path 所在分区的挂载选项(如 noexec,nodev);对生产环境关闭 autoindex 和 server_tokens。
验证与日常检查建议
上线前和每次配置变更后,务必验证三项:
- Worker 用户能否在 client_body_temp_path 下成功创建并删除测试文件(可用
sudo -u www-data touch /path/test && rm /path/test); - error.log 中是否仍有
Permission denied关于 client_body_temp 的报错; - 执行
find /var/lib/nginx/body -type f -mtime +7清理陈旧临时文件,避免磁盘占满或残留攻击痕迹。
不复杂但容易忽略:权限问题往往不出现在首次启动,而是在某次大流量上传后突然爆发。把 client_body_temp_path 当作日志目录一样对待——固定属主、限制权限、定期清理。











