目 录CONTENT

文章目录

不用 FTP、不用网盘!在 Ubuntu 上 10 分钟搭一个生产级 WebDAV 私有文件云(支持一键多用户)

文件还在用 FTP 传? 网盘又慢又担心隐私?

其实一台 Ubuntu 服务器,就能搞定一个 稳定、通用、低成本的私有文件云

本文带你 从 0 到 1,在 Ubuntu 上基于 Apache + WebDAV 搭建文件服务,并且做到:

✅ 自定义端口(不和 Nginx 冲突) ✅ 账号密码访问控制 ✅ 每个用户独立目录 ✅ 一条命令创建 WebDAV 用户(生产可用)


一、WebDAV 是什么?为什么推荐它?

WebDAV(Web-based Distributed Authoring and Versioning) 是 HTTP 协议的扩展,最大的优点只有一句话:

简单、通用、稳定

它非常适合以下场景:

  • 📂 服务器文件共享

  • 🧑‍💻 运维文件分发

  • ☁️ 轻量私有云 / NAS

  • 🔐 对数据隐私有要求的场景

而且:

  • Windows / macOS / Linux 原生支持

  • 不需要额外客户端

  • 运维成本极低


二、整体方案说明

本文采用的技术方案:

项目

说明

操作系统

Ubuntu

Web 服务

Apache2

文件协议

WebDAV

认证方式

Basic Auth

用户隔离

目录隔离

端口

自定义(示例 7080)

最终访问形式:

http://IP:端口/webdav/用户名

三、安装 Apache2(Ubuntu)

sudo apt-get update
sudo apt-get install -y apache2

确认 Apache 正常运行:

systemctl status apache2

四、启用 WebDAV 模块(关键)

Apache 默认未启用 WebDAV,需要手动开启:

a2enmod dav
a2enmod dav_fs

五、修改监听端口(避免与 Nginx 冲突)

编辑 Apache 端口配置:

cd /etc/apache2
vim ports.conf

新增一个端口(示例 7080):

Listen 7080

六、创建 WebDAV 账号密码文件

使用 htpasswd 创建认证文件:

htpasswd -c /etc/apache2/webdav.password admin

⚠️ -c只在第一次使用,后续不要再加,否则会覆盖已有用户


七、配置 WebDAV 虚拟主机(推荐生产写法)

编辑站点配置文件:

cd /etc/apache2/sites-available
vim 000-default.conf

示例完整配置如下 👇

<VirtualHost *:7080>
    ServerAdmin webmaster@localhost
    DocumentRoot /home/imp/edc_demo/webdav

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    DavLockDB "/var/DavLock"

    <Directory /home/imp/edc_demo/webdav/>
        DAV On
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    Alias /webdav /home/imp/edc_demo/webdav

    <!-- 统一的 WebDAV 访问控制,支持所有用户 -->
    <LocationMatch "^/webdav/([^/]+)">
        DAV On
        AuthType Basic
        AuthName "WebDAV"
        AuthUserFile /etc/apache2/webdav.password
        Require valid-user
    </LocationMatch>
</VirtualHost>

🔥 为什么用 LocationMatch

  • 不需要每加一个用户就改 Apache 配置

  • 不需要频繁重启 Apache

  • 用户再多,配置也不膨胀

  • 非常适合生产环境


八、重启 Apache

sudo systemctl restart apache2

九、浏览器验证

访问:

http://服务器IP:7080/webdav/

输入用户名密码,能看到目录即表示成功 🎉


十、进阶重点:生产级「一键创建 WebDAV 用户」脚本

手动加用户太麻烦? 下面这个脚本可以做到:

✅ 自动创建 WebDAV 用户 ✅ 自动创建用户目录 ✅ 不覆盖已有账号 ✅ 不依赖 expect ✅ 可重复执行(生产可用)


1️⃣ 一键创建用户脚本

👉 add_webdav_user.sh

#!/bin/bash
# =========================
# WebDAV 用户创建脚本
# =========================

PASSWD_FILE="/etc/apache2/webdav.password"
WEBDAV_ROOT="/home/imp/edc_demo/webdav"

USER="$1"
PASSWORD="$2"

# 参数校验
if [ -z "$USER" ] || [ -z "$PASSWORD" ]; then
    echo "❌ 用法: $0 用户名 密码"
    exit 1
fi

# 依赖检查
if ! command -v htpasswd &>/dev/null; then
    echo "❌ 未安装 htpasswd"
    exit 1
fi

# 创建 WebDAV 用户
if [ -f "$PASSWD_FILE" ]; then
    if grep -q "^$USER:" "$PASSWD_FILE"; then
        echo "❌ 用户 $USER 已存在"
        exit 1
    fi
    echo "➕ 添加 WebDAV 用户 $USER"
    echo "$PASSWORD" | htpasswd -i "$PASSWD_FILE" "$USER"
else
    echo "🆕 初始化密码文件并创建用户 $USER"
    echo "$PASSWORD" | htpasswd -ci "$PASSWD_FILE" "$USER"
fi

# 创建用户目录
USER_DIR="$WEBDAV_ROOT/$USER"
if [ ! -d "$USER_DIR" ]; then
    echo "📁 创建目录 $USER_DIR"
    mkdir -p "$USER_DIR"
fi

# 设置权限
chown -R www-data:www-data "$USER_DIR"
chmod 750 "$USER_DIR"

echo "✅ 用户 $USER 创建成功"
echo "🌐 访问地址: http://IP:端口/webdav/$USER"

2️⃣ 使用方式

chmod +x add_webdav_user.sh
./add_webdav_user.sh testuser 123456

十一、用户访问方式

每个用户只能访问自己的目录:

http://IP:端口/webdav/用户名

真正做到:

  • 用户隔离

  • 权限清晰

  • 运维简单


十二、适合哪些场景?

  • 🏢 公司内部文件共享

  • 🧑‍💻 运维文件集中管理

  • ☁️ 私有云 / 轻量 NAS

  • 🔐 对隐私和安全有要求的环境


0

评论区