davfs2 把 WebDAV 资源映射进 Linux 文件系统树,让普通程序通过文件路径访问远端内容。它很方便,但并不把 WebDAV 变成本地磁盘:读写依赖网络和本地缓存,服务器功能、锁、延迟与其他客户端都可能影响结果。
本文采用先手动、后持久化的顺序,只针对你拥有或获准访问的 WebDAV 资源。示例域名和身份使用不可用的 .invalid 占位符;坚果云是一个经官方文档核对的供应商示例,不是推荐或推广。
文末完整保留 2025 年
source_export的历史可见正文。原文没有真实凭据或私人标识,所以未作语义脱敏;只规范化了 5 处 Markdown 行末空格。其中的credentials=、宽泛的自动挂载承诺与优先启用ignore_dav_header的做法只作历史证据,不得执行。
Table of Contents
先区分挂载、同步与备份
| 目标 | 合适工具 | 关键限制 |
|---|---|---|
| 让程序按路径访问远端文件 | davfs2 或 rclone mount |
是网络文件系统视图;离线、锁、缓存和延迟语义不同于本地磁盘 |
| 保留可离线工作的本地副本并协调变化 | 供应商官方同步客户端,或经验证的同步工作流 | 冲突、删除传播、忽略规则和版本恢复取决于工具/供应商 |
| 单向传输一批文件 | rclone copy 等可审计复制工具 |
必须定义方向、校验、重试与保留;仍不是备份策略 |
| 可恢复的备份 | 独立、版本化且定期恢复演练的目标 | 同一远端挂载或同一账号中的第二个目录不构成独立备份 |
挂载上的删除通常会影响远端;缓存不是完整离线副本,也不是恢复点。数据库、虚拟机镜像、邮箱、频繁改写的大文件和依赖 POSIX 原子/锁语义的工作负载,必须先由应用与供应商明确支持,不能仅凭“能挂载”就投入生产。
收集端点、身份与兼容性事实
开始前从服务管理员和当前官方文档记录:
- 精确 HTTPS WebDAV URL(含路径和尾部斜杠要求),不要从分享链接或浏览器地址栏猜;
- 账号标识、应用专用密码/token 的生成和撤销流程,以及它能访问的范围;
- 上传大小、请求频率、分页、文件名、锁、配额、版本历史与回收站规则;
- 是否有其他客户端同时编辑同一文件,以及冲突的所有者;
- Linux 发行版、
davfs2来源/版本、init 系统和维护负责人; - 本地缓存所需空间、日志/缓存保留、备份和可验证回滚窗口。
没有专用测试目录、可撤销凭据、第二种独立核验方式或可恢复备份时,先停止。不要拿整个生产根目录做首测。
安装前先确认发行版包与版本
优先使用当前发行版受支持的软件包,不从随机脚本、镜像站或旧博客安装。下面的命令只做清点;不存在的包或命令是需要先解决的事实,不应绕过:
apt-cache policy davfs2
dnf info davfs2
mount.davfs --version
Debian/Ubuntu 可由管理员使用 apt install davfs2,Fedora/RHEL 系可按当前仓库文档使用 dnf install davfs2。安装期间关于非 root 挂载的选择是权限决策,不应无条件回答“Yes”。普通用户挂载需要管理员批准的 /etc/fstab 条目、发行版要求的 davfs2 组成员资格,以及用户自己的秘密文件。
选择挂载身份与本地所有权
一套挂载只代表一套 WebDAV 凭据。uid、gid、file_mode 和 dir_mode 只控制本机通过该挂载访问的身份与模式;服务器仍看到同一个 WebDAV 用户,其他客户端不会继承这些本地权限。
个人挂载优先放在该用户家目录,并由该用户挂载/卸载;共享服务挂载应由专用服务身份和管理员管理的系统秘密负责。不要把同一应用密码放到多个用户可读的位置,也不要用 users 让任意用户卸载,除非风险和凭据暴露边界已经明确批准。
创建一个空的私有测试挂载点和用户配置目录:
for path in "$HOME/mnt/webdav-test" "$HOME/.davfs2"; do
test ! -L "$path" || { printf 'Stop: symlink path: %s\n' "$path" >&2; exit 1; }
done
install -d -m 700 -- "$HOME/mnt/webdav-test" "$HOME/.davfs2"
挂载点必须是预期的空目录,不能覆盖已有文件。记录 id 输出并用名字而不是猜测 1000;若由 root 挂载并指定 uid/gid,先确认该专用身份确实存在。
TLS 与端点真实性
只使用官方给出的 https:// 主机名。davfs2 默认依赖系统 CA 验证证书有效性和主机名;证书失败时不要交互式永久接受未知证书,也不要禁用验证。私有 CA 只能由管理员通过独立可信渠道分发,并承担更新与撤销责任。
在发送凭据前可做不含认证的 TLS 探测;先确认本机 OpenSSL 支持这些参数:
openssl s_client -connect dav.example.invalid:443 -servername dav.example.invalid -verify_hostname dav.example.invalid -verify_return_error -brief </dev/null
成功只证明当时连接到的证书链与主机名通过验证,不证明 WebDAV 路径、账号或写权限正确。主机名不匹配、未知 CA、过期证书、HTTPS 降级、跨域重定向、代理登录页或系统时间异常都应停止并查明原因。
坚果云只是一个已核对的供应商示例
坚果云帮助中心当前给出的 WebDAV 端点是 https://dav.jianguoyun.com/dav/,用户名为坚果云账号,密码应是“第三方应用管理”中为该客户端单独生成的应用密码,而不是账号登录密码。每个客户端使用独立命名的应用密码,便于单独撤销。
官方页面还列出请求频率、单次列举、文件大小等限制;这些值可能随套餐或时间变化,应在部署当天重新核对,不能硬编码为永久事实。若官方端点、账号策略或限制与本文不同,以官方页面和你的合同/管理员说明为准。不要把应用密码贴进命令、工单、截图或本文示例。
用户级 secrets 文件:正确语法与权限
用户挂载优先使用 ~/.davfs2/secrets。先确保目标不是符号链接,再创建或收紧权限;不要在终端打印文件内容:
umask 077
test ! -L "$HOME/.davfs2" || { printf 'Stop: symlink path: %s\n' "$HOME/.davfs2" >&2; exit 1; }
test ! -L "$HOME/.davfs2/secrets" || { printf 'Stop: symlink path: %s\n' "$HOME/.davfs2/secrets" >&2; exit 1; }
touch -- "$HOME/.davfs2/secrets"
chmod 600 -- "$HOME/.davfs2/secrets"
stat -c '%U %G %a %n' -- "$HOME/.davfs2/secrets"
用本地编辑器加入一行。首列可用与 /etc/fstab 完全一致的挂载点,这能让凭据只匹配该挂载:
/home/example-user/mnt/webdav-test user@example.invalid "APP_PASSWORD_FROM_PROVIDER"
将整行占位值在本机替换为真实绝对挂载点、账号和应用密码。空格、Tab、#、反斜杠或引号必须按当前 davfs2.conf(5) 的引号/转义规则处理;不要凭感觉改写。用户 secrets 必须由该用户拥有且模式 600;系统级 /etc/davfs2/secrets 必须由 root 独占。
davfs2 会按用户 secrets、系统 secrets、交互询问的顺序查找凭据。当前 mount.davfs(8) 没有通用 credentials=/path 挂载选项:不要把 CIFS 等文件系统的 credentials= 写法移植到 davfs2。username= 也明确面向 pam_mount,不应写入 fstab,且会暴露在进程列表。
先用 noauto 的单用户 fstab 做手动测试
非 root 用户挂载必须由管理员先批准一条精确 /etc/fstab 记录。下面仍是不可用模板;URL、用户名目录和挂载点必须与 secrets 及官方端点一致:
https://dav.example.invalid/webdav/ /home/example-user/mnt/webdav-test davfs noauto,user,_netdev 0 0
这里的 noauto 禁止开机自动挂载;user 只允许发起挂载的用户卸载,并隐含 noexec,nosuid,nodev;_netdev 标记它依赖网络。上游手册不推荐默认用 users,因为那会允许任意用户卸载。
管理员应先建立不可覆盖的 fstab 备份、用 sudoedit 只加这一行,再静态检查;不要以 mount -a 测试,因为它会触发所有条目:
fstab_backup=/etc/fstab.before-davfs2
sudo test ! -e "$fstab_backup" && sudo test ! -L "$fstab_backup" || { printf 'Stop: backup path already exists\n' >&2; exit 1; }
sudo cp -a -- /etc/fstab "$fstab_backup"
sudo cmp -s -- /etc/fstab "$fstab_backup" || { printf 'Stop: fstab backup verification failed\n' >&2; exit 1; }
sudoedit /etc/fstab
findmnt --verify --verbose
批准用户需按发行版流程加入 davfs2 组并重新登录;不要扩大到所有账号。然后以该用户执行精确挂载点,而不是带 URL、用户名或密码的命令:
mount "$HOME/mnt/webdav-test"
findmnt --target "$HOME/mnt/webdav-test" --output TARGET,SOURCE,FSTYPE,OPTIONS
如果出现凭据提示,先停止并检查 secrets 的绝对挂载点、所有者、模式及 fstab 是否完全匹配;不要连续猜密码导致账号锁定。
在专用远端目录做一次读写验证
先只读取一个非敏感小文件,并通过供应商网页或另一已验证客户端核对目录。确认获准写入后,在专用测试目录执行一次有唯一名称的探针:
probe_name="davfs2-probe-$(date -u +%Y%m%dT%H%M%SZ)-$$.txt"
local_probe=$(mktemp "$HOME/davfs2-probe.XXXXXX")
printf 'davfs2 controlled probe\n' > "$local_probe"
cp -- "$local_probe" "$HOME/mnt/webdav-test/$probe_name"
cmp -- "$local_probe" "$HOME/mnt/webdav-test/$probe_name"
rm -- "$HOME/mnt/webdav-test/$probe_name"
rm -- "$local_probe"
记录探针名;任一步失败就停止,并保留该名字以便精确清理。cmp 可能读到本地缓存,所以还要从独立客户端确认远端出现并随后删除。不要以整目录复制、重命名生产文件或多客户端并发编辑作为首次测试。
关闭所有使用挂载的程序,网络仍可用时干净卸载:
sync
umount "$HOME/mnt/webdav-test"
findmnt --target "$HOME/mnt/webdav-test"
最后一条没有返回挂载记录才是预期。若卸载阻塞,不要立即用 lazy/force unmount、杀进程或删除缓存;先停止新写入,保存精确错误,核对待上传内容和 lost+found,再按本机手册/管理员恢复流程处理。
fstab 选项属于不同解释层
| 选项 | 谁解释 | 准确边界 |
|---|---|---|
noauto / user / users |
mount/davfs2 | user 限定发起者卸载;users 更宽,通常不推荐 |
_netdev |
davfs2 与启动系统 | 声明网络依赖;不证明 DNS、认证和远端已经可用 |
uid / gid / file_mode / dir_mode |
davfs2 | 只影响本地呈现;root 才能把所有者设为其他身份 |
nofail |
systemd fstab generator(systemd 主机) | 挂载失败时不让启动因该依赖被要求而停止;不隐藏运行时 I/O 错误 |
x-systemd.automount / x-systemd.idle-timeout= |
systemd fstab generator | 创建按需 automount 并可空闲卸载;首次访问仍可能等待/失败 |
credentials= |
不是 davfs2 选项 | 删除;davfs2 使用规定位置/配置的 secrets 文件 |
永远先对照本机版本的 mount.davfs(8)、davfs2.conf(5)、fstab(5) 与 init 文档。未知选项不能靠“可能被忽略”进入生产。
systemd 按需挂载与启动边界
只有 systemd 主机且手册确认支持时,管理员才可在手动测试完全通过后考虑以下系统服务模板:
https://dav.example.invalid/webdav/ /srv/webdav-example davfs rw,_netdev,nofail,x-systemd.automount,x-systemd.idle-timeout=5min,uid=webdavsvc,gid=webdavsvc,file_mode=0600,dir_mode=0700 0 0
这是一条不同于用户挂载的方案:它需要真实存在的专用 webdavsvc 身份、root 独占的 /etc/davfs2/secrets 对应条目和私有挂载点。不要同时保留用户版与系统版,也不要把用户秘密复制过去。
x-systemd.automount 让访问路径时才尝试挂载;nofail 让启动不要求实际挂载成功;_netdev 建立网络挂载依赖。它们不能保证网络在线目标配置正确,也不能防止首次 ls 阻塞。用本机手册和版本检查语义:
systemd --version
man systemd.mount
man systemd.automount
修改后运行 findmnt --verify --verbose 与 systemctl daemon-reload,只触发该挂载点并模拟 DNS 失败、无网、凭据撤销、重启和关机。关键服务不得把远端挂载当作无条件启动前置;设置明确超时和应用级降级策略。
缓存、锁、离线与冲突限制
davfs2 会在内存缓存目录/属性,并在磁盘保存所有打开文件的本地副本;因此需要足够本地空间,其他客户端的目录变化也可能延迟可见。关闭文件后上传还可能延迟,断网时“本地写入成功”不等于远端已确认。
WebDAV 锁不是强一致保证:服务器可能不支持锁,锁可能过期,网络可能阻止刷新,其他客户端也可能不按相同方式使用锁。上游说明当无法安全上传本地修改时,davfs2 可能把文件留在本地缓存的 lost+found;它需要人工核对,不能当作备份或自动冲突解决。
保持默认 use_locks 1,不要用关闭锁、缩短属性缓存或调低校验来“修性能”,除非有可复现证据、服务器语义和并发测试。不要在同一文件上让官方同步客户端、davfs2 和其他 WebDAV 客户端同时写。
诊断顺序与停止条件
| 现象 | 先检查 | 不应做 |
|---|---|---|
| TLS 或重定向错误 | 官方端点、最终主机、证书链/主机名、系统时间、代理 | 接受未知证书、降级 HTTP、关闭校验 |
401/403 |
应用密码、账号、权限范围、是否已撤销/锁定 | 重复猜密码、改用账号登录密码、把凭据放命令行 |
| “server does not support WebDAV” | URL 路径、服务是否启用 WebDAV、HTTP 状态与 DAV capability、服务端日志 | 首先设置 ignore_dav_header 1 |
| 文件延迟或冲突 | 缓存空间、未完成上传、锁、第二客户端、lost+found |
删除缓存、强制卸载、覆盖远端版本 |
| 启动或首次访问卡住 | _netdev、automount、网络在线实现、超时、DNS |
声称 nofail 保证应用可用 |
| 权限不符 | 实际挂载者、uid/gid、本地 mode、远端账号权限 |
对挂载树递归 chmod/chown 并期待改变服务端 ACL |
ignore_dav_header 是上游仍支持但默认关闭的兼容开关,只适用于服务器确实在 DAV 响应头错误报告能力的证据。供应商/服务管理员确认这一事实、其他路径/TLS/认证均已排除且在隔离测试中验证后,才可临时按挂载点范围加入用户 davfs2.conf:
[/home/example-user/mnt/webdav-test]
ignore_dav_header 1
它不会修复错误 URL、权限、TLS、锁或损坏的 WebDAV 实现。记录原始响应、版本和负责人;验证失败就删除该段。不要在真实账号启用 debug secrets:上游明确说明它会输出通常被遮蔽的机密。普通日志也可能含 URL、用户名、路径和文件名,只按最短窗口查看并在共享前脱敏:
journalctl --since "15 minutes ago" --no-pager _COMM=mount.davfs
何时选择供应商客户端或 rclone
需要完整离线副本、供应商版本历史、冲突 UI 和选择性同步时,优先评估供应商官方客户端。需要可审计传输或不同 WebDAV 实现时,可用 rclone 官方 WebDAV 后端;rclone mount 仍是网络挂载,不会自动变成同步或备份。
通过交互式 rclone config 创建隔离测试 remote,配置文件模式 600,不要把密码放在命令行或环境。rclone 的 obscured password 不是强加密,仍按秘密保护。首次只读清点及复制/同步预演可用:
rclone config
rclone lsd webdav-test:
rclone copy --dry-run /path/to/controlled-source webdav-test:controlled-destination
rclone sync --dry-run /path/to/controlled-source webdav-test:controlled-destination
copy 与 sync 语义不同;sync 的真实执行会为匹配源端而删除目标内容。只有审查完整 dry-run、过滤、方向、校验、版本保留和回滚后才能去掉 --dry-run。不要让 rclone 与 davfs2 同时修改同一测试路径。
回滚、撤销与验收清单
回滚顺序是停止新写入、关闭使用者、记录未完成探针/缓存冲突、在联网状态干净卸载,再只删除本次 fstab 行并 systemctl daemon-reload。恢复已验证的 fstab 备份前先比较差异,不覆盖其他管理员后续修改。最后从供应商撤销该客户端的应用密码,并删除 secrets 中精确对应行;不要打印秘密作为证据。
下线前确认无挂载、无 automount、无进程占用、无待上传/lost+found、无残留测试文件;保留脱敏版本、时间、错误码和恢复结果,不保留凭据或完整私有路径。
- WebDAV URL、TLS 最终主机和供应商身份均来自当前官方来源。
- 使用独立可撤销的应用密码,没有账号主密码、argv、URL 或日志泄漏。
- 用户/系统挂载方案只选一个,挂载点、所有者、secrets 和权限完全一致。
- fstab 没有
credentials=/username=,本机手册确认所有 davfs2 与 systemd 选项。 - 先
noauto手测,再做独立客户端远端核验和干净卸载。 - 已测试缓存空间、锁、并发、断网、撤销、重启、首次访问和关机边界。
ignore_dav_header默认关闭;若例外启用,有服务端证据、局部范围和回滚记录。- 同步、挂载与独立版本化备份各有明确工具、方向、负责人和恢复演练。
参考资料
- davfs2 当前上游项目与安全/缓存说明
- davfs2 上游 `mount.davfs(8)` 源文档
- davfs2 上游 `davfs2.conf(5)` 源文档
- Debian 当前 `mount.davfs(8)` 打包手册
- 坚果云:第三方应用授权 WebDAV 开启方法
- 坚果云:官方 WebDAV 地址与应用密码示例
- systemd 官方 `systemd.mount` 文档
- systemd 官方 `systemd.automount` 文档
- rclone 上游 WebDAV 文档源
- rclone 上游 mount 文档源
- rclone 上游 sync 文档源
历史原文归档
以下是 source_export 中 2025 年可见正文的完整惰性归档。原文没有真实密码、私人账号或跟踪参数,因此没有语义替换;仅移除 5 个行末空格以通过仓库检查,正文、空行、目录残留、代码和链接不变。围栏内的 HTTP 链接、credentials=、自动挂载承诺及 ignore_dav_header 建议只是历史证据,绝不能执行。
WebDAV(Web Distributed Authoring and Versioning)是一种允许通过 HTTP 协议将远程存储挂载到本地文件系统的技术。通过它,你可以像操作本地目录一样对远程文件进行 `ls`、`cp`、`mv` 等操作。本文将介绍如何在 Linux 系统中安装和配置 **davfs2**,并以坚果云(Nutstore / 坚果云)为例,演示挂载 WebDAV 目录的全过程。
---
Table of Contents
Toggle
- [一、前言](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#%E4%B8%80%E3%80%81%E5%89%8D%E8%A8%80)
- [二、安装 davfs2](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#%E4%BA%8C%E3%80%81%E5%AE%89%E8%A3%85_davfs2)
- [1. Debian/Ubuntu 系列](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#1_DebianUbuntu_%E7%B3%BB%E5%88%97)
- [2. RHEL/CentOS/Fedora 系列](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#2_RHELCentOSFedora_%E7%B3%BB%E5%88%97)
- [三、创建挂载点目录](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#%E4%B8%89%E3%80%81%E5%88%9B%E5%BB%BA%E6%8C%82%E8%BD%BD%E7%82%B9%E7%9B%AE%E5%BD%95)
- [四、配置 davfs2](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#%E5%9B%9B%E3%80%81%E9%85%8D%E7%BD%AE_davfs2)
- [4.1 配置登录凭证](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#41_%E9%85%8D%E7%BD%AE%E7%99%BB%E5%BD%95%E5%87%AD%E8%AF%81)
- [4.2 修改 davfs2.conf(可选)](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#42_%E4%BF%AE%E6%94%B9_davfs2conf%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89)
- [五、手动挂载测试](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#%E4%BA%94%E3%80%81%E6%89%8B%E5%8A%A8%E6%8C%82%E8%BD%BD%E6%B5%8B%E8%AF%95)
- [六、在 /etc/fstab 中自动挂载](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#%E5%85%AD%E3%80%81%E5%9C%A8_etcfstab_%E4%B8%AD%E8%87%AA%E5%8A%A8%E6%8C%82%E8%BD%BD)
- [七、常见问题及解决方案](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#%E4%B8%83%E3%80%81%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E5%8F%8A%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88)
- [八、总结](https://blog.lazying.art/en/html/computer_internet/unix_linux/ubuntu/3087/%e4%bd%bf%e7%94%a8-davfs2-%e5%9c%a8-linux-%e4%b8%8a%e6%8c%82%e8%bd%bd-webdav-%e7%bd%91%e7%9b%98%ef%bc%88%e4%bb%a5%e5%9d%9a%e6%9e%9c%e4%ba%91%e4%b8%ba%e4%be%8b%ef%bc%89.html/#%E5%85%AB%E3%80%81%E6%80%BB%E7%BB%93)
## 一、前言
坚果云(Nutstore)是一款常用的云存储服务,提供了 WebDAV 访问接口。通过使用 **davfs2**,我们可以在 Linux 系统中直接将坚果云的远程存储挂载到本地文件夹,实现与本地磁盘类似的管理方式。
---
## 二、安装 davfs2
### 1. Debian/Ubuntu 系列
sudo apt update
sudo apt install davfs2
在安装过程中,系统可能会提示你是否允许非 root 用户挂载 WebDAV 文件系统。如果你希望普通用户也可以挂载,选择 **Yes**(或相应的选项)。
### 2. RHEL/CentOS/Fedora 系列
sudo yum install davfs2
或在新版本的 Fedora / RHEL 上使用:
sudo dnf install davfs2
---
## 三、创建挂载点目录
在本地创建一个用于挂载坚果云的目录,例如:
sudo mkdir -p /mnt/nutstore
这个目录将作为本地与坚果云之间的“桥梁”。
---
## 四、配置 davfs2
### 4.1 配置登录凭证
如果坚果云的 WebDAV 访问需要用户名和密码,可以在 `/etc/davfs2/secrets` 文件中添加:
sudo nano /etc/davfs2/secrets
在文件末尾写入以下内容(将示例 URL 和用户名、密码替换为你的实际信息):
https://dav.jianguoyun.com/dav <你的用户名> <你的密码>
保存后,为了安全起见,确保只有 root 或相应用户可读该文件:
sudo chmod 600 /etc/davfs2/secrets
### 4.2 修改 davfs2.conf(可选)
部分服务器(或云服务)可能对 WebDAV 协议支持不完全,导致出现类似
mount.davfs: mounting failed; the server does not support WebDAV
的错误。这种情况下,你可以尝试在 `/etc/davfs2/davfs2.conf` 中添加:
ignore_dav_header 1
以忽略特定的协议头检查,从而兼容某些非标准 WebDAV 服务。
---
## 五、手动挂载测试
在配置好后,你可以先进行手动挂载测试。以下以坚果云的 WebDAV 地址为例(有时需要在末尾加 `/`):
sudo mount -t davfs https://dav.jianguoyun.com/dav /mnt/nutstore
如果配置正确,系统会提示输入凭据(或自动读取 `/etc/davfs2/secrets`),成功后你可以使用以下命令检查:
df -h | grep nutstore
ls /mnt/nutstore
若能列出远程文件,说明挂载成功。
---
## 六、在 /etc/fstab 中自动挂载
如果希望开机自动挂载或在执行 `sudo mount -a` 时自动挂载,可以在 `/etc/fstab` 中添加如下条目(示例):
https://dav.jianguoyun.com/dav /mnt/nutstore davfs rw,uid=1000,gid=1000,_netdev,users,credentials=/etc/davfs2/secrets 0 0
- **rw**:读写方式挂载
- **uid=1000,gid=1000**:指定挂载后文件的属主和属组(请根据实际用户 ID、组 ID 修改)
- **_netdev**:表示这是一个网络文件系统,系统会在网络启动后再尝试挂载
- **users**:允许非 root 用户执行挂载/卸载
- **credentials**:指定存储 WebDAV 登录凭据的文件
添加完毕后,使用:
sudo mount -a
来测试。如果无报错且能正常访问 `/mnt/nutstore`,说明自动挂载已配置成功。
---
## 七、常见问题及解决方案
1. **“the server does not support WebDAV”**
- 确认坚果云或其他服务端已开启 WebDAV 功能,并且 URL 正确(可能需要在末尾加 `/`)。
- 在 `/etc/davfs2/davfs2.conf` 中尝试添加 `ignore_dav_header 1`。
- 检查网络是否通畅,以及是否有防火墙阻止。
2. **需要频繁输入用户名/密码**
- 确保 `/etc/davfs2/secrets` 已正确配置并权限设置为 `600`。
- 若使用的是用户级配置,可以改在 `~/.davfs2/secrets` 中保存凭据。
3. **权限问题**
- 挂载后若无法读写文件,需检查 fstab 中的 `uid`、`gid` 选项,或将用户添加到 `davfs2` 组。
- 也可使用 `chown` 或 `chmod` 来调整访问权限。
4. **网络启动顺序**
- 使用 `_netdev` 选项可确保系统在网络就绪后再挂载。
- 若仍有启动顺序问题,可考虑使用 systemd 的 `After=network-online.target` 等机制。
5. **替代方案**
- 若坚果云的 WebDAV 不兼容或不稳定,可以使用 **rclone** 等工具,通过其对坚果云的支持进行挂载或同步。
---
## 八、总结
通过 **davfs2**,你可以轻松地将坚果云(Nutstore)等支持 WebDAV 的云盘服务挂载到 Linux 本地,享受与本地磁盘类似的文件操作体验。若遇到不标准的 WebDAV 实现或连接问题,可尝试 `ignore_dav_header 1` 或使用其他工具(如 rclone)来辅助挂载。
在正确配置后,每次系统启动都会自动加载远程存储,你可以随时访问、编辑和管理云端文件,无需手动登录网页或使用额外的同步客户端。这为多平台文件管理、服务器远程办公等场景带来了极大的便利。
---
**进一步阅读与参考:**
- [davfs2 官方文档](http://savannah.nongnu.org/projects/davfs2/)
- [坚果云官方文档](https://help.jianguoyun.com/)
- [rclone 文档](https://rclone.org/)
希望本教程能帮助你更好地将坚果云等 WebDAV 服务整合到 Linux 系统中,若有疑问或需要更多配置示例,欢迎在评论区留言或参考官方文档。祝你使用愉快!
