
webdav5 分钟把一个目录变成 WebDAV 服务【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav想让手机、Mac、Windows 都能读写同一份文件又不想搭 Samba 或者买网盘webdav 是一个用 Go 写的独立 WebDAV 服务器一个二进制加一份 YAML 配置就能跑起来配了用户列表就自动启用 Basic 认证。下面按装好 → 跑通 → 调权限的顺序走一遍。和 Samba、网盘比它省了哪一步 最常见的用法是给个人设备做文件互通Mac 的 Finder 直接连接服务器填 WebDAV 地址Windows 用映射网络驱动器Linux 用 davfs2 或 rclone 挂载都不用装额外客户端软件。对比 Samba省掉的是协议配置那一层——不需要规划 share 名、处理 SMB 版本协商和域管理配置里直接写哪个用户能访问哪个目录。对比网盘省掉的是账号体系密码、目录、权限全在一个文件里。协议上它实现完整的 WebDAVPROPFIND、COPY、MOVE、MKCOL、LOCK/UNLOCK 都支持handler 入口里能看到方法分发。改一份六行配置首次启动就能用安装走 Go 工具链最省事go install github.com/hacdias/webdav/v5latest没有 Go 环境就克隆仓库自己编git clone https://gitcode.com/gh_mirrors/we/webdav cd webdav go build装完后在当前目录建一个config.yml这是最小可跑配置address: 0.0.0.0 port: 6065 directory: /data # 暴露给用户的目录 users: - username: admin password: admin # 明文仅用于本地测试然后执行webdav -c config.yml日志里出现listening就说明起来了。配置格式其实不限 YAMLJSON、TOML 都行不传-c时它会自动找当前目录和/etc/webdav/下的config.{json,toml,yaml,yml}解析优先级是命令行参数 环境变量 配置文件 默认值环境变量统一加WD_前缀比如WD_PORT。验证服务可用发一个 PROPFIND 请求curl -u admin:admin -X PROPFIND -H Depth: 1 http://localhost:6065/返回 XML 目录列表就通了。 想用 Docker 的话一条命令等价于上面整个流程docker run -p 6065:6065 \ -v ./config.yml:/config.yml:ro \ -v ./data:/data \ ghcr.io/hacdias/webdav -c /config.yml这个镜像是FROM scratch构建的只有静态二进制体积非常小。用 CRUD 四个字母配出按目录的权限隔离 这个项目最有辨识度的地方是权限模型每个用户的权限就是C建R读U改D删四个字母的组合比如CR表示只能看和新建。它不是简单的开关而是直接映射到 WebDAV 方法——在 permissions.go 的Allowed函数里能看到PUT覆盖已存在文件需要U、创建新文件只需要CMOVE同时要求R和D。用户级配置在 user.go每个用户都能覆盖自己的目录和权限permissions: R # 全局默认只读 users: - username: alice password: {bcrypt}$2y$10$xxxx # bcrypt 哈希 directory: /data/alice # 该用户被隔离到自己的目录 permissions: CRUD rules: - path: /private # 路径相对于用户目录 permissions: none # 这个子目录完全禁止访问 - regex: ^..pdf$ # 正则规则所有 PDF 可读可改 permissions: RU规则的匹配顺序值得注意从列表最后一条往前找第一条命中的规则生效所以更具体的规则写在后面。用户如果没写自己的 rules就继承全局的rules继承方式由rulesBehavior控制overwrite或append合并逻辑在 config.go 的ParseConfig里。密码别用明文webdav bcrypt 你的密码是内置子命令bcrypt.go直接把生成的哈希贴进配置。用户名和密码还支持{env}变量名占位密码从环境变量读配置文件就可以放心提交。手机备份能增量上传部分更新扩展 标准 WebDAV 里改文件中间一段只能整个重传。webdav 实现了 SabreDAV 的PATCH扩展partial_update.go客户端用X-Update-Range: bytes0-100、bytes-N或append指定要写的字节区间只传变化的部分。手机端的备份 App如 SeedVault 这类 WebDAV 客户端靠它做增量同步几百 MB 的数据库文件备份不会每次都全量上传。收尾给生产环境加 TLS 和审计日志上生产前把传输加密和日志格式补上这段可以直接贴进config.ymltls: true cert: /etc/webdav/cert.pem key: /etc/webdav/key.pem log: format: json # JSON 日志方便 fail2ban 按行匹配 outputs: - stderr - /var/log/webdav.logJSON 格式的invalid password日志可以直接喂给 fail2ban 拦暴力破解。想再往深处看请求路由在 handler.go锁系统在 locksystem.go全部源码就lib/和cmd/两个目录翻起来不费劲。【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考