自建密码管理器——Vaultwarden
自建 Vaultwarden 已有 1 年多了,体验很不错。最近更新下 Vaultwarden 版本,顺便写篇搭建教程(目前网上的教程有些过时了,特别是 Nginx 反代)。
为什么使用密码管理器
我相信绝大多数人管理密码的方式就是「一招鲜,吃遍天」,但这种方式显然是不安全的。不说大型网站泄露密码这种较小概率事件,且说你有时候需要在一些小型网站注册,而你不能保证这些小型网站的密码不是明文存储或者会被盗用。
而在这种情况下,一旦出现密码泄露,攻击者再进行撞库,那后果是很惨的。事实上,针对 Microsoft 账户的撞库事件我在网上论坛已经看见很多次了(撞库攻击来替换你的紧急邮箱,如果你没有注意到微软给你发的替换紧急邮箱信息,那么 30 天后,你的账户不再是你自己的了)。
而进阶一点,你会想到设置一个「主密码」,然后注册各大网站时,针对各大网站的特点(例如在主密码基础上增添网站 Host),并针对网站的密码强度要求二次修改主密码。这其实也不是一个很好的选择,因为这仍然会有一定的记忆负担,而且一段时间后,你可能就会忘记网站的密码强度要求。更抽象的是,一些网站密码要求特殊字符,但并不把 _
视为特殊字符(来源于我的个人经历 :))
所以密码管理器的需求出现了,出名的有 Microsoft Authenticator, Google Authenticator, Bitwarden, 1Password 等。其实各大浏览器也有一定的密码管理器功能,但受制于多端同步问题,且不推荐。前两者是各大厂的产品,后两者是在这领域比较出名,且功能比较完善的产品。
如果你没有在 VPS 上自建服务的能力(或者说没有条件),那么你可以试试 Bitwarden 提供的官方免费服务,尝试下 1Password 的家庭车。以下将讲述自建 Bitwarden Server——Vaultwarden。
搭建 Vaultwarden
Vaultwarden 是非官方版本的服务端的一个开源项目,且是与官方提供的客户端所兼容的和在维护中的。
以下采取 Docker 搭建,并使用 Nginx 进行反代(如果要自建 Server,请确保你使用 HTTPS 连接)。
创建容器
为了方便更新和维护,使用 docker-compose
来进行具体的部署,创建一个文件夹 vaultwarden
来存放部署相关文件。在其下创建 compose.yml
、.env
和 update.sh
文件。
compose.yml
文件内容如下:
1 |
|
注意修改挂载路径和映射端口。
.env
文件内容如下:
1 |
|
其中 domain
添加需要有协议,一个示例:https://xxx_vaultwarden_xxx.lllei.top
。
其中 admin_token
生成使用 Argon2id PHC 字符串(你不用清楚这几个名词含义,你只要知道这是一个现代安全的哈希方式得到的字符串)。
生成方式如下:
- 首先使用
openssl rand -base64 48
生成随机的明文 token(之后在 admin 页面填写 token 是填写该 token)。 - 然后使用
docker run --rm -it vaultwarden/server /vaultwarden hash --preset owasp
来散列该 token。 - 在
.env
文件中填入散列后得到的字符串。
update.sh
文件内容如下:
1 |
|
然后使用 chmod +x update.sh
,之后即可使用该脚本更新。
最后启动容器:docker compose up -d
。
反向代理
官方所给的 Nginx 参考配置:
1 |
|
最后
使用方法
Goole 商店有安卓客户端,名字是 Bitwarden
,苹果商店有苹果客户端。
电脑就是用 浏览器插件 即可。
请参考官方指示。
设置
当你输入你的域名进入之后,注册一个用户,请牢记主密码。
在 {host}/admin
路径下可以进入管理界面进行二次设置。特别是当你是自用需求时,可以关闭用户注册。
以上所有都只是起到一个入门作用,且满足绝大多数人的需求,如果想要进一步了解,请参考 官方 WIKI。
比如说可以增加客户端 push,增加邮箱设置(个人使用几乎用不到),增加客户端实验性功能(ssh)。