资料转载:使用 VaultWarden 搭建个人密码管理器 原先Bitwarden_victoruu的博客-CSDN博客
0. 背景
超过 10 年网龄的我,注册过很多网站帐号,而出于安全方面的考量(避免脱库),每个网站的密码都用不同的复杂的随机密码,这时候一个密码管理器就显得十分有必要,我使用的是 LastPass 免费版,至今已经用了 8 年有余(特意查了下 Item 的最早记录)。
不过最近几年,听到 LastPass 有安全泄露问题的消息越来越多,对于一个软件开发从业者来说,密码的安全是我非常关注的。
可没想到的是,安全带来的代价,却让我最终放弃 LastPass ,可能你无法相信,但事实确实如此。
不知何时开始的,LastPass 经常定期会要求已经授权的设备进行重新授权(事后才知晓的)。
这听起来是一件好事,但给我带来了非常糟糕的使用体验。
有一次印象非常深刻,也是第一次出现这种问题,当时我以为是使用时间太久,输入主密码就可以重新登陆使用,但是那次无论我用密码登陆多少次,都提示我去邮箱重新授权,但死活在 163 邮箱里收不到邮件,我非常的害怕,害怕我这么多年的保险箱就这么没了。这种状态给了我非常大的打击,我非常懊恼当时为什么选择它,也非常纳闷为什么一个产品会越来越用?
直到一次偶然的机会,我登陆了我多年未使用的 QQ ,发现在 QQ 邮箱里有 LastPass 的邮件,原来 LastPass 把邮件发到了这里,但是为什么呢?难道以前设置过安全邮箱?可是过后我在 LastPass 的官网里好像找不到相关的设置(或许是我没有找到)。
重新授权登陆后,由于工作忙,我没有继续跟进这件事了,也没有进行复盘,怎么会遇到这种事情,下次遇到这种事情该如何处理。
以至于到昨天晚上,我需要登陆一些帐号, LastPass 又在关键时刻,罢工了。
是的,它又提示我要重新授权才能使用,可问题是163 邮箱无论如何也收不到授权邮件。由于时间过了太久,不记得之前是发到 QQ 邮箱里去了,我开始又陷入了深深的自责,吃一垫为什么不长智?
幸运的是,由于近期做一些项目,手机上有下载 QQ,经常要登陆 QQ,看到邮箱里的消息,才又回想起之前的种种。
如果不是两次偶然的机会,让我有机会在 QQ 邮箱里看到授权邮件,恐怕我积累多年的 200 百多个密码,就全部丢失了,要知道密码数据对我来说有多么的重要,因为不是所有的帐号都能使用手机重设密码的。
经历了两次生与死的挣扎,害怕这种事情再次发生在自己的身上,于是我开始寻找市面上其他的解决方案,准备迁移数据到其他更好用的工具上。
在开始之前,先梳理了下自己的需求:
- 跨平台:浏览器,手机(Android,iOS)、电脑(Windows、MacOS),而且还要不限制设备数
- 免费:能免费就尽量用免费的(前提是安全性满足),省点钱毕竟还要还房贷
安全:这点最重要了,自不必说
综合考量之下,选定了 Bitwarden 这款工具,相对于LastPass的优势,Bitwarden有如下几个优势:
- 开源:Bitwarden是一款开源软件,这意味着任何人都可以查看并审查其代码,确保无后门、安全可靠。而LastPass则是一个闭源商业软件。
- 更便宜:Bitwarden提供免费和付费的服务计划。对于个人用户来说,它的付费计划要比LastPass便宜,提供的功能也更丰富。
- 更好的隐私:与LastPass不同,Bitwarden不会跟踪或出售用户的数据。此外,Bitwarden使用加密技术存储您的数据,并且只有用户拥有解密的密钥。
- 跨平台支持:Bitwarden支持iOS、Android、Windows、macOS、Linux等多个平台。而LastPass则仅支持较少的平台。
- 无限密码共享:在Bitwarden中,用户可以创建任意数量的密码共享组,并分享其中的密码给其他人,这是LastPass不支持的一个功能
- 社区氛围:由于Bitwarden使用范围更广泛,因此它有一个更大的社区,这意味着更好的支持、反馈和开发。它还提供了各种各样的浏览器插件和应用程序,使得我的体验更加完美。:
说干就干,从晚上 11 点开始查看文档,开始部署 Bitwarden,遇到了一些小问题,整到了凌晨一点,终于自己部署了下,以下是自己的部署过程,给有需要的朋友们可以做个参考
1. 前置知识
Bitwarden是一个强大的密码管理工具,它有着丰富的功能和强大的加密保护机制,同时也有易于使用的界面和跨平台支持。
- 加密存储:Bitwarden将所有的密码和账户信息加密后存储在云端或本地设备,并使用256位AES加密和PBKDF2 SHA-256哈希算法保护数据安全。每个用户都有自己的主密码,这是唯一能够解锁其加密数据的密码。
- 跨平台支持:Bitwarden提供了多种客户端应用程序,包括Windows、macOS、Linux、iOS和Android,以及浏览器扩展程序和Web应用程序,用户可以在各种平台上使用Bitwarden。
- 密码生成器:Bitwarden内置了随机密码生成器,可以生成更加复杂和安全的密码,这些密码包括数字、字母、符号等。
- 自动填充:Bitwarden能够自动填充登录凭据,用户无需手动输入用户名和密码。
- 分享和协作:Bitwarden允许用户与家人、朋友和同事共享密码和敏感信息。同时也可以创建组织并邀请团队成员进行协作。
- 多语言支持:Bitwarden支持多种语言,包括英语、中文、法语、德语、日语、韩语、西班牙语等。用户可以选择自己习惯的语言来使用。
- 开源授权:Bitwarden是一个开源软件,采用AGPLv3授权协议,用户可以自由分发和修改其代码。同时,Bitwarden使用了透明的开发过程,定期发布安全审计报告以保证安全性。
在搜索 Bitwarden 的使用时,还会经常看到 Vaultwarden 和 bitwarden_rs ,它们与 Bitwarden 是什么关系呢?
Bitwarden
- 有专门开发团队运营的密码管理器,大部分功能是免费的,部分高级是收费的(如目录同步、SSO、群组、自定义角色以及基于企业组织层面的 Duo Security 两步登录)
- 可以私有部署,但对对服务器的要求高,使用 .net 开发,用的是mssql,内存必需大于2G,对于小内存机器来说是跑不起来的。
Vaultwarden
- Vaultwarden 是第三方开发的,并没有像Bitwarden那样的社区规模,但它也有自己的贡献者群体在维护和改进。
- 可以私有部署,但比官方更轻量,使用 Rust 编写,改用 SQLite 数据库(现在也支持 MySQL 和 PostgreSQL),运行时只需要 10M 内存,可以说对硬件基本没有要求。
- 以前的 bitwarden_rs,为了区分于官方的版本,特意改的名字
对比之下,Vaultwarden 优势非常的明显,建议大家和我一样,无脑使用 VaultWarden即可。
1. 私有部署
部署 Bitwarden 的方法有很多,使用 docker 是最方便的,一条命令即可
“`shell
docker run -d –name vaultwarden \
–restart=always \
-e WEBSOCKET_ENABLED=true \
-e SIGNUPS_ALLOWED=true \
-e DOMAIN=https://vault.youdomain.com \
-e ADMIN_TOKEN=<you_master_password> \
-v /data/bitwarden/:/data/ \
-p 8080:80 \
-p 3012:3012 \
vaultwarden/server:latest
<pre><code class=””>上面用到的参数有
“`shell
# 启用或禁用新用户注册:true启用,false禁用
SIGNUPS_ALLOWED=false
# 设置web访问域名,必须使用 https
DOMAIN=https://vault.yourdomain.com
# 是否启用WebSocket通知:true启用,false禁用
WEBSOCKET_ENABLED=true
# 启用管理后台并设置token,默认为空不启用,设置token后则启用
ADMIN_TOKEN=XXXXXXXXXXXX
还有更多的参数,可根据自己的需要进行设置
-
# 设置日志路径
-
LOG_FILE=data/access.log
-
-
# 日志级别选项:trace、debug、info、warn、error 以及 off
-
LOG_LEVEL=warn
-
EXTENDED_LOGGING=true
-
-
# 设置SQLites数据库存储路径及数据库名
-
DATABASE_URL=data/vaultwarden.db
-
-
# 是否启用web客户端:true启用,false禁用
-
WEB_VAULT_ENABLED=true
-
-
# 修改线程,默认为10,若用户多可修改为更大,一般默认不需要设置
-
ROCKET_WORKERS=20
-
-
# 显示密码提示:true启用,false禁用
-
SHOW_PASSWORD_HINT=false
-
-
# 设置SMTP
-
SMTP_HOST=smtp.test.com
-
SMTP_FROM=test@test.com
-
SMTP_PORT=465
-
SMTP_USERNAME=test@test.com
-
SMTP_PASSWORD=password
-
# 自v1.25.0起,不再设置SMTP_SSL和SMTP_EXPLICIT_TLS,使用SMTP_SECURITY替代,它有以下选项:starttls、force_tls和off。
-
# 465端口使用force_tls,587端口使用starttls,25端口使用off。
-
SMTP_SECURITY=force_tls
-
-
# 启用或禁用邀请:true启用,false禁用
-
INVITATIONS_ALLOWED=false
-
-
# 启用或禁用分享发送功能,默认开启,启用true,禁用false
-
SENDS_ALLOWED=false
2. 反向代理
2.1 域名解析
后端的 Bitwarden 服务已经成功运行,前端如何访问呢?
有两种方法:
- 直接使用
https://{ip}:{password}
访问 web - 申请个域名,使用
https://{domain}
访问 web
使用 ip 访问,记得去设置安全组,开放端口
使用域名访问,可以使用子域名,省得再申请域名,个人推荐使用域名,使用上更方便。
在云厂商上设置好 DNS 解析后,还需要设置下 nginx 的反向代理,才可以使用域名进行访问。
2.2 反向代理
找到你的 nginx 配置文件路径,假设是 /usr/local/nginx/conf/nginx.conf,添加如下配置,并重启 nginx 服务。
-
# ‘upstream’ 指令确保你有一个 http/1.1 连接
-
# 这里启用了 keepalive 选项并拥有更好的性能
-
#
-
# 此处定义服务器的 IP 和端口。
-
upstream vaultwarden-default {
-
zone vaultwarden-default 64k;
-
server 127.0.0.1:8080;
-
keepalive 2;
-
}
-
upstream vaultwarden-ws {
-
zone vaultwarden-ws 64k;
-
server 127.0.0.1:3012;
-
keepalive 2;
-
}
-
-
# 将 HTTP 重定向到 HTTPS
-
server {
-
listen 80;
-
listen [::]:80;
-
server_name pwd.iswbm.com;
-
return 301 https://hostrequest_uri;
-
}
-
-
server {
-
listen 443 ssl http2;
-
listen [::]:443 ssl http2;
-
server_name pwd.iswbm.com;
-
-
# 根据需要指定 SSL 配置
-
ssl_certificate /etc/letsencrypt/live/iswbm.com/cert.pem;
-
ssl_certificate_key /etc/letsencrypt/live/<you_domain>/privkey.pem;
-
ssl_trusted_certificate /etc/letsencrypt/live/<you_domain>/cert.pem;
-
-
client_max_body_size 128M;
-
-
location / {
-
proxy_http_version 1.1;
-
proxy_set_header “Connection” “”;
-
-
proxy_set_header Host host;
-
proxy_set_header X-Real-IPremote_addr;
-
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
-
proxy_set_header X-Forwarded-Protoscheme;
-
-
proxy_pass http://vaultwarden-default;
-
}
-
-
location /notifications/hub/negotiate {
-
proxy_http_version 1.1;
-
proxy_set_header “Connection” “”;
-
-
proxy_set_header Host host;
-
proxy_set_header X-Real-IPremote_addr;
-
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
-
proxy_set_header X-Forwarded-Protoscheme;
-
-
proxy_pass http://vaultwarden-default;
-
}
-
-
location /notifications/hub {
-
proxy_http_version 1.1;
-
proxy_set_header Upgrade http_upgrade;
-
proxy_set_header Connection “upgrade”;
-
-
proxy_set_header Hosthost;
-
proxy_set_header X-Real-IP remote_addr;
-
proxy_set_header Forwardedremote_addr;
-
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
-
proxy_set_header X-Forwarded-Protoscheme;
-
-
proxy_pass http://vaultwarden-ws;
-
}
-
-
# 除了 ADMIN_TOKEN 之外,还可以选择添加额外的身份验证
-
# 删除下面的 ‘#’ 注释并创建 htpasswd_file 以使其处于活动状态
-
#
-
#location /admin {
-
# # 参阅: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
-
# auth_basic “Private”;
-
# auth_basic_user_file /path/to/htpasswd_file;
-
#
-
# proxy_http_version 1.1;
-
# proxy_set_header “Connection” “”;
-
#
-
# proxy_set_header Host host;
-
# proxy_set_header X-Real-IPremote_addr;
-
# proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
-
# proxy_set_header X-Forwarded-Protoscheme;
-
#
-
# proxy_pass http://vaultwarden-default;
-
#}
-
}
3. 创建帐号
设置好反向代理后,就可以使用域名直接登陆 BitWarden,首次登陆,要先创建帐户
输入邮箱 等其他相关信息,密码千万记住,主密码提示最好写下,省得忘记主密码。
帐号创建完成后,跳转到登陆界面输入主密码进行登陆
登陆后的界面如下
4. 数据迁移
万事具备,只剩迁移,VaultWarden 对于市面上的几乎所有的密码管理器都提供数据导入功能,你听过的没听过的都支持,应该有几十种,包括:
- LastPass
- 1Password
- KeePass
- Chrome & Firefox & Safari
- 等等
我之前的主要平台是 LastPass ,在如下位置就可以将密码导出为 csv 格式
回到 https://vault.youdomain.com 选择工具 – 导入数据
5. 客户端
Bitwarden 提供了全平台的客户端软件,以下是常用的一些平台客户端,附上了链接,可以直接下载
- Chrome
- FireFox
- Safari
- Windows
- MacOS
- Linux
- iOS:App Store 搜索 BitWarden
- Android: Google Play 搜索 BitWarden
未在此列的平台,可前往官网进行下载:https://bitwarden.com/download
以 Chrome 插件和 iOS 为例,介绍下用法
Chrome 插件
安装完成后,先点击左上角的设置私人服务器(https://vault.youdomain.com)后
再使用邮箱登陆,就能连接到自己的密码库啦~
iOS 客户端
在 App Store 安装后,也是和上面一样,先设置私人服务器,也就是前面设置的域名。再输入主密码,就可以登陆上自己的密码管理器。
为了在手机上有更好的体验,需要设置一下,开启自动填充。
在 设置
-> 密码
-> 密码选项
,允许 BitWarden 做为密码的填充源
其他平台
若你手上有其他的设备,方法都是类似的,可自行设置。
6. 高级功能
安全报告
Bitwarden 还会生成一系列的安全报告,以保护用户密码的安全。
它会将密码以及邮箱地址与已经公开的,被泄露的数据库中的内容进行对比,并找出这些不安全的密码,另外也会与你自己的密码库中的密码进行对比,防止一个密码被重复使用多次。它能够找到那些非常容易被破解的密码,在自动填写的域名中未使用 https 的,以及网站有两步验证但并未被启用的,并进行提醒,增加密码的安全程度。
测试了下自己的密码,有很多都是有高危风险,这两天就要统一整改下。
账户保护
除了普通的账号密码,以及两步验证(必须通过网页端开启)外,Bitwarden 还通过 “指纹短语”(fingerprint phrase)来保护帐号安全。每个帐号都有一个固定的,由 5 个英语单词组成的指纹短语,且不会改变。可以通过验证指纹短语,来判断所连接到正确的的 Bitwarden 服务器。或用来验证添加到组织中的帐号是否为正确的帐号。
它还支持通过修改 KDF 迭代来防止主密码遭到暴力破解。
其他一些安全措施,别的密码管理软件也具有,像后台自动锁定,禁止截图等等,这里就不展开细说了。
总而言之,它所提供的功能非常丰富,在生成管理密码外,还有一系列保护账户安全的功能,
7. 说在最后
私有部署 BitWarden ,不仅自己可以用,也可以给家里人使用,但注册好后,请及时将关闭 web 功能,或者关闭注册功能。
虽然数据和隐私完全掌握在自己的手里,但这一切的前提是安全,服务器的安全需要自己维护,若有没有安全方面的经验,最好去学习一下,明哥这边给一些基本的建议:
- 服务器禁止密码登陆,只开启使用密钥登陆
- 及时升级软件,避免三方软件的安全漏洞
- 对数据进行定期的备份,防止数据误删除
- 限制不必要的端口,安全组别乱开
总之,便利与安全是两个是相互对抗,只能平衡,不能消除,使用 BitWarden 一定要注意做好安全措施。
8. 参考文档
- BitWarden 帮助中心 – 中文版:https://help.ppgg.in/
- BitWarden 客户端下载中心:https://bitwarden.com/download/