用 Vaultwarden 自建 Bitwarden 密码管理器:功能梳理与部署记录

用密码管理器的最大顾虑是信任:所有账号都押在别人运营的服务上。Bitwarden 给出了一个开源的答案,客户端和服务端代码全部公开,还提供官方 docker 镜像,数据可以完全留在自己手里。这篇记录它的功能边界和一次自建 Vaultwarden 的完整过程。

Bitwarden 能做什么

它有完全免费的版本且限制不多:免费用户可存不限数量的密码,还能与另一个账户共享密码库。基础能力如下:

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

生成与管理密码

除了账号密码,网站支持的话还能把 TOTP 两步验证一起存进去,可以加笔记和自定义字段做站点备注,分类靠文件夹但只支持一级。

图片[1]-记一次我用Bitwarden自建密码管理器的经验和方法-本站

创建密码的选项比较丰富:支持最长 128 位,可指定最少的数字或特殊字符个数,生成结果里数字、字母、符号用不同色彩显示,不容易看混。也能生成最多 20 个单词的密码短语,分隔符、大小写、数字都可选,还有历史记录能回看之前生成过的密码。

图片[2]-记一次我用Bitwarden自建密码管理器的经验和方法-本站

数据导出与导入

迁移和备份靠这个:支持从 Chrome、Firefox、1Password、LastPass 等主流工具导入,导出有 json 与 csv 两种格式。

图片[3]-记一次我用Bitwarden自建密码管理器的经验和方法-本站
图片[4]-记一次我用Bitwarden自建密码管理器的经验和方法-本站

安全报告

它会把密码和邮箱与已公开的泄露库对比,也会和库内其他条目查重,找出易被破解的密码、自动填写域名没走 https 的、开了两步验证却没启用的站点并提醒。

图片[5]-记一次我用Bitwarden自建密码管理器的经验和方法-本站

账户保护

每个账号有一个固定的指纹短语(fingerprint phrase),由 5 个英语单词组成且不会变,用来确认客户端连到了正确的服务器,或验证加入组织的账号是否正确。两步验证必须在网页端开启。

图片[6]-记一次我用Bitwarden自建密码管理器的经验和方法-本站

另外支持调高 KDF 迭代次数,增大主密码被暴力破解的成本。

图片[7]-记一次我用Bitwarden自建密码管理器的经验和方法-本站

后台自动锁定、禁止截图这类常规措施它也有。官网: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自建密码管理器的经验和方法-本站

注意最开始运行时不要关闭注册,管理员自己要在第一次启动时把账号注册了。之后就是常规的密码库界面,很简洁。

图片[9]-记一次我用Bitwarden自建密码管理器的经验和方法-本站

踩坑提醒

数据全在 /bw-data/ 挂载目录里,服务器坏了密码库就没了,这个目录要定期备份,导出一份 json 做迁移底稿也是必要的。ROCKET_TLS 配 https 时要同时挂证书卷(宿主机路径映射到容器内路径),DOMAIN 也要填对,否则客户端指纹短语对不上。8880 和 3012 端口不建议直接裸奔公网,前面套一层 nginx 反代并强制 https 再用。开源项目地址:https://github.com/dani-garcia/vaultwarden

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容