使用Linux云服务器搭建webDAV网盘服务

上一节中,我们介绍了几种跨设备的文件传输方案,其中提到了坚果云webDAV服务。鉴于坚果云的存储空间有限,为了获得更好的使用体验,本篇我们将要介绍在Linux云服务器上自建webDAV网盘服务的方法。

一、使用前准备

  • 一台用于开启webDAV的Linux云服务器。
    • 注意,如果想要在非默认http端口上开启服务,需要提前在云服务器提供商的网络安全组中提前放行相应端口的流量。
    • 提前记录好云服务器的公网IP。此处我用于测试的服务器IP地址为47.115.222.83,下面我也将使用这个IP用来演示。
  • webDAV服务端程序
    • 此处使用 hacdias-webdav 这个GitHub上的开源项目。这是一个使用Go语言实现的单文件版webDAV服务程序,配置起来相对简单

二、webDAV的安装与配置

(一)安装

https://github.com/hacdias/webdav/releases 网站上下载最新版的可执行文件(注意选择合适的程序架构),然后在Linux服务器上解压:

1
2
3
4
5
mkdir ~/webdav_files # 创建文件夹
cd ~/webdav_files # 进入文件夹
wget https://github.com/hacdias/webdav/releases/download/v4.2.0/linux-amd64-webdav.tar.gz # 下载可执行文件。这个链接是Linux x86_64架构的可执行文件。其他架构的改一下链接
tar -zxvf linux-amd64-webdav.tar.gz
ls -alh

output:

1
2
3
4
5
6
drwxrwxr-x  2 cyclin cyclin 4.0K Feb 18 22:44 .
drwx------ 15 cyclin cyclin 4.0K Feb 18 22:44 ..
-rw-r--r-- 1 cyclin cyclin 1.1K May 30 2022 LICENSE
-rw-r--r-- 1 apache apache 3.2M Feb 18 21:47 linux-amd64-webdav.tar.gz
-rw-r--r-- 1 cyclin cyclin 2.9K May 30 2022 README.md
-rwxr-xr-x 1 cyclin cyclin 7.9M May 30 2022 webdav

(二)修改配置文件

根据 hacdias-webdav 的项目介绍,运行webDAV只需要一行指令webdav即可。其他的配置主要在 config.yml配置文件中进行设置。

image.png

在项目附带的README.md文件中,作者给出了一个配置文件示例,但我们需要对其进行一些修改才能让他运行起来。下面是一份经过修改的、可以运行起来的精简版配置文件,如果需要更高级的功能,可以参考README.md文件添加更多字段:

1
2
3
4
5
6
7
8
9
10
# Server related settings
address: 0.0.0.0
port: 84 # 将webDAV服务端口设置为84。默认端口是80
auth: true # 需要身份验证
tls: false # 不使用TLS加密,也就是说我们使用http协议开启webDAV服务

users:
- username: admin # 用户名。可以改成别的。
password: admin # 密码。可以改成别的。
scope: /home/

我们将上述文件保存为config.yml,并和webdav 的程序放在一起。这样就完成了配置

(三)运行

只需要一行指令:

1
./webdav

输出如下:

1
2
3
4
5
6
7
8
9
10
(base) cyclin@iZf8z0u1kbopnpeuu32nf5Z:~/webdav_files$ sudo ./webdav
[sudo] password for cyclin:
2024-02-18T22:50:29.854+0800 info Listening {"address": "[::]:84"}
2024-02-18T22:51:03.861+0800 info login attempt {"username": "admin", "remote_address": "58.34.59.45:49744"}
2024-02-18T22:51:03.861+0800 info user authorized {"username": "admin"}
2024-02-18T22:58:33.589+0800 info login attempt {"username": "", "remote_address": "58.34.59.45:49945"}
2024-02-18T22:58:33.738+0800 info login attempt {"username": "", "remote_address": "58.34.59.45:49946"}
2024-02-18T22:58:33.872+0800 info login attempt {"username": "", "remote_address": "58.34.59.45:49947"}
2024-02-18T22:58:34.010+0800 info login attempt {"username": "", "remote_address": "58.34.59.45:49948"}
... ...

三、在其他系统上访问

(一)在windows上访问

由于我们是用http协议而非https协议建立的webDAV服务,需要在windows系统上修改一些注册表数据才能完成链接(因为win7开始微软改变了windows系统的安全策略,默认只能使用https协议连接webDAV服务器)。

具体做法参考这篇文章: 《windows10挂载webdav》 。简单来说,在注册表编辑器内寻找 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters 路径,然后将BasicAuthLevel 条目的数值数据修改为“2”。之后,在Windows服务控制面板(services.msc)中重启“WebClient”服务即可。

之后的步骤和上一篇文章大抵相同。在“此电脑”-“添加一个网络位置”中输入网址: http://47.115.222.83:84 ,然后按提示输入账号和密码(上一节config.yml中设置过),随后一路确认,即可完成对webDAV的添加。

image.png

image.png

image.png

image.png

最终结果如上图所示。

(二) 在Linux系统上访问

步骤如下:

1
2
3
4
5
sudo apt install -y davfs2 # 首先需要安装davfs文件系统,否则无法挂载
mkdir ~/webDAV # 新建文件夹,作为挂载点
# 下面这行代码用于挂载我们刚刚建立的webDAV服务器
# 注意,需要用sudo提权,否则会报错
sudo mount -t davfs -o noexec http://47.115.222.83:84 /home/cyclin/webDAV/

output:

1
2
3
4
5
6
7
8
9
10
cyclin@hcss-ecs-531c:~$ sudo mount -t davfs -o noexec http://47.115.222.83:84 /home/cyclin/webDAV/
Please enter the username to authenticate with server
http://47.115.222.83:84 or hit enter for none.
Username: admin
Please enter the password to authenticate user admin with server
http://47.115.222.83:84 or hit enter for none.
Password:
cyclin@hcss-ecs-531c:~$ ls /home/cyclin/webDAV/ # 看一下挂载的webDAV文件夹的内容
cyclin lost+found warren
# 可以看到,webDAV文件夹内的东西被正确加载了出来,说明挂载成功

如此就可以实现挂载与访问。

(三)在macOS系统上访问

参考: https://support.apple.com/zh-cn/guide/mac-help/mchlp1546/mac

若要在 Mac 上访问 WebDAV 服务器,请在“访达”中使用“连接服务器”命令。

连接到 WebDAV 服务器

  1. 在 Mac 上的“访达”中,选取“前往”>“连接服务器”。
  2. 在“服务器地址”栏中输入服务器的地址。
  3. 点按“连接”。

从 WebDAV 服务器断开连接

  1. 在 Mac 上的“访达”中,选择该服务器。
  2. 按住 Control 键点按,然后选取“推出”。

四、讨论与局限性

1、此方法需要一台具有公网IP的云服务器,然而租赁云服务器是一笔不小的开销。笔者也尝试过在实验室的服务器上配置此webDAV服务器,但发现换用多个端口都无法实现正常访问,推测是网络管理员配置的安全组屏蔽了服务器的大部分端口。因此,访问实验室服务器建议使用sshfs这种更加简单稳健的方法。
2、上面的方法中,webDAV服务程序在前台运行,一旦连接丢失则webDAV服务就会中断。为了防止这种情况发生,可以使用screentmux等工具将webDAV服务放在后台运行,也可也使用systemctl工具将其注册为系统服务,并配置开机运行。具体方法会在未来的更新中详细说明。
3、在Linux系统上,上述挂载方法需要root权限,因此有一定的局限性。此处笔者提出一种猜想,可以配合linux系统的proot功能绕过root权限的限制,不过仍有待进一步的研究。