本文最后更新于 2024-03-15,文章内容可能已经过时。

本文转载自:自搭建全平台私有密码库 bitwarden & Vaultwarden - OttoLi 的胡言乱语

密码管理之痛

相信大家都有一个困扰,就是各种软件、网站的密码管理问题。很多人都是全靠大脑记忆,估计下面列举的痛点或多或少都有一些。

  • 全都用相同的密码,感觉不够安全
  • 全都用不同的密码,记忆难度过大
  • 各平台的密码长度、复杂度要求不一样
  • 有些账号需要定期重置密码,加重记忆负担

那么就需要一定的密码管理策略来解决这些痛点。针对这个问题,我也找到了这么几种方案:

方案 可靠度 安全性 便利性 成本
脑子记 可靠度很低,除非过目不忘 安全性极高,基本不会泄露 便利性极高,不依赖任何外部介质 0
纸质介质记录 可靠度极高,一般不会凭空消失 安全性较低,有被偷看的风险 便利性较低,不便于随身携带、随时查看 5块钱买个本
本地文档记录 可靠度较低,须做好多端备份 安全性一般,明文记录 便利性较低,不便于多平台随时查看 0
云文档记录 可靠度较高,建议选靠谱的云服务(但不排除服务调整或突然终止 安全性较低,明文记录且上云 便利性很高,多平台同步 0
密码管理软件(纯本地) 可靠度较低,须做好多端备份 安全性较高,专业加密算法 便利性较低,不便于多平台随时查看 一般免费
密码管理软件(上云) 可靠度较高,建议选靠谱的服务商(但不排除服务调整或突然终止 安全性较高,专业加密算法 便利性很高,一般支持多平台同步 一般收费
密码管理软件(私有云) 可靠度取决于你的维护(做好备份工作 安全性较高,专业加密算法 便利性很高,一般支持多平台同步 需要私有云服务器、nas等

综合来看,首先前四种方案都有较为明显的短板,不适合作为长期使用的密码管理方案。

在后三种专业密码管理软件中,首先安全性都能够得到不错的保证,差别主要体现在可靠度、便利性和成本之间的取舍。

  • 选择纯本地,相当于为低成本舍弃可靠度和便利性
  • 选择上云,相当于以高成本换取最佳体验
  • 而选择私有云,在有云服务器或 nas 的情况下,则可以 0 成本获得最佳体验

本文介绍的私有化密码管理方案将基于开源项目 bit­war­den/Vault­war­den

bit­war­den 是开源的专业密码管理软件,是目前最为常用的密码管理软件之一,主要特点有:

  • Windows、Mac、Linux、Android、iOS 全平台覆盖
  • 支持 Chrome、Edge、Safari、Firefox 等主流浏览器插件
  • 支持 密码文本信息表 甚至 附件 的加密保管
  • 支持自动填写网页、app 账号密码
  • 支持文件加密分享,方便地通过 bitwarden send 分享隐私文件、照片等
  • 支持生成两步验证器,为每个密码设置 TOTP 动态口令
  • 支持团队密码库,可在团队成员中共享团队密码
  • 支持密码检测报告,检测密码库中的重复密码、弱密码、已被泄露的密码等
  • 代码开源,支持自搭建,将数据全部掌握在自己手中

在安全性方面,bit­war­den 的原理是使用一个足够复杂的 主密码 来管理其他所有的密码,采用 AES-256 位加密、加盐哈希和 PBKDF2 SHA-256 来保证所有信息的安全。安全性可以这么说,只要你自己不主动把主密码泄露,目前地球上没有能暴力破解的计算机。bitwarden 官网有比较详细的介绍,它会定期进行第三方安全审计,通过了 GDPR、SOC 2、HIPAA、Pri­vacy Shield 和 CCPA 等认证。

主密码无法通过任何方式恢复,如果忘记密码最多只能通过邮件获取你预先设置的密码提示,如果依然无法想起主密码,就会失去所有数据。

Bitwarden也提供了服务端用于自行部署。不过官方服务端性能要求高,所以我使用了用rust编写的非官方服务端vaultwarden(原名bitwarden_rs)。

在使用bitwarden之前,窝总共有四五个密码。最最开始所有账号用的都是同一个密码,后来害怕密码泄露,又想了三四个密码,小网站/小APP使用最简单的密码,即使泄露也无伤大雅,比较重要的账户使用中等复杂的密码,重要的账号/涉及支付的账号使用最复杂的密码。

但是这样还是会有一些小问题,比如1. 一些小网站就要求大小写字母加符号。而有一些APP竟然不允许密码中包含符号。。。绝了 2. 有时候我也不知道某个账号用的是哪个密码,只好所有密码都试一遍。3. 有时候我记不住账号(┬┬﹏┬┬),因为我有多个邮箱和用户名。

所以我开始使用密码管理器,如果你没有自己的服务器,域名,和比较富裕的时间,我建议使用官方服务,官方免费服务足够个人使用(需要有一定科学上网能力,来接收Google reCAPTCHA)。

Bitwarden提供优秀的自动填充服务,并且可以利用系统的生物识别(指纹,人脸等)进行认证。

同时Bitwarden不止可以用来存储密码,还可以存储文件/文本/银行卡/个人信息。并且提供安全分享功能(seed)。

搭建教程

需要有一台vps,一个域名,如果服务器位于国内则需备案。
我使用的是阿里云1h 2g 5m

(一) 安装Docker和Caddy

1. 安装必要软件

sudo apt update
sudo apt install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

2.添加官方密钥

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

3. 添加仓库

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. 安装Docker

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

5. 安装Caddy

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

(二) 部署Vaultwarden

1. 拉取镜像

docker pull vaultwarden/server

2. 启动容器

docker run -d --name vaultwarden -v /vw-data/:/data/ -p 8080:80 vaultwarden/server:latest

这将创建一个名字叫vaultwarden,将容器的/data/目录映射到机器的/vm-data/目录,将容器的80端口映射到机器的8080端口,使用的镜像为vaultwarden/server:latest.

3. 配置Caddy

mkdir /etc/caddy
touch /etc/caddy/Caddyfile
vi /etc/caddy/Caddyfile

按i进入编辑模式,输入

password.example.com {
    reverse_proxy localhost:8080
}

之后输 sudo systemctl reload caddy重启Caddy。
去DNS服务商那里把域名解析到vps,
览器访问password.example.com,出现bitwarden的界面就ok.入

4. 注册

点击创建账号,填写电子邮件,设置主密码.
主密码一定不能太简单.
只有知道主密码才能访问密码库,即使别人盗取了你的数据库,在不知道你主密码的情况下依然无法访问你的密码库,所以主密码一定要设置复杂一点.

(三) 设置Vaultwarden

1. 禁止新用户注册并开启WebSocket

为了防止他人注册,需要禁止新用户注册.

docker rm vaultwarden
docker run -d --name vaultwarden \
  -e SIGNUPS_ALLOWED=false \
  -e WEBSOCKET_ENABLED=true \
  -v /vw-data/:/data/ \
  -p 8081:80 \
  -p 30122:3012 \
  vaultwarden/server:latest

之后去修改 Caddyfile, 添加

reverse_proxy localhost:30122

(四) 获取Bitwarden应用

访问 https://bitwarden.com/download/ 获取各平台应用

请选择你的系统

Windows
Linux
移动端

Chrome
Edge
Firefox
Tor