用密码管理器的最大顾虑是信任:所有账号都押在别人运营的服务上。Bitwarden 给出了一个开源的答案,客户端和服务端代码全部公开,还提供官方 docker 镜像,数据可以完全留在自己手里。这篇记录它的功能边界和一次自建 Vaultwarden 的完整过程。
Bitwarden 能做什么
它有完全免费的版本且限制不多:免费用户可存不限数量的密码,还能与另一个账户共享密码库。基础能力如下:
- Windows、Mac、Linux、Android、iOS 全平台覆盖
- 支持 Chrome、Edge、Safari、Firefox 等主流浏览器插件
- 支持
密码、文本、信息表甚至附件的加密保管 - 支持自动填写网页、app 账号密码
- 支持文件加密分享,通过 bitwarden send 分享隐私文件、照片
- 支持生成两步验证器,为每个密码设置 TOTP 动态口令
- 支持团队密码库,团队成员间共享密码
- 支持密码检测报告:重复、弱密码、已泄露密码
- 代码开源,支持自建
生成与管理密码
除了账号密码,网站支持的话还能把 TOTP 两步验证一起存进去,可以加笔记和自定义字段做站点备注,分类靠文件夹但只支持一级。
![图片[1]-记一次我用Bitwarden自建密码管理器的经验和方法-本站](https://i1.img.azhai.de/upload/a99ada36b83767ab-23-05-29-1.png?)
创建密码的选项比较丰富:支持最长 128 位,可指定最少的数字或特殊字符个数,生成结果里数字、字母、符号用不同色彩显示,不容易看混。也能生成最多 20 个单词的密码短语,分隔符、大小写、数字都可选,还有历史记录能回看之前生成过的密码。
![图片[2]-记一次我用Bitwarden自建密码管理器的经验和方法-本站](https://i1.img.azhai.de/upload/52a2e70f26504622-23-05-29-1.png?)
数据导出与导入
迁移和备份靠这个:支持从 Chrome、Firefox、1Password、LastPass 等主流工具导入,导出有 json 与 csv 两种格式。
![图片[3]-记一次我用Bitwarden自建密码管理器的经验和方法-本站](https://i1.img.azhai.de/upload/17205c1ac3bb9e6c-23-05-29-1.png?)
![图片[4]-记一次我用Bitwarden自建密码管理器的经验和方法-本站](https://i1.img.azhai.de/upload/ae2d7014210b8183-23-05-29-1.png?)
安全报告
它会把密码和邮箱与已公开的泄露库对比,也会和库内其他条目查重,找出易被破解的密码、自动填写域名没走 https 的、开了两步验证却没启用的站点并提醒。
![图片[5]-记一次我用Bitwarden自建密码管理器的经验和方法-本站](https://i1.img.azhai.de/upload/7c2a3c1dc3bb03e7-23-05-29-1.png?)
账户保护
每个账号有一个固定的指纹短语(fingerprint phrase),由 5 个英语单词组成且不会变,用来确认客户端连到了正确的服务器,或验证加入组织的账号是否正确。两步验证必须在网页端开启。
![图片[6]-记一次我用Bitwarden自建密码管理器的经验和方法-本站](https://i1.img.azhai.de/upload/bda8ebd0cbe09c3f-23-05-29-1.png?)
另外支持调高 KDF 迭代次数,增大主密码被暴力破解的成本。
![图片[7]-记一次我用Bitwarden自建密码管理器的经验和方法-本站](https://i1.img.azhai.de/upload/408c8a1086d65e60-23-05-29-1.png?)
后台自动锁定、禁止截图这类常规措施它也有。官网:https://bitwarden.com/
为什么自建要用 Vaultwarden
官方推荐 Docker 部署,但 Bitwarden 服务器用 .Net 开发,镜像体积大;数据库是 MSSQL,对服务器配置要求高。第三方的 bitwarden_rs 是轻量替代镜像,2021 年 8 月更名为 Vaultwarden(说明见 https://github.com/dani-garcia/vaultwarden/discussions/1642 ),下面的安装方法都按 Vaultwarden 来。
准备材料:一个域名;一台装了宝塔面板并配好 Docker 服务的服务器;一双手和脑子。
部署与配置命令
最简启动:
docker run -d --name vaultwarden -v /bw-data/:/data/ -p 8880:80 vaultwarden/server:latest
需要控制注册、日志和通知就用带环境变量的版本,两者选一个执行:
#配置是否允许注册,是否记录日志,是否开启通知
docker run -d --name vaultwarden
-e SIGNUPS_ALLOWED=true
-e WEBSOCKET_ENABLED=true
-e LOG_FILE=/data/vaultwarden.log
-p 8880:80
-p 3012:3012
-v /bw-data/:/data/
vaultwarden/server:latest
常用参数:
SIGNUP_ALLOWED:是否允许注册
INVITATIONS_ALLOWED:是否允许组织邀请注册
ADMIN_TOKEN:用户管理界面 (/admin),可用于删除用户及邀请用户注册
ROCKET_TLS:ssl 证书信息,同时需要配置 -v /path/to/host/ssl/:/path/to/docker/ssl/ 卷,前者为宿主机 ssl 证书的位置,后者为容器证书位置
DOMAIN:域名
LOG_FILE、LOG_LEVEL、EXTENDED_LOGGING:日志保存文件路径以及日志等级定义
DATA_FOLDER:docker 容器数据保存文件夹(默认为 /data),除了定义这个文件夹之外,还可以定义附件、图标缓存、数据库等参数
DATABASE_URL:数据库路径
ATTACHMENT_FOLDER:附件路径
ICON_CACHE_FOLDER:图标缓存路径
想禁止新用户注册(服务器稳定运行的前提):
docker run -d --name vaultwarden
-e SIGNUPS_ALLOWED=false
-e WEBSOCKET_ENABLED=true
-e LOG_FILE=/data/vaultwarden.log
-p 8880:80
-p 3012:3012
-v /bw-data/:/data/
vaultwarden/server:latest
多用户共用时配上 SMTP 发邀请邮件:
docker run -d --name vaultwarden
-e SMTP_HOST=<smtp.domain.tld>
-e SMTP_FROM=<vaultwarden@domain.tld>
-e SMTP_PORT=587
-e SMTP_SSL=true
-e SMTP_USERNAME=<username>
-e SMTP_PASSWORD=<password>
-v /bw-data/:/data/
-p 80:80
vaultwarden/server:latest
升级流程是拉新镜像、停删旧容器、按原参数重跑,最后清理旧镜像:
# 重新拉取镜像
docker pull vaultwarden/server:latest
# 停止原容器
docker stop vaultwarden
#删除原容器
docker rm vaultwarden
# 重新运行 docker run 命令
docker run -d --name vaultwarden
-e SIGNUPS_ALLOWED=false
-e WEBSOCKET_ENABLED=true
-e LOG_FILE=/data/vaultwarden.log
-p 8880:80
-p 3012:3012
-v /bw-data/:/data/
vaultwarden/server:latest
# 查看镜像文件
docker image ls
# 删除原镜像文件,
docker image rm $ID
日常启停和删除:
docker stop vaultwarden #停止运行
docker start vaultwarden #启动
docker rm vaultwarden #删除
使用界面
部署成功后访问域名就是登录页:
![图片[8]-记一次我用Bitwarden自建密码管理器的经验和方法-本站](https://i1.img.azhai.de/upload/4f31976f900ec43b-23-05-29-1.png?)
注意最开始运行时不要关闭注册,管理员自己要在第一次启动时把账号注册了。之后就是常规的密码库界面,很简洁。
![图片[9]-记一次我用Bitwarden自建密码管理器的经验和方法-本站](https://i1.img.azhai.de/upload/5fdc9d4c5b2f7138-23-05-29-1.png?)
踩坑提醒
数据全在 /bw-data/ 挂载目录里,服务器坏了密码库就没了,这个目录要定期备份,导出一份 json 做迁移底稿也是必要的。ROCKET_TLS 配 https 时要同时挂证书卷(宿主机路径映射到容器内路径),DOMAIN 也要填对,否则客户端指纹短语对不上。8880 和 3012 端口不建议直接裸奔公网,前面套一层 nginx 反代并强制 https 再用。开源项目地址:https://github.com/dani-garcia/vaultwarden
















暂无评论内容