前言
自打接触互联网以来,密码安全就是一个非常困扰我的问题
尤其是自从被“神人”破解了我设置的qbittorrent密码并顺手安装了个肉鸡程序后变得记忆深刻。
这让我迫切的认识到密码的重要性。然而,现在有各种被泄露的密码库和弱密码库,这就造成了很大的问题:简单好记的密码容易被撞库破解;而复杂的密码又太难记,一不小心就忘了。
这些问题在现在人均手机不离身的时代倒还好,毕竟靠着各大主流浏览器的密码随机生成功能,只要及时记录在备忘录里,还算能高枕无忧。而且这些浏览器一般都会自带密码管理器,可以帮你记住密码。
但毕竟是第三方服务,总觉得没有握在自己手里舒心。先不谈企业泄密问题,浏览器自带的管理器就有以下几个缺点:
- 随机生成的密码有时不符合某些网站的奇葩要求,还得自己额外设计。
- 大部分密码识别只靠网页的基础域名,终究是有限制。
说的就是你,edge。 - 企业的“朝令夕改”随时可能让服务停止,Microsoft Authenticator的停止就很好的印证了这一点。 …
如此种种,我决定自己弄一个本地优先的密码库。
本地优先的密码库——Bitwarden
Bitwarden也是一个提供密码管理的服务商,在Windows、Android、ios乃至Linux都有相关的客户端,主流的Chrome和Firefox浏览器都有插件,用起来非常方便。
既然我对密码的态度是本地优先,自然不可能用 Bitwarden 的官方服务,必须自己动手自建一个。Bitwarden 提供了简单方便的 Docker 自托管方案,这也是我选择它的重要原因。
自托管服务端
server端有两个选择,一个是官方的bitwarden/server,一个是非官方的dani-garcia/vaultwarden。我是选择vaultwarden,毕竟github的star数是不会骗人的。


在进行搭建之前,我们还需要准备以下东西:
- 个人域名
- 公网ip
搭建
vaultwarden的安装非常简单,它的github页面也有相关的docker命令和compose,不过这里还是给出我自己使用的compose模板。
services:
vaultwarden:
container_name: vaultwarden
image: vaultwarden/server:latest
restart: always
volumes:
- ./data/:/data/
ports:
- 80:80
environment:
# - SIGNUPS_ALLOWED=false # 禁止新用户注册
- DOMAIN=yourdomain # 这是您希望与您的Vaultwarden实例关联的域名。
- LOGIN_RATELIMIT_MAX_BURST=20 # 允许在一阵登录/两步验证尝试中的最大请求次数。
- LOGIN_RATELIMIT_SECONDS=60 # 这是来自同一IP的登录请求之间的平均秒数,在Vaultwarden限制登录次数之前。
- ADMIN_RATELIMIT_MAX_BURST=20 # 这与LOGIN_RATELIMIT_MAX_BURST相同,只争对admin面板。
- ADMIN_RATELIMIT_SECONDS=60 # 这与LOGIN_RATELIMIT_SECONDS相同
- ADMIN_SESSION_LIFETIME=60 # 会话持续时间
- ADMIN_TOKEN=yourtoken # 此值是Vaultwarden管理员面板的令牌(一种密码)。为了安全起见,这应该是一个长的随机字符串。如果未设置此值,则管理员面板将被禁用。建议openssl rand -base64 48 生成ADMIN_TOKEN确保安全
- SENDS_ALLOWED=false # 此设置决定是否允许用户创建Bitwarden发送 - 一种凭证共享形式。如果只是自己用,请求改为false
- EMERGENCY_ACCESS_ALLOWED=true # 此设置控制用户是否可以启用紧急访问其账户的权限。例如,这样做可以在用户去世后,配偶可以访问密码库以获取账户凭证。可能的值:true / false。
- WEB_VAULT_ENABLED=true # 此设置决定了网络保险库是否可访问。一旦您配置了您的账户和客户端,停止您的容器,然后将此值切换为false并重启Vaultwarden,可以用来防止未授权访问。可能的值:true/false。
根据上面的模板进行个人调整后,输入docker composeup up -d即可直接运行。后续访问需要使用vaultwarden实例关联的域名才能访问,也就是环境中DOMAI项所设置的个人域名。至于反向代理之类的,则需要另寻教程,也非常简单。
SIGNUPS_ALLOWED参数默认是true,允许新用户进行注册。在开始之前都必须删除该项参数或者将参数设置为true,不然连自己也无法进行注册,右上角会弹出相应的报错。后续想一个人用,只需将true改为false即可。
建立账户
我们需要在这里建立一个自己使用的账户,密码设置一个自己一定可以记得住/记载手机里面的强密码即可,以后基本上只需要记住这一个密码就完全搞定了。

新增密码
视线来到右上角“新增”,点击即可出现各种密码类型,我相信各位最常用的应该就是登录这一个功能了。

页面非常直白,一步一步照着填即可。网站可以多选,理论上你可以将各种不同网站但都是同一套账号密码存放在同一个项目里,不过都搭建密码库了,我相信大家还是不会做这种浪费时间和金钱的事。
值得注意的是,默认的网站识别也是基于基础域名,也就是主域名,这一点跟edge等一众浏览器自带的密码管理器是一样的。点击后方的齿轮样式图标即可匹配检测更改检测机制。

对于跟我一样多个同一个主域名下有数个子域名,且子域名服务所需的账户和密码都各不相一的情况,可以考虑将匹配检测改为主机,这样bitwarden客户端识别到符合的子域名时就能正确的显示密码,
**——再也不用忍受edge一次弹出数个毫无相关的密码选项了。
转移密码
不得不说,导出密码库是一个好文明,跟导出收藏夹一样,大大降低了更换密码管理器的成本。
这里只说edge浏览器的操作,其他浏览器照葫芦画瓢的操作即可。我们只需进入到设置>密码和自动填充>Microsoft 密码管理器,点击“密码”右边的三个点,选择Export passwords,即可得到一份非常完整的csv密码文件。如果后续不在需要edge的密码管理功能,那么此时也可以顺手将“请求保存密码”关闭,并将自己的密码逐个删除。
回到vaultwarden页面,点击工具>导入密码,选择刚刚导出的csv文件,并在上方的文件格式选择egde,然后点击导入数据即可。

客户端
服务端大致操作说完,接下来就是万众瞩目的客户端了。毕竟只有好的客户端才能真正发挥密码库的实力,光有服务端的bitwarden还不如备忘录来的方便。
我们进入到bitwarden的主页,点击Download,便可下载到各种浏览器插件和各大系统的客户端。
以浏览器插件为例,我们需要下方的“正在访问“选择”自托管“,并填写自己设置的vaultwarden的域名。

登录成功后,我们便可以在客户端上同步进行密码的更新、增加、删减,它会自动上传到服务端并同步到其他客户端,达成真正的一端多用。
不过由于默认的密码库超时时长太短,导致每次都得先输入一次主密码,这低于平时习惯edge密码管理的我来说极度不方便,因此我会在自己觉得”信的过且绝对不会丢失“的设备将密码库超时的时间改为”从不“,这样基本就获得了和以前没什么两样的体验了。

值得一提的是edge的手机版本其实也可以根据上述的类似操作关闭自带密码保存,并安装手机浏览器版本的扩展,这样的也可以获得一个非常棒的使用体验。这点也是我在手机版本越做越垃圾的今天还在坚持使用edge的原因。
尾声
在三年前我还对浏览器的密码管理大为赞叹并大力加以使用,没想到三年后的我居然会不满于此。写到这里突然想到,这算是对美好生活的进一步追求?还是算对为满足自身欲望的有一次行动?
语言真是神奇,换一下说法,褒义贬义居然能发生180°的大回旋,乐。