几个月前听说 Chrome 在 Windows 上记录的密码可以被随意读取,Windows 下, Chrome 把密码加密后存入 sqlite 中,但是把加密密钥明文存入本地,这样任何一个在你账户下执行的软件,都有权限获得解密密钥,从而解密,获得明文密码。https://ohyicong.medium.com/how-to-hack-chrome-password-with-python-1bedc167be3d
这并不是说 Chrome 保存密码不安全,因为正常软件都不会这样做(正常软件,但是某些软件在后台偷偷查看用户隐私的事情常有发生),恶意软件想查看你保存的明文密码,首先要攻破 Windows,而一旦你的 Windows 被黑,就不仅仅是泄露密码那么简单了。
用密码管理器也不安全,前几天有个叫 LastPass 的上了新闻,有些人说因为密码器泄露导致比特币被盗。
这几天元旦事情不多,打算搭建一个 bitwarden,体验一下,记录一下过程
#vaultwarden
Bitwarden 有免费,付费服务,同时可以自行搭建。看了一下,我选择了据说轻量的 Rust 版本,曾用名 bitwarden_rs
,后来改名为 vaultwarden
。
不幸的是,vaultwarden 的 github 只有 docker 版……但是有一些第三方编译的版本,比如 Arch 就有 comminity 的预编译版,直接 pacman 就可以安装。另外,可以从 docker 中提取出 vaultwarden 二进制文件:https://github.com/dani-garcia/vaultwarden/wiki/Pre-built-binaries
按照上面的方法提取出 vaulewarden 和 web-vault, 放到一个新建的文件夹了,然后把 Docker 的遗迹清除干净。
先设置好数据库,Vaultwarden 支持多种数据库,包括SQLite, MySQL,PostgreSQL。因为熟悉我继续选择 Postgresql,关于 Postgresql 的基础操作见这篇博客,虽然我没试验过,但是理论上 MySQL 都可以被 MariaDB 直接替换,所以想用 MariaDB(MySQL) 的同学请参考这篇博客
Vaultwarden 可以用 json 文件配置,但是官方建议使用 .env 来配置,我不理解都是文件,为什么有先后顺序。 https://github.com/dani-garcia/vaultwarden/blob/main/.env.template
在保存 vaultwarden
的文件夹下,新建一个叫 .env
的文本文件,贴上上面的配置,修改成自己想要的。
通常情况下,需要修改的有
DATABASE_URL
: 数据库连接 URL,如果密码中有特殊符号可能影响连接,要手动编码,例如如果密码中有@
,替换成%40
WEBSOCKET_ENABLED
: 是否开启 WebSocket 通知
DOMAIN
: 你的域名,一些功能依赖域名
以及所有的端口号,尽力避免被攻击。
如果想用邮件服务,还要修改 SMTP
信息。
所有被注释的项都是默认值,无需修改,因此这个配置模板看起来长,其实 10 行以内。
因为下一步我用 Caddy 反代,因此没有在 vaultwarden 中配置 Rocket tls, Rocket 是用 Rust 写的一个网站服务,类似 Caddy。
#Caddy
用 Caddy 反代的原因有 2 个,一是我对 Caddy 的配置很熟悉了,写起来很快,二是 Caddy 自动申请并更新 tls 证书,很方便。关乎 Caddy,见这篇博客
直接上配置文件,Caddy 的配置简单易懂:Caddy 处理所有入站流量,验证 tls,然后转发到相应的端口。
Caddy 配置文件保存: /etc/caddy/Caddyfile
vault.acytoo.com {
log {
level INFO
output file /var/log/caddy/vault.log {
roll_size 10MB
roll_keep 10
}
}
tls {
dns cloudflare <cloudflare_api> # delete this tls part if you don't use cloudflare's CDN
}
# This setting may have compatibility issues with some browsers
encode gzip
# Notifications redirected to the websockets server
reverse_proxy /notifications/hub localhost:3012
# Proxy everything else to Rocket
reverse_proxy localhost:8000 {
header_up X-Real-IP {remote_host}
}
}
因为我们使用 Caddy 反代,不需要手动申请 tls 证书,同时防火墙只需要开启 80 和 443 端口,其他端口通过 Caddy 转发,因此不需要对外开放,很安全。
#启动
上面介绍了配置文件,在启动前,还需要在执行 vaultwarden 的文件目录下新建一个叫 data
的文件夹,最终的文件目录结构如下
如果开启了防火墙,可以使用 ufw 管理防火墙
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTPPS
启动 Caddy
sudo systemctl restart caddy
启动 vaultwarden 直接套在 screen 里执行
screen -S vault -dm ./vaultwarden
然后浏览器打开网页,注册使用吧。