Aoang's Blog

岁月在电波中流淌,人生在音乐中升华

Bitwarden 服务指南

Aoang's Avatar 2019-12-14

前两天,在 V2ex 看到 V 友发帖询问 Bitwarden 高级版购买的问题

和楼主一样,之前都是使用的 KeePass,看帖子里对 Bitwarden 的介绍,就去官网看了看,发现这配套服务除了好看也比较齐全,毕竟开源软件多数都是不会愁生态的,就是多数有点难看。

官网注册了一个账号,发现的确比 KeePass 好看的多。密码管理器中,我一直没有依赖 KeePass 自带的 TOTP,因为便捷性、外观再加上太折腾了,综合考虑下来,Android 上一直使用的是付费的 Authenticator Plus,Windows 下用 WinAuth 和 KeePassXC,Linux 的选择很多,不多叙述。
KeePass 其实功能很强大了,但折腾是真的。不折腾的软件其实也有,但不支持自建的自然不在考虑范围之内。

Bitwarden 和 KeePass一样,它也支持备注、附件和自定义键值对。

不同的是,附件有大小限制,不过一般很难用到这个;自定义键值对的存在是很有必要的,如果没有这个,那多半就不会有后面的内容了,因为不会去折腾了;但是它没有历史记录这个东西了,虽然很可惜,但是不大用得上,而且后面做了其他方面的弥补机制。

感觉上怎么不如 KeePass?其实未必,对于密码管理器而言,KeePass 可能太专业了,只专注这一块,而其他方面就比较薄弱了。

Bitwarden 默认只有四种类型的内容,除了密码管理,还有卡片、身份、笔记。
其实从字段来看,它只有密码管理一种,而其他三种,卡片里面是用来储存银行卡信息的,这其实就是键值对,只不过事先定义好了;身份也和字面意思一样,是用来储存身份信息的,同样的,都是键值对;笔记其实就是每种类型都有的备注。

Bitwarden 默认是有文件夹的,但是这个文件夹和 KeePass 不同,KeePass 允许有根、子存在,并且继承权限,它都是平级的。
还有一个密码管理器都有的功能,密码生成器,这也不需要多叙述。

和 KeePass 对比起来功能少了很多,同样的也简单了很多,但是更重要的是,好看了很多。
一直在说功能上的对比,其实还忽略了一点,Bitwarden 是部署在服务器上的,同步无痒,它的客户端也都是开源的,生态自然是没什么问题的。
就是有一点要吐槽,Windows 客户端是个套壳游览器,界面功能还没有网页全。

Bitwarden 的网页功能的确多得多,除了密码库的管理,还能导入导出数据,多数密码管理器的数据都能直接导入。

网页上还做了一个功能,根据互联网公开的报告来检查账号、密码有没有被泄露,以及检查你在支持两步验证的网站是否打开了两步验证。对于账号、密码多的人来说,这就不用自己每次写个脚本去跑了。

如果你自建了,你会发现一个新的功能——组织。组织的功能和个人账号的功能是差不多的,但是组织可以很方便的共享,同时共享功能也有相应的权限机制。

介绍了这么多,不如讲一下部署过程?

部署的机器是一台闲置的 1C1G1M 小机器,远在美西。

根据 Wiki 上的描述,Docker 部署还是很舒服的,一会儿就跑起来了。
自己在网页端、手机端试了试,觉得有些惊艳,毕竟比 KeePass 好看太多了。

早在部署之前,就考虑到一个问题,使用网页端管理密码比较频繁,毕竟套壳游览器用不惯,所以网页端的功能不能关,对于这种敏感数据还是套个 CDN 比较好。

一边在服务器上装 Docker,一边就在解析域名,使用 Cloudflare 来保护服务器。Bitwarden 部署好之后,再装一个 Nginx,写写配置文件,屏蔽所有非 Cloudflare IP 段的请求,最后打开端口,使用游览器访问。这些教程网上都很容易找到,就不多叙述了。

Bitwarden 部署的时候,使用的是 SQLite,没有用其他数据库,足够轻量,也方便迁移。但是问题也就出来了,如果服务器因为不可抗拒的因素丢失数据呢?备份和同步数据库的问题必须得到解决。

如果使用的是 MySQL,那直接 MySQL 主从热备、读写分离什么的,也都好弄了,但为了轻量,还是算了吧。查了查其他人的备份方式,最常见的就是备份 SQLite 文件,加密备份到 Dropbox。但是我不怎么用 Dropbox,所以放弃了这个方案。

到最后使用的方案是,Crontab 定时用 Git 备份到 GitHub 开 Webhooks 通知其他机器备份,相当于算是弥补了版本控制吧。同时本地电脑也可以定期 pull 下来,这样可以避免某一天,这个世界没有互联网了。

至此,本篇文章已经结束了。

还有一部分不得不说一下,注重轻量的问题的时候,在 Windows 和 Linux 下都尝试部署过 Bitwarden。但是一个主用 Golang 的人突然用 Rust 编译程序,那速度和依赖…本身 Windows 的依赖就难处理,最终放弃了在 Windows 下部署,当然了并不是因为难,其实是懒得装 VS。
Arch 有包,事先有装过依赖的话,直接就能跑完,Debian 上装好依赖,编译一下也还行。WSL 也能编译成功。