1 前言
作为一个计算机爱好者,选择统一的密码还是每个软件一个单独的密码,永远是个困境;
一个人要记住太多的密码是不太现实的,保持密码以书面形式又是非常不安全的;
对于数量越来越多的账号密码,一直以来,我都在寻找一个安全、快速、方便的密码长期保存方式;
从手写笔记到手机备忘录,
从txt文档到word文档,
从自己手动备份到onedrive自动同步...
现如今比较流行的方式是使用密码管理工具进行密码的统一管理,这类软件一般拥有多平台客户端、浏览器插件等,密码一般加密保存到本地或者云端;
密码管理工具很多,有人说最好的密码管理工具是 1Password,但是他实在是卖的太贵了,暂时不考虑;
再对比各大软件,其实各有特色。有的倾向于将密码库储存到云端,有的可将密码库储存到本地进行自己保存,有的开源,有的是私有化,有的还提供私有化部署
最终我选择使用Bitwarden来搭建私人密码库,比较全的客户端覆盖,提供开源免费版,还提供私有化部署,满足了我对密码库的所有要求;
2 Bitwarden Server
Bitwarden 官方提供私有化部署,有一键部署脚本和手动部署两种方式,不过官方由于使用的是 MSSQL 数据库,整体部署下来对机器配置要求较高
官方推荐服务器配置
只部署一个私人密码库,使用这么重量级的应用是不符合我的习惯的(钱包顶不住)
经过我的一番查找,终于在Github发现了有dalao使用 Ruby 开发了一个兼容的 Bitwarden 服务器:bitwarden_rs,并且提供了 Docker 镜像部署;
Github传送门:https://github.com/dani-garcia/bitwarden_rs
该服务器端系统配置要求很低,Docker镜像体积也很小,部署非常方便,使用 SQLite 服务器来存储数据,对于个人来说已经足够;
最终就选择使用它来作为我的密码库的服务器端。
3 准备
首先需要你有一个域名,一台安装了Docker环境的服务器;
可参考Docker官方文档:https://docs.docker.com/get-docker/ 来进行Docker的安装
为方便部署和更新,本文使用 docker-compose 来管理服务
在linux下可使用如下命令进行 docker-compose 的安装和更新
sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
如果要进行更新,替换1.27.4为最新的版本号即可。
查看最新版本:https://github.com/docker/compose/releases
4 安装Bitwarden
4.1 创建Bitwarden数据存放目录
mkdir -p /data/bitwarden && cd /data/bitwarden
4.2 创建docker-compose配置文件
cat >> docker-compose.yml <<EOF
version: '3'
services:
# 服务名称
bitwarden:
# 指定使用 Docker Hub 中的最新镜像
image: bitwardenrs/server:latest
# 容器名称
container_name: bitwarden
# 开机自动启动
restart: always
# 指定容器内的 /data 目录挂载到宿主机的当前目录下的 /data/bitwarden/data 目录,这样你可以在宿主机上执行数据库的备份操作
volumes:
- /data/docker/bitwarden/data:/data
# bitwarden配置
environment:
# 开启网页访问
WEB_VAULT_ENABLED: 'true'
# 开启新用户注册,我们注册后关闭即可
SIGNUPS_ALLOWED: 'true'
# 开启长连接
WEBSOCKET_ENABLED: 'true'
# 日志文件
LOG_FILE: /data/bitwarden.log
# 将容器内的80/3012端口映射到宿主机的7006/7007端口;其中80端口为 HTTP 服务,3012 端口是 websockets 服务
ports:
- 7006:80
- 7007:3012
EOF
4.3 Nginx反向代理配置
#bitwarden
location / {
proxy_pass http://127.0.0.1:7006;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:7007;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:7006;
}
以上配置为最基础的配置,你还可以加入 HSTS / 压缩 / XSS 防护等配置;
详细配置请参考官方文档:https://github.com/dani-garcia/bitwarden_rs/wiki/Proxy-examples
现在已经是 2020 年,请为域名配置 HTTPS 证书,并将 HTTP 流量阻挡或重定向到 HTTPS,以保障数据传输的安全。
4.4 启动docker服务
docker-compose up -d
4.5 内存占用
可以看到,该服务器端仅仅占用10M内存
5 用户注册和数据导入
启动完成后,我们就可以通过我们配置的域名来访问网页版了
点击创建账号进行账号的注册
注册登录后可在上方的工具中进行数据导入,支持多种格式的数据导入
6 关闭新用户注册
现在你的bitwarden服务器允许任何人访问和注册,如果你只需要自己使用,可以关闭用户注册功能。
调整docker-compose配置文件
SIGNUPS_ALLOWED: 'false'
改动配置后需要运行以下命令来删除并重新创建容器以使配置生效,无需担心你的数据,我们的数据均保存在我们第4.1中创建的目录中
docker-compose down && docker-compose up -d
这样就关闭了用户注册功能,并禁用了 web 的访问。密码数据我们还是可以在客户端中进行编辑的。
7 登录客户端
服务器端安装完毕后,我们需要登录到客户端来进行密码的管理和自动填充,Bitwarden的客户端都大同小异,这里以Chrome扩展为例:
首先我们在登录页面点击小齿轮
然后我们填入我们自己的Bitwarden服务器地址
之后使用我们刚刚注册的账号进行登录即可,其他客户端的配置和这里是一样的。
8 备份
我们在使用过程中的所有数据都保存在我们创建的目录:/data/bitwarden 中
为保证数据安全我们最好定期将该目录的数据进行备份
你可以自己手动备份也可以使用我们的自动备份脚本:WebServerAutoBackup
Github: https://github.com/ehaut/WebServerAutoBackup
配置文件中填写备份目录为:/data/bitwarden
然后在crontab定时任务中添加定时任务,即可每日进行备份到你指定的地方。
#每日凌晨 2:15 备份bitwarden
15 2 * * * cd /root/WebServerAutoBackup && ./backup.sh config-bitwarden.ini > /data/backup/log/bitwarden-cron.log 2>&1 & 1
9 更新
由于使用的是非官方的服务器端,所以作者们会经常同步更新到官方的更新中,以保证与客户端的兼容性
更新也是直接运行如下命令即可
cd /data/bitwarden
//停止运行的bitwarden容器
docker-compose stop
//拉取最新镜像
docker-compose pull
//重新构建并启动
docker-compose up -d --build
10 安全提醒
对于使用任何密码管理工具的人来说,主密码的重要性不言而喻。一旦主密码泄漏,相当于将所有帐号密码拱手相让;一旦主密码丢失,所有数据也都化作随机噪音,变得一文不值。所以,请时常审视、改进你的安全策略,定期对帐号做安全审查,不定期修改并牢记主密码。
Thanks:
本文无耻的 参考了 基本抄袭了JokerQyou的文章:https://blog.mynook.info/post/selfhost-bitwarden/
Bitwarden 用户+1
听说官方的导出数据不会导出加密附件,看来也可以直接备份数据库呀