You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Nginx DAV PUT请求rename()报(13: Permission denied)权限错误?

解决Nginx DAV PUT请求rename()权限拒绝(13: Permission denied)错误

先拆解下你遇到的问题:当往已存在的文件夹根目录PUT index.html时,Nginx执行rename()操作失败报权限拒绝,这其实和两个核心权限层面有关——Nginx运行用户对目标文件夹的底层文件系统权限,以及Padavan固件的分区权限限制,结合你的环境(Padavan+Entware nginx-extras 1.13.6-1),具体修复点如下:

1. 修正Nginx运行用户对目标文件夹的写入权限

你的配置里Nginx以nobody nogroup运行,但dav_access只是控制WebDAV的访问权限,真正决定文件操作能否执行的是文件系统的目录权限:

  • 先检查目标文件夹的所有者与组:执行命令
    ls -ld /path/to/your/target/folder
    
    如果输出的所有者不是nobody、组不是nogroup,那Nginx的nobody用户就没有修改目录内文件的权限(PUT操作流程是先上传临时文件,再rename到目标路径,这两步都需要目录的写入权限)。
  • 修复方式二选一:
    • 直接将目标文件夹的所有者改为nobody:nogroup:
      chown -R nobody:nogroup /path/to/your/target/folder
      
    • 给文件夹的组添加写入权限(若文件夹组已为nogroup):
      chmod -R g+w /path/to/your/target/folder
      

2. 检查Padavan固件的分区权限限制

Padavan的系统分区(比如/www)可能默认有只读或特殊权限管控,而Entware安装的Nginx更适合在/opt分区下操作:

  • 确认你的WebDAV目标目录是否在/opt下(Entware默认可写分区),如果在系统分区,建议将WebDAV根目录迁移到/opt,或者修改系统分区的挂载参数为可写(需谨慎操作,避免影响固件稳定性)。
  • 另外你提到切换客户端用户为admin仍无效,这是因为WebDAV请求最终是由Nginx的运行用户(nobody)执行文件操作,和客户端登录用户无关——除非你配置了用户与文件系统权限的映射规则,显然你当前没做这个配置。

3. 验证Nginx临时文件目录的权限

Nginx处理PUT请求时会先将文件写入临时目录(默认是/tmp),需确保nobody用户对该目录有写入权限:

  • 检查/tmp权限:
    ls -ld /tmp
    
    正常权限应为drwxrwxrwt,确保nobody能在此创建临时文件。
  • 若权限异常,执行命令恢复:
    chmod 1777 /tmp
    

最后验证

修改完所有权限后,重启Nginx生效:

/opt/etc/init.d/S80nginx restart

再用Cyberduck测试PUT操作,rename()权限拒绝的问题应该就能解决了。

内容的提问来源于stack exchange,提问作者Pro Backup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:22:35