Bitwarden 与 Vaultwarden 的关系

先有 Bitwarden,后有 Vaultwarden

Bitwarden 是一家公司的名字,也是一个开源密码管理器产品的名字。它有两部分:客户端(浏览器插件、手机 App、桌面程序)和服务端。2018 年 Bitwarden 把服务端代码开源,任何人都可以审查它到底怎么处理你的密码。这在密码管理行业里是不多见的做法,因为大多数同类产品只开放客户端,服务端是个黑盒。

但官方服务端有个现实问题:它是用 .NET 写的,部署起来偏重,需要不少内存和组件,对机器配置有不低的要求,对只想在家里跑个小服务的个人用户并不友好。普通家庭用户为了一个密码服务去配置一套完整的运行环境,怎么看都有点杀鸡用牛刀。

于是社区出现了 Vaultwarden。它最早叫 bitwarden_rs,后来改名 Vaultwarden,是一个用 Rust 重写的轻量 Bitwarden 兼容服务端。它的核心卖点是:内存占用极小,一台旧电脑、一个 NAS、甚至一个树莓派都能轻松跑起来。Rust 语言在系统级软件里以省内存著称,这也是为什么同样的功能它只需要官方服务端一小部分的资源。如果你读过《NAS DIY 指南》,应该知道这类小机器最适合常驻运行这种小而稳的服务,Vaultwarden 几乎是为它们量身定做的。

部署形态上,Vaultwarden 官方提供独立的可执行文件,也有现成的容器镜像。绝大多数自建玩家选择容器方式部署,因为它把环境依赖打包在一起,一条命令就能拉起来,升级时换个镜像标签即可。下一章会给出具体的 Docker 部署步骤,这里只需建立一个印象:这不是一个需要专门购置硬件才能跑的服务,你手边的主力设备足够了。

和官方服务端的关系也可以这样理解:它们是同一份协议的两个实现。你的密码库在这两个服务端之间是可以迁移的,导出再导入即可,不会因为选了 Vaultwarden 就被锁死在这条路线上。将来若有一天你决定换回官方云或者搬家到另一台机器,数据始终是你的。

对擅长读代码的读者还有一条额外的定心丸:Vaultwarden 的源代码完全公开,任何人都能审查它对协议的实现是否忠实。事实上社区确实有人这么做,历史版本里被发现的问题都得到了修复。开源不是万灵药,但在这个场景里它把「相信实现」变成了「可以验证实现」。

至此可以给本章一个总结了:Vaultwarden 是一个把 Bitwarden 协议轻量化的独立实现,用官方客户端、连自家服务器、存自家数据。记住这句话,接下来每一章的操作都会顺理成章。

官方服务端 vs Vaultwarden

兼容关系:客户端是官方的,服务端是自己的

这是最容易被新人误解的一点。Vaultwarden 不是 Bitwarden 的「简化客户端」,也不是一个需要专用 App 的独立产品,更不是什么第三方魔改版本。它实现的是 Bitwarden 的服务端 API 协议,是协议层面的兼容。

维度 说明
客户端 直接用 Bitwarden 官方的全平台客户端,浏览器插件、iOS、Android、桌面端都可以
连接方式 在客户端登录界面填自建服务器的地址,账号密码直接走自己的服务器
功能兼容 支持密码库同步、两步验证、组织共享、紧急联系人等核心功能
数据存储 数据存在你自己的服务器上,不经过 Bitwarden 官方的云

换句话说,你在手机上装一个官方 Bitwarden App,登录时把服务器地址指向家里的 Vaultwarden,剩下的体验和用官方服务几乎没有区别。家人不需要知道什么是自建,他们看到的只是一个普通的密码 App。这也是 Vaultwarden 能被广泛信任的原因:客户端代码是官方的,加密协议是官方的,你只是换了一台存放数据的服务器。

兼容性的另一个好处是客户端更新与你无关。Vaultwarden 追赶的是协议而不是客户端版本,官方客户端照常升级,你的密码库照常用。这种架构决定了自建者的精力主要花在服务端这一小圈地方。

为什么改名

Vaultwarden 原名 bitwarden_rs,名字里的 rs 指 Rust。改名发生在 2021 年,主要有两个原因:

一是避免商标混淆。带 bitwarden 字样的名字容易让人以为它是 Bitwarden 官方维护的项目,实际上它是独立的社区项目,官方并不背书,也不会为它负责。万一某天它出了问题,背锅的很可能是 Bitwarden 公司,这对双方都不公平。

二是项目定位早已超出「重写」的范畴。它在兼容协议之外发展出了自己的管理后台、自己的配置方式、自己的文档体系,是一个独立运转的软件,需要一个独立身份。改名是社区成熟的标志。

理解这段历史很重要,因为你会在各种教程里同时看到两个名字,老文章里写的是 bitwarden_rs,新教程里写的是 Vaultwarden。它们指的是同一个软件,新部署一律用 Vaultwarden 这个名字,遇到旧教程心里有数即可。

从 bitwarden_rs 到 Vaultwarden

协议兼容意味着什么

多说一点「协议兼容」这件事,因为它是整个方案的支点。Bitwarden 的客户端和服务端之间通过一套公开的 HTTP API 通信,包括登录、同步密码库、上传附件、注册两步验证等接口。Vaultwarden 把这套接口实现了一遍,行为和官方服务端一致。

所以在客户端眼里,你的家用小服务器和 Bitwarden 官方的服务器集群没有区别。服务器是哪个实现的、跑在什么硬件上、由谁维护,客户端一概不关心,它只认协议。这种基于协议的兼容比基于代码的移植更稳固,因为只要协议不变,双方可以独立演进。

接口类别 客户端用来做什么 Vaultwarden 是否实现
账号接口 注册、登录、修改主密码 实现
同步接口 拉取和推送密码条目 实现
组织接口 家庭共享、权限分配 实现
两步验证 TOTP、安全密钥、邮件验证 实现
附件接口 密码条目挂文件 实现

这也是为什么敢把家人托付给这套方案:他们用的就是官方 App,所有上手教程、界面截图都能对得上。自建的复杂性藏在服务端,对使用者完全透明。

谁在维护,可靠性怎么样

Vaultwarden 是社区驱动的开源项目,托管在代码托管平台上,由志愿者维护。这带来两个必须正视的事实:

第一,它没有商业公司的客服和 SLA,出问题要在社区里找答案,没人承诺几小时内响应。好消息是社区非常活跃,常见问题几乎都有现成的解决方案,从部署到踩坑的记录都齐全,遇到困难时通常搜一下就能找到思路。

第二,它的更新频率不低,每个版本都会同步兼容官方客户端的新变化、修复发现的安全问题。这既是好事(协议始终保持兼容),也意味着运维者需要定期升级,不能部署完就丢在脑后。升级的具体做法在后面的升级章节会详细讲。

对应的运维思路可以参考《软路由指南》里对开源固件的态度:用社区作品享受自由与透明,同时承担起自我维护的责任。开源社区不提供保姆,但把选择权和知情权交给了你。

一个实用的建议是:部署前花十分钟浏览项目的发布说明,了解当前版本的已知问题。社区项目通常会把重要改动和注意事项写得很清楚,这十分钟往往能省掉后面几个小时的排障。另外关注一下当前版本的发布日期,太久没更新的版本可能跟不上客户端的变化。

最后明确一点:Vaultwarden 与 Bitwarden 官方没有隶属关系,也不要把它理解成官方的轻量版。它是社区按公开协议实现的独立软件,遇到问题去 Vaultwarden 的社区求助,而不是找 Bitwarden 官方客服,后者帮不上忙。分清这个边界,排障时才不会走弯路。

适合什么人

场景 是否适合用 Vaultwarden 自建 理由
有常开的家庭服务器或 NAS 非常适合 资源占用低,常开零负担
只有一台关机就断电的笔记本 不适合 服务会随之离线,失去意义
不愿意折腾域名和 HTTPS 不适合 HTTPS 是硬要求,绕不过
想把全家人密码集中管理 适合 支持组织共享与紧急联系人

自我评估的关键就两条:有没有一台常开的小机器,愿不愿意花一两个小时把 HTTPS 配好。两者都满足,这条路会比想象中顺畅很多;有一条不满足,建议再想想或者先补齐条件。自建的成败往往不取决于技术水平,取决于这两个前提是否扎实。

自建前的自我评估

延伸阅读

  • NAS DIY 指南:为 Vaultwarden 提供一台常开的低功耗主机
  • OpenWrt 基础:从路由器层面理解家庭网络的访问入口