CentOS 8 安装 MiniDAV 指南

在 CentOS 8 上从源码编译安装 MiniDAV v1.4.1 单二进制 WebDAV 服务器,覆盖 Rust 工具链部署、cargo 编译、用户与认证文件配置、systemd 自启动与验证。

MiniDAVMiniDAVWebDAV 服务器Rust 语言2026/10/07

CentOS 8 安装 MiniDAV 指南

目标:在 CentOS 8 服务器上通过 Rust 源码编译安装 MiniDAV v1.4.1 独立 WebDAV 服务器,实现多用户文件共享、HTTP Basic 认证与暴破防护,并配置为 systemd 服务随系统自启动。已在 CentOS 8.4(x86_64)实测通过。

MiniDAV 是一个用 Rust 编写的极简 WebDAV 服务器,官方提供单一静态二进制,无运行时依赖(无需 Java、无需解释器、无需数据库)。它支持 GET/PUT/DELETE/HEAD/OPTIONS 等 HTTP 方法与 PROPFIND/MKCOL/COPY/MOVE/LOCK/UNLOCK 等完整 WebDAV 方法,内置基于 SHA-256 的多用户 HTTP Basic 认证、每用户根目录隔离(轻量 chroot)、路径穿越防护、失败次数暴破防护(临时封禁 IP)与 Range 断点续传(视频流友好)。默认监听 8888 端口。

本章目标系统为 CentOS 8(含 8.4 等 8.x 小版本)。受 2021 年 EOL 影响,仓库默认不提供 git/wget,本文使用 curl 下载源码包。CentOS 9 Stream、Rocky Linux、AlmaLinux 等 RHEL 系系统同样适用。

一、环境信息

  • 操作系统:CentOS Linux release 8.4.2105(x86_64)
  • MiniDAV 版本:1.4.1(源码编译)
  • Rust 工具链:rustc 1.99.0 / cargo 1.99.0(rustup 安装)
  • 编译依赖:gcc 8.5.0、GNU Make 4.2.1
  • 监听端口:8888(默认)
  • 配置文件:/etc/minidav/users.txt
  • 数据目录:/opt/minidav/share
  • 日志文件:/var/log/minidav/access.log
  • 服务账号:webdav(系统用户,nologin)

二、前置条件

  1. 已安装 curl(CentOS 8 默认自带,可用 curl --version 确认)。
  2. 服务器可访问 GitHub(源码下载与 crates.io 依赖拉取)。
  3. 使用 root 或具备 sudo 权限的账号执行安装。

三、版本选型说明

  • 官方仓库:https://github.com/philtems/minidav
  • 版本核实命令:minidav -v 或 minidav --version。
  • 本项目撰写时最新稳定版为 v1.4.1(源码 Cargo.toml 中 version = "1.4.1"),支持 Locking 与 Range 请求。
  • MiniDAV 目前不提供预编译 Release 归档,安装方式为源码编译(官方仓库内 Binaries/ 目录附有 Linux 预编译二进制,也可直接下载使用,见本文「五、预编译二进制安装方案」)。
  • 仓库无版本分支,默认分支 main 即最新源码;本文实测使用 refs/heads/main。

四、在线源码编译安装方案

4.1 安装 Rust 工具链

通过 rustup 安装 stable 工具链(需能访问 rustup 分发节点):

cd /root
curl -sSf https://sh.rustup.rs -o rustup-init.sh
sh rustup-init.sh -y --default-toolchain stable --profile minimal
source /root/.cargo/env

验证工具链:

rustc --version
# rustc 1.99.0 (b940084d7 2026-09-28)

cargo --version
# cargo 1.99.0 (5f94df478 2026-08-27)

⚠️ 注意:/tmp 目录若以 noexec 挂载,rustup 安装器会报 Cannot execute .../rustup-init (likely because of mounting /tmp as noexec)。此时将安装脚本移到可执行目录并在该目录运行即可:cp rustup-init.sh /root/ && cd /root && TMPDIR=/root sh rustup-init.sh -y。

4.2 安装编译依赖

yum install -y gcc gcc-c++ make
# 安装完成回显示例:
# Complete!
# gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4)
# GNU Make 4.2.1

4.3 下载源码

mkdir -p /usr/local/src
cd /usr/local/src
curl -sL https://github.com/philtems/minidav/archive/refs/heads/main.tar.gz -o minidav-main.tar.gz
tar xzf minidav-main.tar.gz
cd minidav-main

查看源码结构:

ls -la
# drwxr-xr-x ... Binaries
# -rw-r--r-- ... Cargo.toml
# -rw-r--r-- ... README.md
# drwxr-xr-x ... scripts
# drwxr-xr-x ... src

如需指定编译目标架构,先执行 rustup target add x86_64-unknown-linux-gnu,否则首次编译可能报 the x86_64-unknown-linux-gnu target may not be installed。安装完成后无需手动 add(rustup 默认已含宿主目标)。

4.4 编译

cargo build --release

编译完成回显(实测):

warning: `minidav` (bin "minidav") generated 7 warnings
    Finished `release` profile [optimized] target(s) in 12.93s

编译中的 7 条 warning 为源码内 dead_code 等提示,不影响功能与发布,属正常现象。

查看产物:

ls -la target/release/minidav
# -rwxr-xr-x ... 729104 ... target/release/minidav

4.5 安装二进制

cp target/release/minidav /usr/local/bin/minidav
chmod 755 /usr/local/bin/minidav

验证版本:

/usr/local/bin/minidav -v
# minidav version 1.4.1 (2026)
# Author: Philippe TEMESI - https://www.tems.be
# WebDAV server with COPY, MOVE, LOCK, UNLOCK support
# Features: Streaming, Range requests, Write Cache, No Rate Limiting

4.6 创建服务账号与目录

useradd -r -m -d /home/webdav -s /sbin/nologin webdav
mkdir -p /opt/minidav/share /etc/minidav /var/log/minidav
  • /opt/minidav/share:WebDAV 共享根目录,用户上传/下载的文件落在此处
  • /etc/minidav:认证文件 users.txt 所在目录
  • /var/log/minidav:访问日志目录

4.7 生成密码哈希并配置认证文件

users.txt 每行格式为 用户名:SHA-256密码哈希:绝对路径共享目录,行首 # 为注释:

/usr/local/bin/minidav --hash-password "你的强密码"
# 输出 SHA-256 哈希,例如:
# e1b6334b8fe60ab824a26dbde1759432df3eeea664cc72211e0997bf81eb6434

写入认证文件(将哈希替换为你实际生成的):

echo "admin:e1b6334b8fe60ab824a26dbde1759432df3eeea664cc72211e0997bf81eb6434:/opt/minidav/share" > /etc/minidav/users.txt
chown -R webdav:webdav /opt/minidav/share /etc/minidav /var/log/minidav

💡 说明:认证文件中的密码既支持 64 位十六进制 SHA-256 哈希,也支持明文(明文会被直接比对)。生产环境务必使用 --hash-password 生成的哈希。每行第三个字段必须为绝对路径且目录必须存在,否则该用户会被忽略。

4.8 systemd 服务托管

创建 systemd 单元文件:

cat > /etc/systemd/system/minidav.service <<'EOF'
[Unit]
Description=MiniDAV WebDAV Server
After=network.target

[Service]
Type=simple
User=webdav
Group=webdav
ExecStart=/usr/local/bin/minidav -i 0.0.0.0 -p 8888 --auth-file /etc/minidav/users.txt --log /var/log/minidav/access.log
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

⚠️ 注意:MiniDAV 的 -d(daemon)模式不写 PID 文件,systemd 中使用 Type=forking 会因找不到 /run/minidav.pid 而启动超时(实测报 Failed with result 'timeout')。必须使用 Type=simple 前台运行,不要加 -d 参数。

加载并启动:

systemctl daemon-reload
systemctl enable minidav
# Created symlink /etc/systemd/system/multi-user.target.wants/minidav.service → /etc/systemd/system/minidav.service.

systemctl start minidav
systemctl status minidav
# ● minidav.service - MiniDAV WebDAV Server
#    Loaded: loaded (/etc/systemd/system/minidav.service; enabled; vendor preset: disabled)
#    Active: active (running) since Tue 2026-10-06 15:42:42 UTC; 2s ago
#  Main PID: 266 (minidav)
#     Tasks: 8 (limit: ...)
#    Memory: 1.3M

确认监听端口:

ss -tlnp | grep 8888
# LISTEN 0 128 0.0.0.0:8888 0.0.0.0:* users:(("minidav",pid=266,fd=6))

4.9 验证服务

# 未带认证 → 401
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8888/
# 401

# 带认证读取共享目录中已有文件
curl -s -u admin:你的强密码 http://127.0.0.1:8888/welcome.txt
# 文件内容

# 上传文件(PUT)
echo "hello minidav" | curl -s -o /dev/null -w "%{http_code}\n" -u admin:你的强密码 -T - http://127.0.0.1:8888/hello.txt
# 201

# 目录列表(PROPFIND)
curl -s -u admin:你的强密码 -X PROPFIND -H "Depth: 1" http://127.0.0.1:8888/
# <?xml version="1.0" encoding="utf-8"?>
# <D:multistatus xmlns:D="DAV:">
#   <D:response>...(文件/目录列表)...</D:response>
# </D:multistatus>

查看访问日志:

tail -5 /var/log/minidav/access.log
# 2026-10-06 16:00:21 [INFO] Server started on 0.0.0.0:8888
# 2026-10-06 16:00:22 [ACCESS] 127.0.0.1:45786 - admin [GET] /ubuntu.txt 200 17

五、预编译二进制安装方案

若环境不便安装 Rust 工具链,可直接下载官方仓库内附带的 Linux 预编译二进制(实测与源码编译版功能一致,md5 相同):

cd /usr/local/src
curl -sL -o minidav https://raw.githubusercontent.com/philtems/minidav/main/Binaries/Linux/minidav
chmod 755 minidav
cp minidav /usr/local/bin/minidav

💡 说明:Binaries/ 目录随源码仓库一起维护,Binaries/Linux/minidav 为 Linux x86_64 预编译产物,Binaries/Windows/minidav.exe 为 Windows 产物。二进制为静态编译、无动态链接依赖,可直接运行。下载后按 4.6~4.9 节完成目录、认证文件与 systemd 配置即可。

六、多方案对比与选择建议

维度源码编译(方案 A)预编译二进制(方案 B)
版本与 main 分支源码一致与仓库 Binaries 目录一致
是否需要联网需要(crates.io 拉取依赖)仅下载单个文件
是否需要 Rust 工具链需要 rustup + gcc不需要
二进制体积约 729 KB约 343 KB(strip 后)
适用场景想自己构建/定制快速部署、离线安装

选择建议:追求快速部署选方案 B;需要自己验证源码或定制编译选方案 A。

七、配置说明

MiniDAV 的全部配置通过命令行参数传入,无独立配置文件。常用参数:

参数默认值说明
-i, --ip0.0.0.0监听地址
-p, --port8888监听端口
--auth-file必填认证文件路径
-l, --log无日志文件路径
--max-attempts5暴破防护最大失败次数
--block-time300封禁时长(秒)
--write-cache0写缓存大小(MB),0 为禁用
-d, --daemon关后台守护模式(systemd 不建议使用)

详细参数说明见《MiniDAV 配置参数详解》。

八、注意事项

  1. 认证文件路径必须为绝对路径,且对应目录必须存在,否则该用户不会加载(日志会打印 WARNING)。
  2. 暴破防护按「客户端 IP:端口」维度计数:同一 TCP 连接(keep-alive)内连续失败会累计并封禁;新建连接因源端口变化会重新计数。详见《MiniDAV 配置参数详解》。
  3. 服务以 webdav 低权限账号运行,共享目录属主应设置为该账号,避免权限不足导致上传失败。
  4. CentOS 8 已 EOL,若 yum 无法安装 gcc,需先配置 vault 归档源或阿里云镜像源。
  5. 生产环境对外提供服务时,建议配合防火墙仅放行指定来源,WebDAV 默认使用 Basic 认证,密码以明文 Base64 传输,需通过 TLS 反向代理(如 Nginx)加固。

九、常见问题(FAQ)

Q1:systemctl start minidav 报 Job for minidav.service failed because a timeout was exceeded?

原因:单元文件使用了 Type=forking 且带 -d 参数,而 MiniDAV 不写 PID 文件。解决:改为 Type=simple 并去掉 -d,systemctl daemon-reload 后重启。

Q2:上传文件提示 500?

多为共享目录属主/权限问题。检查目录属主:chown -R webdav:webdav /opt/minidav/share。

Q3:认证后访问仍 401?

确认 users.txt 中的密码哈希与明文对应(minidav --hash-password "密码" 重新生成比对);确认行格式为 用户:哈希:/绝对路径 且路径存在。

Q4:暴破防护触发后正常密码也登录不了?

暴破封禁在 --block-time 秒后自动解除(默认 300 秒),期间同 IP:端口请求全部返回 401。可等待封禁过期,或重启服务清空内存中的计数。

十、卸载方式

# 停止并禁用服务
systemctl stop minidav
systemctl disable minidav
rm -f /etc/systemd/system/minidav.service
systemctl daemon-reload

# 删除二进制与数据(按需)
rm -f /usr/local/bin/minidav
rm -rf /opt/minidav /etc/minidav /var/log/minidav

# 删除服务账号(按需)
userdel webdav

# 删除源码与 Rust 工具链(按需)
rm -rf /usr/local/src/minidav-main /usr/local/src/minidav-main.tar.gz
rm -rf /root/.cargo /root/.rustup

十一、参考链接

  • 官方仓库:https://github.com/philtems/minidav
  • 作者主页:https://www.tems.be
  • Rust 官方:https://www.rust-lang.org/
  • WebDAV 协议:https://datatracker.ietf.org/doc/html/rfc4918