基于 Vaultwarden 和 Keyguard 的自托管密码管理实践

💡 原文中文,约5700字,阅读约需14分钟。
📝

内容提要

作者因 Enpass 订阅涨价,转而在 NAS 上用 Docker 自托管 Vaultwarden 管理三四百个密码。部署要点:映射 /data 目录持久化数据、修改端口、配置 DOMAIN 环境变量,且必须通过 HTTPS 访问。推荐用 Cloudflare Tunnel 实现内网穿透并自动解决证书问题。安全建议:注册后关闭 SIGNUPS_ALLOWED、慎用或关闭 /admin 后台、启用 2FA。迁移用导入功能,浏览器用官方插件,移动端推荐 Keyguard。

🔎

延伸解读

为什么选择 Vaultwarden 而非官方 Bitwarden 自托管

文章指出,Vaultwarden 是社区维护的非官方 Bitwarden 后端,相比官方基于 .NET 和笨重数据库的自托管方案,其 Docker 镜像极其轻巧,常驻内存通常不过百兆。更重要的是,它能从后端直接解锁 TOTP 管理、多人共享等高级功能,而官方服务对免费用户在前端隐藏了 TOTP 入口。对于拥有 NAS 且希望低成本自建的个人或小团队,Vaultwarden 在资源占用和功能完整性上优势明显。

HTTPS 是自托管密码管理的硬性门槛

文章强调,除非仅在 NAS 本地 localhost 访问,否则通过局域网 IP 以 HTTP 打开 Vaultwarden 会被浏览器拒绝,因为密码管理器依赖的 Web Crypto API 只在可信网络(HTTPS)下可用。这意味着远程访问必须配置 HTTPS。作者推荐使用 Cloudflare Tunnel 实现内网穿透,它不仅能自动解决 SSL/TLS 证书问题,还附带免费 DDoS 防护和访问控制,尤其适合国内低等级 NAT 家庭宽带用户。

部署后必须立即收紧的权限设置

文章提醒,Vaultwarden 默认允许任何人注册账号,若域名被扫描或误入,他人可在你的服务中注册并上传附件,使其沦为公共网盘。因此注册完自己的账号后,应立即将 SIGNUPS_ALLOWED 设为 false 并重新部署。此外,/admin 管理后台默认关闭,若开启需设置复杂的 ADMIN_TOKEN;作者建议配置完成后直接删除该字段,彻底关闭后台,以降低安全风险。

迁移与客户端选择:并行过渡,移动端可换 Keyguard

文章建议迁移时使用 Vaultwarden 的导入功能,作者的三四百条 Enpass 数据通过 JSON 格式完美解析。在确认所有登录方式迁移完成前,最好让新旧工具并行一段时间,不要立即卸载原密码管理器。浏览器端目前只有 Bitwarden 官方插件可用;移动端作者推荐开源第三方客户端 Keyguard,其 UI 和交互更优,支持通行密钥迁移,并能接管 Android 14 的第三方自动填充,即使网络波动也能依靠本地密码库正常使用。

❓

Q&A

为什么作者选择自托管 Vaultwarden 而不是继续用 Enpass 或其他密码管理器?

作者因 Enpass 订阅涨价而决定不再续费,需要为三四百个密码搬家。其他选项各有问题:1Password 订阅费用高昂,LastPass 有安全丑闻,KeePass 跨平台体验碎片化,Bitwarden 官方服务对 TOTP 等高级功能收费且客户端体验不拔尖。由于家里有 24 小时开机的 NAS,自托管 Vaultwarden 成为自然选择。

Vaultwarden 和官方 Bitwarden 自托管后端相比有什么优势?

Vaultwarden 是由社区维护的非官方开源 Bitwarden 后端服务。与官方基于 .NET 和笨重数据库的自托管后端相比,Vaultwarden 镜像极其轻巧,常驻内存通常不过百兆;核心功能完备,还能直接从后端解锁 TOTP 管理、多人共享等高级功能,非常适合个人和小微团队自建使用。

在 NAS 上用 Docker 部署 Vaultwarden 需要注意哪些关键参数?

关键参数包括:1. 镜像拉取使用 vaultwarden/server 的 latest 标签;2. 目录映射将容器内 /data 目录映射到 NAS 实体文件夹以持久化数据;3. 端口映射修改 ROCKET_PORT 或使用 bridge 网络将 80 端口映射为其他端口;4. 环境变量中配置 DOMAIN 为公网域名。图形化部署修改环境变量后可能需重建容器,Docker Compose 建议将变量写入 .env 文件。

为什么 Vaultwarden 必须通过 HTTPS 访问?如何解决 HTTPS 和公网访问问题?

因为浏览器有安全上下文强制策略,密码管理器网页端依赖的 Web Crypto API 加密接口只在可信网络中才能调用,家庭内网 HTTP 连接会被判定为不可信,Vaultwarden 无法调用该接口就会拒绝访问。解决方法是使用反向代理处理 HTTPS 请求,并通过 Let's Encrypt 或 Cloudflare 获取证书。对于低等级 NAT 或想省事的用户,推荐使用 Cloudflare Tunnel 隧道功能,它能安全映射内网服务并自动解决 SSL/TLS 证书问题,还提供免费 DDoS 防护和访问控制。

部署 Vaultwarden 后有哪些必要的安全设置?

注册账号后应立即将 SIGNUPS_ALLOWED 环境变量设为 false 并重新部署容器,防止他人注册。管理后台 /admin 默认关闭,如需启用需设置复杂的 ADMIN_TOKEN,但建议配置完成后删除该字段彻底关闭后台。此外应启用主账号的 2FA 两步验证,支持 TOTP、通行密钥或 Duo Security,并妥善保管紧急恢复代码。

如何将现有密码迁移到 Vaultwarden?浏览器和移动端分别用什么客户端?

登录 Vaultwarden 后进入「工具」页面选择「导入」,可导入主流密码管理器格式,如 Enpass (JSON)。迁移完成前建议不要立即卸载旧工具,让两者并行一段时间。浏览器端使用 Bitwarden 官方插件,安装后选择自托管服务并输入域名登录即可自动填充。移动端推荐第三方开源客户端 Keyguard,支持多平台,UI 和交互更出色,还能从其他应用导入通行密钥,并接管 Android 版 Chrome 的第三方自动填充。

🏷️

标签

➡️

继续阅读