OpenWrt 配置 WebDAV
13

hacdias/webdav

使用 GitHub - hacdias/webdav: Simple Go WebDAV server.

该项目简单易配置。不过在高并发下,可能容易崩溃,可见 crash at high concurrency · Issue #85 · hacdias/webdav

下载对应版本,如 amd64 架构选择 linux-amd64-webdav.tar.gz,并解压。webdav​ 文件即程序本体。

在同目录内创建一个配置文件 config.yaml​ 。基础配置如下

address: 0.0.0.0  # 监听地址,外网访问则设置为公网 IP,局域网访问则设置为软路由 IP(默认 0.0.0.0 也可)
port: 1000  # 监听端口
auth: ture  # 是否开启验证
tls: false  # 是否开启 TLS
prefix: /  # 地址前缀,"/" 指访问地址为 “http(s)://address:port/”
debug: false  # 是否开启查错模式,日常使用无需开启

scope: .  # 监听目录,"." 指在当前目录下
modify: true  # 是否开启修改权限

# 若 "auth" 为 "true",则需要设置用户来鉴权
users:
  - username: admin
    password: admin

启动测试一下

./webdav -c config.yaml

image

若终端中如此显示,则 WebDAV 正常运行。

配置文件

配置文件支持 JSON、YAML 和 TOML 格式。完整的配置示例可见 Usage

TLS 配置

此时 WebDAV 默认使用 http 协议,若要使用 https 协议,需要配置 TLS 加密。

然后配置

tls: true  # 开启 TLS
cert: /root/webdav/cert.pem  # 证书文件路径
key: /root/webdav/key.pem  # 私钥文件路径

开启 CORS

cors:
  enabled: true
  credentials: true

若需要详细配置,例如

cors:
  enabled: true
  credentials: true
  allowed_headers:
    - Depth
  allowed_hosts:
    - http://localhost:8080
  allowed_methods:
    - GET
  exposed_headers:
    - Content-Length
    - Content-Range

hacdias/webdav: Simple Go WebDAV server.

多用户权限控制

users:
  - username: admin
    password: admin  # 默认使用明文
    scope: /a/different/path  # 目录
  - username: encrypted
    password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"  # 使用 bcrypt 加密
  - username: basic
    password: basic
    modify: false
    rules:
      - path: /dir1/file
        allow: false  # 是否允许访问
      - path: /dir1/dir2/
        modify: true  # 是否允许修改

开机自启

OpenWrt 的 /etc/init.d​ 中存储着系统加载的开机配置,目录中的每个文件都代表一个 service。开机时,系统读取 etc/init.d​ 中的配置文件,根据 START 优先级,依照顺序执行每个文件 start()​ 函数内的命令。

其他 Linux 系统,可用 systemd​ ,一个示例见 webdav.service.example

创建 /etc/init.d/webdav​,有两种配置风格:SysVprocd,这里使用 procd(可见 OpenWrt的开机启动服务(init scripts) - Milton - 博客园

#!/bin/sh /etc/rc.common

START=99
USE_PROCD=1
BINLOADER_BIN="/root/webdav/webdav"  # webdav 目录

start_service() {
    procd_open_instance
    procd_set_param respawn
    procd_set_param command "$BINLOADER_BIN" -c /root/webdav/config.yaml  # 最后为 config 文件目录
    procd_set_param stdout 1
    procd_set_param stderr 1
    procd_close_instance
}

stop_service() {
    return 0
}

restart() {
    stop
    start
}

赋予可执行权限

chmod +x /etc/init.d/webdav

设置开机自启动并现在启动

service webdav enable
service webdav start

可以通过 service webdav info​ 或 service | grep webdav​ 查看是否成功运行。

Lighttpd

Caddy

Caddy 现在是 v2 版本,相比于 v1 更庞大,单纯启用 WebDAV 时似乎不如 v1 好用,且配置语言语义有所变化。