Ivan's Blog

使用 Bitwarden 统一管理密码

之前一直使用 Chrome 浏览器自带的密码管理器记住密码。但是最近更换了 Arc 浏览器,虽然同样是 Google 的内核,一样带有密码管理工具,但是在移动端以及其它平台很难同步直接调用。所以打算找一款合适的密码管理器。

去查了 1password 发现价格在同其他人拼车的情况下还可以,但是刚开始我还是希望有一些开源方案折腾一下。而时下开源最优秀的项目应该就是 Bitwarden 了,这里简单记录一下部署与使用的细节。

image.png

服务端

刚开始我并不打算自己部署,因为我对密码保存的安全性要求并没有那么高。对于经常在互联网留下痕迹的人来说,要说自己的账号密码做到 100% 的安全,维护起来的心力成本相当高。因此,我刚开始是选用了官方的服务,直接注册账户密码使用。但是后来发现由于官方服务器在境外,同步速度很是问题,且因为客户端软件设计的问题,同步速度似乎会影响到软件的的运行速度(对比自己部署服务之后的结论),所以我又决定自己部署一个。

家中的服务基本都是部署在群晖的 Docker 中,这次也不例外。刚开始我发现官方的开源服务端占用特别高,遂放弃了。隔了几天意外发现原来有一个第三方的开源项目,是使用 rust 重构的 Bitwarden,名字叫 vaultwarden ,客户端与 Bitwarden 是相互兼容的,但是占用低了很多。

部署

根据 官方文档 的说明,将 vaultwarden 的镜像拉到 Docker 本地,创建新的容器,将容器的 80 端口映射到外网。如果你是命令行下的 Docker,直接使用以下命令即可,记得更换前一个端口:

docker pull vaultwarden/server:latest
docker run -d --name vaultwarden -v /vw-data/:/data/ --restart unless-stopped -p 80:80 vaultwarden/server:latest

容器启动完毕可以直接通过 IP + 端口 访问到部署好的 Bitwarden 的 web 版。

image.png

使用

第一次使用需要先创建一个账户,自己部署的服务,电子邮件可以随意填写不需要验证,只是作为登录名使用。登录成功后就可以导入自己的密码库了,支持的格式有很多,我之前的密码是存储在 Chrome 浏览器中,因此只需要导出一份 csv 格式的表格,再从以下入口导入即可。

image.png

Chrome 的密码导出可以参照以下流程:

image.png

接下来,就可以配置各个终端设备的客户端了。

电脑端客户端

由于 Bitwarden 的浏览器插件 直接是一个完整的客户端主体,所以在 PC 或者 Mac 上,我们只需要安装浏览器相应的 Bitwarden 浏览器插件即可,不需要再额外安装其它客户端。因为即便装了客户端,也无法像浏览器插件一样直接填充,而只能作为一个密码查询工具一样,这与打开浏览器插件的功能是一致的。但是 Mac 下如果使用 Raycast,那么安装了 Bitwarden 的 Cli 客户端就能做到快速查询与复制,如图:

image.png

浏览器插件安装完毕还要进行一下简单的设置,首先第一步就是登录。

我使用了域名 + DDNS + Nginx 反向代理的方式自动解析域名到家中内网的 Bitwarden 服务上,在登录的时候只需要选择自托管服务,然后填写该域名 + 端口即可。

image.png

接着是设置,要在自动填充中将 Bitwarden 设置为默认密码填充工具。此外,如果你厌烦每一次软件超时都需要输入一次密码,则可以像我一样将超时时间设置为「从不」,但是请注意:这会大大增加你密码库被暴露的风险,请谨慎使用!

image.png

手机客户端

手机客户端的界面与浏览器插件端无异,需要注意的是:每一个客户端的设置部分并不会保存,因此每个客户端在使用前都是需要独立设置,比如超时时间、自动填充方式这些。

拿 iPhone 举例,在手机端登录后,进行 Bitwarden 的初步设置,然后进入到系统的「设置」→ 「密码」→「密码选项」→ 找到 Bitwarden 勾选并打开,同时建议关闭其它密码填充方式,只保留 Bitwarden 一个。

1.png

备份

全端设置完毕后,就可以在日后的使用中,在注册网站账户时,使用 Bitwarden 生成的随机密码,提升单个密码强度,且避免由统一账户密码带来的跨站渗透。

最后,由于是自己托管服务,为了避免数据丢失,建议定期导出数据进行备份。在插件的设置页中带有 json 格式的导出方式,但是密码是明文显示的,有加密形式的 json 格式,但是需要自己存好加密的秘钥,一旦秘钥丢失,也无法恢复,所以我建议直接以明文的方式存储在一个本地较为安全的位置,或是通过 zip 压缩再使用密码加密的方式,存储于云端。

image.png

PREV 使用 Surge Ponte 实现便捷的内网穿透
NEXT Figma 布尔型变量事件的一个技巧