用Bitwarden自建密码管理系统

什么是Bitwarden?

Bitwarden 是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。Bitwarden 提供云托管服务,并支持自行部署解决方案。【维基百科】

前言

用户信息泄露事件时有发生,连 facebook 这样的大网站也不可避免,当你多个网站使用了同一个密码,假如你使用了 chrome 浏览器自动保存填充密码时,在密码被泄露后它会给出提醒。

title

title

所以每个网站、每个应用使用独立的密码是非常必要的。那为什么不用 chrome 自带的密码管理器呢?因为它无法自主添加网站,所以还需要配合其他记录工具使用。

在上一篇中我们介绍了《免费跨平台密码管理器KeePass》,其使用本地密码数据库保存,通过云盘同步的方式。属于一个去中心化的方案,也可以说是个离线版的方案。而今天要介绍的 bitwarden 正好相反,是基于服务器的一个方案,今天我们就来介绍如何在群晖上,用 bitwarden 自建密码管理服务器,来保障自己的数据安全。

为什么要自建服务器

Bitwarden自己的服务器安全性肯定是没问题的,但是放在别人服务器上总是有点担忧,万一服务器挂了呢?(最近onedrive for business就一直用不了),另一方面国内访问国外网站,总是不太友好,所以干脆自建。

准备工作

  1. 一个公网IP;
  2. 一个域名和SSL证书;
  3. 支持Docker的群晖主机(黑白无所谓);

服务端安装

bitwarden/setup 是官方镜像,因 Bitwarden 服务器使用 .Net 开发,Docker 镜像体积过大,此外它使用 Microsoft SQL Server 数据库,这个数据库对服务器性能要求比较高。

有人利用 Rust 重写了一遍,这个项目的 Docker 镜像叫做
bitwardenrs/server,这个镜像体积比较小,对服务器性能要求比较低,还可以使用 SQLite 或 MariaDB/MySQL 数据库,而无需像官方服务器那样使用专有的 Microsoft SQL Server。

所以本次部署采用该镜像。代码地址:https://github.com/dani-garcia/bitwarden_rs

打开群晖Docker — 注册表 — 搜 bitwarden ,第一个 bitwardenrs/server 就是,双击下载,tag选择 latest

title

title

端口

因为 80 端口被占用了,所以需要另外指定。

title

环境变量

新增四个变量

1
2
3
4
5
6
7
8
9
10
11
# 设置是否开启 Web 客户端。如果开启,可以通过访问你的域名来打开 Web 客户端,用户登录后即可通过网页管理密码。因为注册用户需要,所以也暂且先打开;
WEB_VAULT_ENABLED = true

# 控制是否开放用户注册,因为你必须先注册才能存储数据,所以暂且先打开;搭建好注册后改成false
SIGNUPS_ALLOWED = true

# 是否开启WebSocket
WEBSOCKET_ENABLED = true

# 日志保存文件路径
LOG_FILE = /data/bitwarden.log

title

服务端设置

虽然 bitwardenrs 已经可以运行起来,但是 bitwardenrs 必须要通过https 访问,否则无法进行注册、登陆等一系列的操作。

反向代理设置

进入群晖的 “控制面板” - “Synology 应用程序门户” - “反向代理服务器” 页面 (找不到的话请点击高级模式) ,如图添加一条 “反向代理服务器规则”。(“来源端口” 你自己定义,“目的地端口” )

title

  • 来源处协议必须选择 https,主机名为你在外网访问群晖的域名,端口填写你想要外网访问的端口,这里假如为 9443;
  • 目的地处协议选择 http,主机名填写 localhost,对应上面配置容器参数步骤中设置的本地端口 8880;
  • 完成后点击确定。

上传证书

进入群晖的 “控制面板” - “安全性” - “证书” 页面,将你的域名证书文件和私钥文件导入群晖中。

title

以 dnspod 申请的证书为例。将下载下来的证书文件压缩包解压。如图导入群晖中:

  • Nginx 文件夹里的 2_域名.key 文件放入 “私钥” 中
  • Nginx 文件夹里的 1_域名_bundle.crt 文件放入 “证书” 中
  • “中间证书” 留空

或者

  • Apache 文件夹里的 3_域名.key 文件放入 “私钥” 中
  • Apache 文件夹里的 2_域名.crt 文件放入 “证书” 中
  • Apache 文件夹里的 1_域名.crt 放入 “中间证书” 中

在” 证书 “页面设置刚才添加的反向代理服务器规则使用此证书。

title

使用

Web端

至此,Bitwarden 服务端基本就搭建好了。启动 Bitwarden 容器后,浏览器输入 https://群晖的 ip:9443,应该就可以进入登录页面了。

title

然后点击注册按钮填写我们的邮箱和主密码,请务必牢记你的主密码,因为一旦遗失,你保存的密码就再也找不回来了。

title

主界面

title

注册完成后如果不想其他用户进行注册的需要关闭注册及邀请功能。在群晖中停止一下容器,选择编辑容器

添加环境变量

1
2
3
4
5
#关闭注册
SIGNUPS_ALLOWED = false

#关闭邀请
INVITATIONS_ALLOWED = false

应用后重启容器。

chrome插件

title

点击左上角的齿轮图标进入服务器设置界面。

title

在服务器URL中填入服务器地址(如:https://群晖的 ip:9443)后保存。

title

返回主界面后点击登录按钮,用自己注册的账号进行登录。

安装完插件后,在浏览器中鼠标右键会增加 Bitwarden 。

title

android app

“设置” - “自动填写” - “自动填充服务” - “启用”

title

其他用法和设置可以自行探索。

总结

  • 这个docker镜像对于服务器的要求不高;
  • 除了最基本的密码保存、上传附件等,官方需要付费使用的 TOTP 、密码检测等功能也都是可以直接使用的;
  • 如果之前用过其他的密码管理器,可以导入到 Bitwarden;
  • 最好启用两步登录,安全性更高一点;
  • 数据在自己手里,可能会感觉会更安全点吧。

参考文档

官网主页
地址:https://bitwarden.com/

放弃付费1Password改用免费开源的bitwarden_rs自建密码管理系统-安装,使用和备份
地址:https://wzfou.com/bitwarden-rs/

使用群晖搭建第三方 Bitwarden 密码服务器
地址:https://penpenguanguan.com/10271.html

使用群晖 Docker 搭建 bitwarden_rs 密码服务器
地址:https://blog.wxlost.com/docker_bitwarden_rs.html

群晖可以这么玩 - 自建Bitwarden服务从此告别忘记密码
地址:https://post.smzdm.com/p/a4wkww3l/

Installing bitwarden on Synology Diskstation
地址:https://www.kartolo.de/2020/02/03/installing-bitwarden-on-synology-diskstation/