OttoLi 的胡言乱语

  • 账户
    • 登录
    • 注册
    • 个人中心
head

自搭建全平台私有密码库 bitwarden & Vaultwarden

2022年10月3日 13336点热度 5人点赞 0条评论

密码管理之痛

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

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

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

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

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

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

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

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

bitwarden/Vaultwarden 项目介绍

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 等认证。

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

bit­war­den 官方也提供了云服务,定价如图

不过 bit­war­den 最为吸引人的当然还是它的开源属性。一方面,开源 + 庞大的用户量保证了开源社区能够不断维护 bit­war­den 的算法,保证其安全性。另一方面,开源使得用户可以方便地自行搭建 bit­war­den 服务。自搭建 bit­war­den 的优势在于:

  • 和官方服务拥有相同的安全性
  • 数据完全掌握在自己手中,不用担心官方服务故障或跑路
  • 完全免费,免费使用官方付费版的全部功能

bit­war­den 官方提供了 GitHub、DockerHub 开源仓库,不过 bit­war­den 官方服务对服务器系统占用较高,一般建议使用同源项目 Vaultwarden 进行自搭建。Vault­war­den 原名 Bit­war­den_RS,是用 Rust 语言实现的 bit­war­den api,实现了 bit­war­den api 的完整功能,同时支持使用 Docker 方便地进行部署。

  • Vaultwarden GitHub 仓库
  • Vaultwarden DockerHub 仓库

安装部署

Docker 镜像部署

我们使用 Docker,仅需一个命令便可以方便地部署 Vault­war­den

docker run -d \
--name=vaultwarden \
-e WEBSOCKET_ENABLED=true \
-e LOG_FILE=/log/bitwarden.log \
-e ADMIN_TOKEN='主管理密码' \
-p 'docker映射本机端口':80 -p 'docker映射本机端口':3012 \
-v 'docker映射本机目录地址':/data/ \
--restart=always  \
vaultwarden/server:latest

需要注意的是:

  • --name 设置 docker 中显示的名字,docker 项目多时方便管理
  • ADMIN_TOKEN 设置 Vaultwarden 管理后台密码(这个不是主密码,待会可以改)
  • -p 映射端口,如果服务器上有其他网页服务,建议映射到其他端口反代,不要直接使用 80 端口
  • -v 目录映射非常重要,映射到本机的目录即为后面需要备份的目录,是重要安全保障
  • --restart 使 Vaultwarden 可以自动重启

域名 dns 解析 / HTTPS / 服务器反代

将域名解析到服务器地址,开启 https,然后把刚刚设置的 'docker映射本机端口':80 反代

以宝塔面板为例,这里我的 docker映射本机端口 为 1234

Vaultwarden 管理后台

访问 your.domain/admin,登录 Vault­war­den 管理后台,登陆密码为刚刚设置的 ADMIN_TOKEN

在这里可以根据情况对 Vault­war­den 进行一些可选设置,所有的设置项都可以通过鼠标悬停查看相应的说明,不了解的项目建议保持默认

这里介绍几个我认为值得关注的设置项:

  • Gen­eral Set­tings
    • Domain URL:设置你的网站域名,记得带上 https,如 https://your.domain
    • Allow new signups:是否允许用户注册,如果密码库仅仅用于自用,建议在自己注册后关闭此选项
    • Admin page token:在这里更改 Vaultwarden 管理后台的密码
    • Invitation organization name:设置你的网站名字,将出现在自动发送的电子邮件中
  • SMTP Email Set­tings
    • 设置 SMTP 服务,用来发送系统邮件(建议开启)
    • 根据你的 SMTP 服务提供方填写相关信息即可
      • 设置保存后,运行一次 Test SMTP 确保邮件可以正常发送
  • Read-Only Con­fig
    • 这里可以查看所有只读选项,可以停止 docker 容器后通过编辑 'docker映射本机目录地址':/data/ 目录中的 config.json 修改
  • Backup Data­base
    • 这里提供了一个简易的数据库备份功能,不过我们稍后会介绍全面的备份流程

开始使用

必要的设置完成后,访问 your.domain 创建你的密码管理账户

在这里设置 主密码,同时可以选择设置一条主密码提示,当你忘记主密码时,可通过邮件获取主密码提示

注意:千万不要设置与主密码关联性太强的主密码提示,因为当你的邮箱账户被盗用时,所有人都可以获得你的主密码提示!

备份/恢复/升级

Vault­war­den 官方文档:https://github.com/dani-garcia/vaultwarden/wiki/Backing-up-your-vault

使用 docker-ault­war­den 部署的 bit­war­den 备份非常简单,只需要备份映射的 'docker映射本机目录地址':/data/ 目录中的全部文件即可

详细来说,它的目录结构是这样的

data
├── attachments          # 用户上传的每个附件都存储为此目录下的单独文件.
│   └── <uuid>           # (如果没有创建附件,附件目录将不存在.)
│       └── <random_id>
├── config.json          # 存储 Vaultwarden 管理后台配置.
├── db.sqlite3           # 主 SQLite 数据库文件.
├── db.sqlite3-shm       # SQLite 共享内存文件(可能存在).
├── db.sqlite3-wal       # SQLite 预写日志文件(可能存在).
├── icon_cache           # 站点图标(favicons)缓存在此目录下.
│   ├── <domain>.png
│   ├── example.com.png
│   ├── example.net.png
│   └── example.org.png
├── rsa_key.der          # `rsa_key.*` 文件用于签署认证令牌.
├── rsa_key.pem
├── rsa_key.pub.der
└── sends                # 用户上传的每个 Send 附件都存储为此目录下的单独文件.
    └── <uuid>           # (如果未创建 Send 附件,则发送目录将不存在.)
        └── <random_id>

其中

SQLite 数据库文件

非常重要,需要备份

除了上传的附件单独存储在 at­tach­ments 目录下外,SQLite 数据库文件存储了几乎所有重要的用户密码信息,是最重要的数据文件。

attachments 目录

重要,需要备份

attachments 目录存放密码条目中上传的附件文件

sends 目录

可选备份

sends 目录存放 Send 附件,考虑到 Send 附件往往只用作暂时分享,如果你没有长期存储的 Send 文件,可排除备份此文件夹以减小备份体积

config.json 文件

建议备份

config.json 文件明文存储 Vault­war­den 管理后台配置,如果没有备份此文件,恢复备份后可能需要重新设置相关配置

需要注意的是,config.json 文件明文存储信息,这意味着将包括你的 Vaultwarden 管理后台密码和邮箱 SMTP 设置,虽然说这并不会对你的主密码和密码库安全有任何影响,但如果你担心会泄露这两者,可在备份此文件时采用一定的加密措施

我的建议是,保证 Vault­war­den 管理后台密码不和主密码以及任何常用密码相同,然后采用专用的业务邮箱来配置 SMTP 信息,这样即使发生泄露,一般也不会产生实质的危害

rsa_key* 文件

建议备份

该文件存储当前登录用户的身份令牌,删除此文件后,所有登陆的用户将被注销,迫使他们重新登录

icon_cache 目录

可选备份

存放密码网站图标,这些图标会在缺少是自动生成,如非必要可以不备份


备份操作

实际备份操作可根据以上说明进行

对我而言,我的网站只供我和朋友使用,平时也不常用附件和 Send 功能,数据量很小,所以直接对整个目录进行备份

我的备份策略是每天凌晨 1:30 将目录打包备份至服务器,并上传一份到 OneDrive,始终保存最新的 10 个版本(基于宝塔


恢复操作

  1. 回滚恢复

先暂停 docker 容器

docker stop <name>

将备份的文件替换当前 data 目录,然后重新启动 docker 容器

docker start <name>

如果发生错误,可尝试删除容器重新部署 docker(参考 2. 全新回复

  1. 全新恢复

删除现有 docker 容器(如有)

docker stop <name>
docker rm <name>

将备份的文件替换当前 data 目录,然后重新部署 docker 容器

docker run -d \
--name=vaultwarden \
-e WEBSOCKET_ENABLED=true \
-e LOG_FILE=/log/bitwarden.log \
-e ADMIN_TOKEN='主管理密码' \
-p 'docker映射本机端口':80 -p 'docker映射本机端口':3012 \
-v 'docker映射本机目录地址':/data/ \
--restart=always  \
vaultwarden/server:latest

升级操作

当 im­age 镜像更新,可根据需要对镜像进行升级

在升级前务必阅读官方更新日志,关注升级过程中有没有兼容性问题,以及如何迁移数据(如果需要

正常的版本更新,可通过以下步骤进行

在更新开始前,建议先备份一下

首先暂停并删除当前容器

docker stop <name>
docker rm <name>

然后拉取最新镜像

docker pull vaultwarden/server:latest

从新镜像部署容器(注意映射关系要保持一致

docker run -d \
--name=vaultwarden \
-e WEBSOCKET_ENABLED=true \
-e LOG_FILE=/log/bitwarden.log \
-e ADMIN_TOKEN='主管理密码' \
-p 'docker映射本机端口':80 -p 'docker映射本机端口':3012 \
-v 'docker映射本机目录地址':/data/ \
--restart=always  \
vaultwarden/server:latest

建议部署容器成功后,进行测试,确定没有问题后再删除镜像

如果发生了错误,可用未删除的老版本镜像重新部署,然后等待社区更新

确认无误后,删除原镜像,先查看镜像列表

docker images
# REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
# vaultwarden/server   latest    28e916391e7a   2 months ago   193MB
# vaultwarden/server   <none>    8af25c1e7832   2 months ago   193MB

比如上面例子中,TAG 为 <none> 的便是老版本镜像,删除它

docker rmi 8af25c1e7832
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可
标签: 教程
最后更新:2022年10月3日

OttoLi

涧户寂无人,纷纷开且落
——辛夷坞

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

OttoLi

涧户寂无人,纷纷开且落
——辛夷坞

最新 热点 随机
最新 热点 随机
精粤 h610i 主板 BIOS 启动画面 logo 修改自定义 Office/Visio/Project 安装与激活教程 - 适用于各种版本/正版/非正版 CentOS 安装运行 Hentai@Home 教程 自搭建全平台私有密码库 bitwarden & Vaultwarden 如何在不移动本地文件的情况下用 OneDrive 客户端将文件上传至 OneDrive —— 利用 mklink 软链接上传文件 Linux 如何使用密钥对连接 SSH 并关闭密码连接
[下载]那些超级有用的美术技法教程书[资源]攻壳机动队系列蓝光收藏指南Netch-可替代 SSTap 的开源游戏加速器2021 甲骨文云 Oracle Always Free 永久免费 VPS 服务器 | 介绍/注册/申请/部署/连接/注意事项APlayer & MetingJS 音乐播放器使用指南WordPress 建站日志
为 WordPress 添加 reCAPTCHA 人机验证 索尼a6300说明书帮助指南PDF版下载 ass字幕加载字体的那些事 精粤 h610i 主板 BIOS 启动画面 logo 修改自定义 [资源]紫罗兰永恒花园:外传 APlayer & MetingJS 音乐播放器使用指南
标签聚合
绘画 教程 Ubuntu ssr 甲骨文 Office 游戏 ssh Windows 建站 动漫 免费 CentOS 资源 oracle Linux Wordpress 白嫖 日期与时间 VPS
关于本站

Otto 不知道该说些什么,于是写了这么一行字……

目录 隐藏
1. 密码管理之痛
2. bitwarden/Vaultwarden 项目介绍
3. 安装部署
3.1. Docker 镜像部署
3.2. 域名 dns 解析 / HTTPS / 服务器反代
3.3. Vaultwarden 管理后台
3.4. 开始使用
4. 备份/恢复/升级
4.1. SQLite 数据库文件
4.2. attachments 目录
4.3. sends 目录
4.4. config.json 文件
4.5. rsa_key* 文件
4.6. icon_cache 目录
4.7. 备份操作
4.8. 恢复操作
4.9. 升级操作

COPYRIGHT © 2022 OttoLi. ALL RIGHTS RESERVED.SITEMAP

THEME KRATOS 豫ICP备20004659号 萌ICP备20210150号

腾讯云  LiteServer  Google Analytics  CloudFlare