CloudPanel 文件上传失败 (Permission Denied) 问题及解决方案

by

zhipeng

在使用 CloudPanel 时,我们在 File Manager 上传文件时遇到了 Permission denied 错误。经过深入排查和多次测试,成功找到了解决方法。为帮助其他遇到类似问题的用户,这里整理了详细的分析与解决方案。

问题描述

在 CloudPanel 面板中上传文件时,会出现 500 错误,通过查看相关日志 error.log 会有以下提示:

[crit] open() "/var/lib/nginx/body/0000000001" failed (13: Permission denied)

环境信息

  • 操作系统:Debian
  • Web Server:Nginx
  • 控制面板:CloudPanel
  • PHP 版本:多版本 PHP-FPM(7.1 ~ 8.4)

问题分析

1. Nginx 的上传临时目录

Nginx 默认会将上传文件临时存储在 /var/lib/nginx/body/ 目录内,除非在配置中明确指定 client_body_temp_path

在本次问题中,client_body_temp_path 未显式配置,因此 Nginx 使用了默认的 /var/lib/nginx/body/ 目录。

2. 发现的权限异常

执行以下命令检查该目录的权限:

ls -ld /var/lib/nginx/body/

结果为:

drwxr-x--- 2 root clp 4096 Mar 24 15:06 /var/lib/nginx/body/

发现问题:

  • 该目录的 所有者root,而非 Nginx worker 进程的用户 clp
  • 由于 clp 只属于群组,没有写入权限,导致 Nginx 无法写入该临时文件夹。

解决方法

1. 修改 /var/lib/nginx/body/ 的所有者

将目录的所有者更改为 Nginx worker 进程用户(在本次案例中为 clp):

sudo chown clp:clp /var/lib/nginx/body/
sudo chmod 750 /var/lib/nginx/body/

解释:

  • chown clp:clp — 更改该目录的所有者和群组为 clp(确保 Nginx 可写入)
  • chmod 750 — 授予 clp 用户写入权限,群组 clp 仅读权限,其他用户无权限(✅安全)

2. 上传文件测试

再次通过 CloudPanel 的 File Manager 上传文件,成功

相关文章

发表评论