ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

webdav:5分钟跑通的单二进制WebDAV文件服务器

webdav:5分钟跑通的单二进制WebDAV文件服务器 webdav5分钟跑通的单二进制WebDAV文件服务器【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdavwebdav 是一个用 Go 写的轻量级 WebDAV 服务器单二进制、单 YAML 配置把一个本地目录变成任何设备都能挂载的网络盘。没有数据库没有框架一个文件就能跑起来。它和自建 Apache mod_dav 差在哪咱们别逐项列先说透一件事如果你的需求就是把文件夹用 WebDAV 协议分享出去那 webdav 作为一个 WebDAV 服务器就是最短路径。你可以把它理解成一个只认密码的共享网盘只不过门的协议是标准 WebDAV走的是 HTTPWindows、macOS、手机上的 App 都能直接连不用装任何专用客户端。webdavApache mod_dav部署一个二进制 一个 yaml秒级启动装 Apache、配 vhost、管 .htaccess半天起步按用户控权配置里直接写每个用户的 CRUD 和路径规则靠目录结构 .htaccess 拼改起来费劲运行成本单进程几十 MB 内存就够Apache 全家桶功能多但偏重最短路径跑起来这一段只给能跑起来的最小组合拉二进制、写配置、启动三步收工。拉个二进制先把源码拉下来编译一下产物就一个可执行文件需要 Go 环境git clone https://gitcode.com/gh_mirrors/we/webdav cd webdav go build -o webdav .也可以用 Docker官方镜像直接拉连编译都省了。写个最小配置接着新建一个config.yaml只写必填项能启动的最小集就这么几行port: 6065 # 监听端口按需改 directory: /data # 要分享的本地目录这就是服务器上的盘 permissions: R # 所有用户的默认权限R 表示只读 users: - username: test password: test123 # 本地测试明文够用上线前务必换成 bcryptpermissions 默认就是 R这个保守的默认值挺好后面讲场景时你会经常用到它。启动并验证把服务跑起来然后在另一个终端用 curl 发一个 PROPFIND这是 WebDAV 的列目录请求能返回 XML 就说明链路通了./webdav -c config.yaml # 另一个终端发一个列目录请求做验证 curl -u test:test123 -X PROPFIND http://localhost:6065/响应里能看到D:href就说明服务起来了、认证也通过了第一段完成。一个真实场景从头走到尾回到刚才那个 webdav 服务器这段咱们把一个三个账号、三种权限级别的场景完整走一遍从需求到验证全程可以照抄。需求你支持的设计团队里有三类角色主笔 A-琪要上传、整理素材实习生小雯和阿麦只需要浏览、下载成片另外 QA 账号 auditor 要拉取一个归档目录做检查但不能碰其他内容。约束很具体每人只允许出现在自己的目录里只读账号绝对不能有写权限。配置在最小配置基础上扩成这样每个用户一个目录加一套权限port: 6065 directory: /srv/design # 全局默认目录没单独配的用户落到这里 permissions: R # 全局默认只读底线稳 users: - username: achi password: {bcrypt}$2y$10$... # ./webdav bcrypt 真实密码 的输出 directory: /srv/design permissions: CRUD # 主笔增删改查全放行 - username: xiaowen password: {bcrypt}$2y$10$... directory: /srv/design/finished permissions: R # 实习生只浏览不能写 - username: auditor password: {bcrypt}$2y$10$... directory: /srv/design permissions: none # auditor默认什么都不能碰 rules: - path: /archive/ permissions: R # 只放行归档目录的读为什么这么配auditor 的基线是none只把 /archive/ 一扇门打开。说白了这就是默认拒绝将来配错了最坏情况是啥也看不到而不是啥都能看到比全放开、只禁机密目录的思路安全得多。验证重启服务用三个账号各打一发预期结果直接写在注释里# achi 写新文件预期 201 curl -u achi:PASS -T local.txt http://localhost:6065/ # xiaowen 尝试写入预期 403 curl -u xiaowen:PASS -T local.txt http://localhost:6065/finished/ # auditor 读 archive 之外的文件预期 403 curl -u auditor:PASS http://localhost:6065/client-brief.md依次得到 201、403、403就说明三个角色都到位了这时候把整个服务挂到 nginx 后面就能对内网开放了。大概率会踩的3个坑⚠️ 下面这三个都真实发生过每一个都坑过半天时间。坑一明文密码留在配置里现象回头翻 config.yaml发现全组的密码都是明文而这个文件还提交进了 git。原因最小配置默认就是明文写法本地起服务时没人管这个等要上线就忘了换。解法用自带的子命令生成哈希再在配置里用{bcrypt}前缀写进去。跑./webdav bcrypt S3cret会输出一个$2y$10$...开头的串把它填到password: {bcrypt}$2y$10$...的位置就行。坑二反向代理后 COPY/MOVE 报 502现象直接 GET 文件都正常客户端一挪文件就 502 Bad Gateway。原因WebDAV 的 MOVE/COPY 会在 Destination 头里带完整 URL含域名nginx 默认不转发这个头后端认不出目标路径直接报错。解法在 nginx 里把 Destination 改写成纯路径再转发location / { proxy_pass http://127.0.0.1:6065; proxy_set_header Host $host; # 把 Destination 里的完整 URL 改写成路径 set $dest $http_destination; if ($http_destination ~ ^https?://[^/](?path.)$) { set $dest /$path; } proxy_set_header Destination $dest; }坑三rules 写在前面不生效现象把禁止机密目录写在放行全部前面结果机密目录照样能访问。原因规则是从列表末尾往前匹配的第一个命中的规则说了算所以写得靠后的规则优先级反而高。解法把你要真正生效的规则放到列表最后。比如/confidential/的拒绝规则要写在通用放行规则之后保证它先被命中。上线前确认单交给团队之前把这五条过一遍勾掉一条算一条传输加密前面挂 nginx/caddy 做 HTTPS或者配置里开tls: true并配好 cert 和 key密码强度所有用户都换成 bcrypt 哈希配置里没有明文残留进程守护systemd 里加Restarton-failure容器则加restart: always日志审计切 json 格式落盘log: {format: json, outputs: [stderr, /var/log/webdav.log]}最小暴露有反向代理时保留address: 127.0.0.1别直接绑 0.0.0.0 暴露端口接下来可以深挖什么想改权限逻辑的话规则匹配和 CRUD 判定全在权限定义里代码量不大配置怎么从全局默认级联到每个用户可以看配置解析用户一多这块就值得细读。把服务跑起来接下来就去挂载个盘看看团队到底用不用。【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表