免费开源的bitwarden_rs自建密码管理系统-安装,使用和备份教程

免费开源的bitwarden_rs自建密码管理系统-安装,使用和备份教程

前言

原来的时候看过Testv介绍1Password的视频,可以全平台自动填充密码,自动生成无规律密码,看完之后很心动,毕竟密码安全也很重要,但是1Password太贵了,一年至少需要35美元。而且1Password还只能使用信用卡付款,像Paypal也不支持,这让很多想尝试1Password的朋友“望而却步”了。这篇文章主要分享一下在功能上和使用体验上媲美1Password的免费开源密码管理系统Bitwarden,自建Bitwarden,再也不用担心1Password删库“跑路”了。

bitwarden_rs安装教程

详细安装视频:https://www.bilibili.com/video/BV15t4y117UU

网站:
官网:https://bitwarden.com/
第三方项目:https://github.com/dani-garcia/bitwarden_rs

Bitwarden官方推荐使用Docker镜像安装,但是Bitwarden 服务器使用 .Net 开发,如果使用 Docker 来部署,镜像体积过大;此外它使用 MSSQL 数据库,部署这个数据库对服务器配置要求比较高。

而bitwarden_rs是第三方开发的Bitwarden安装镜像。bitwarden_rs采用 Rust 实现了 Bitwarden服务器,这个实现更进一步降低了对机器配置的要求,并且 Docker 镜像体积很小,部署非常方便。此外,官方服务器中需要付费订阅的一些功能,在这个实现中是免费的。测试在512MB内存上机子完美运行bitwarden_rs。

安装前准备

  • 一台VPS主机。bitwarden_rs使用Docker镜像来安装,需要使用一台VPS主机,配置不用太高,用512MB内存也能跑起来,而且非常地流畅。
  • 一个域名。虽然有市面上有少的免费域名,但是建议还是使用付费的域名,密码这个东西比较重要,一旦确定要自建密码管理系统的话就要保证可以长期使用。

安装Docker

你需要先安装 Docker CE (社区版)和Docker Compose,以下命令是基于Debian系统的演示,如果你是CentOS、Ubuntu,请参考官网:

安装 Docker CE (社区版):https://docs.docker.com/install/linux/docker-ce/ubuntu/\
安装 Docker Compose:https://docs.docker.com/compose/install/#install-compose

如果你已经安装过,就不需要看这一步了

Debian系统安装Docker CE 和Docker Compose如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#卸载()
sudo apt-get remove docker docker-engine docker.io containerd runc
#SET UP THE REPOSITORY
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
#检测是否安装成功
sudo apt-key fingerprint 0EBFCD88
#有以下输出就表示成功添加Docker’s official GPG key:
root@hostfbc9e58d73:~# sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <[email protected]>
sub rsa4096 2017-02-22 [S]
#添加stable repository
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
#开始安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
#验证 Docker Engine - Community是否安装正确
sudo docker run hello-world
#有以下输出就表示正确安装
root@hostfbc9e58d73:~# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:b8ba256769a0ac28dd126d584e0a2011cd2877f3f76e093a7ae560f2a5301c00
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/


#安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
#检测是否安装成功
docker-compose --version
#有输出即表示成功
docker-compose version 1.25.5, build 4667896b
#如果提示命令不存在,可以手动创建链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

安装Caddy V2

bitwarden_rs官方可以选择使用Caddy来搭建Web服务,主要原因是因为Caddy安装配置简单。

安装方法点击 https://gwliang.com/2020/11/10/caddy2-install/

当然你也可以选择使用Nginx,下面也会给出Nginx的配置,如果你没有用过HTTP Server,推荐使用Caddy V2来上手.

安装Caddy(已失效,仅作存档)

安装方法点击 https://gwliang.com/2020/01/27/caddy-install

bitwarden_rs安装

bitwarden_rs安装只需要一句代码就可以搞定:

1
docker pull bitwardenrs/server:latest

bitwarden_rs配置方法

启动bitwarden_rs

启动bitwarden也很简单,我们只需要执行以下代码即可:

1
2
3
4
5
6
7
8
docker run -d --name bitwarden \
-e SIGNUPS_ALLOWED=true \
-e WEBSOCKET_ENABLED=true \
-e LOG_FILE=/data/bitwarden.log \
-p 8880:80 \
-p 3012:3012 \
-v /bw-data/:/data/ \
bitwardenrs/server:latest

设置Caddy V2 / Caddy / Nginx

Caddy V2

由于V1版本停止服务了,所以这里更新一下Caddy V2的代码,比V1还简单,在/usr/local/caddy/Caddyfile里输入下面的内容即可(要改下面的域名)

1
2
3
4
5
pwd.gwl.wtf {
reverse_proxy 127.0.0.1:8880
reverse_proxy /notifications/hub 127.0.0.1:3012
reverse_proxy /notifications/hub/negotiate 127.0.0.1:8880
}

Caddy(停止服务,代码仅作存档)

如果你使用的是Caddy,在/usr/local/caddy/Caddyfile里输入下面的内容即可(要改下面的域名)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pwd.gwl.wtf {
gzip
tls [email protected]
proxy / 127.0.0.1:8880 {
websocket
header_upstream -Origin
}
proxy /notifications/hub 127.0.0.1:3012 {
websocket
header_upstream -Origin
}
proxy /notifications/hub/negotiate 127.0.0.1:8880 {
websocket
header_upstream -Origin
}
}

Nginx

如果你使用的是Nginx,可以使用下面的配置(先要配置好了域名、SSL等)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
server {
listen 80;
listen 443 ssl http2;
ssl_certificate /usr/local/nginx/conf/ssl/pwd.gwl.wtf.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/pwd.gwl.wtf.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name pwd.gwl.wtf;
if ($ssl_protocol = "") { return 301 https://$host$request_uri; }

client_max_body_size 128M;
location / {
proxy_set_header Host 'pwd.gwl.wtf';
proxy_pass http://127.0.0.1:8880;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:8880;
}
}

重启Caddy/Nginx,刷新一下浏览器,你可以看到bitwarden已经可以正常访问了。

禁止注册

为了保证bitwarden服务器的稳定,你可以禁止bitwarden注册新用户(这一项可以放在最后,否则你自己都无法注册了)。禁止新用户注册:

1
2
3
4
5
docker run -d --name bitwarden \
-e SIGNUPS_ALLOWED=false \
-v /bw-data/:/data/ \
-p 80:80 \
bitwardenrs/server:latest

关闭、重启、升级

1
2
关闭: docker stop bitwarden
启动: docker start bitwarden

需要升级的话,你只需要拉取最新的image,rm原来的image,然后按之前的方法启动一个新的容器即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Pull the latest version
docker pull bitwardenrs/server:latest

# Stop and remove the old container
docker stop bitwarden
docker rm bitwarden

# Start new container with the data mounted
docker run -d --name bitwarden \
-e SIGNUPS_ALLOWED=true \
-e WEBSOCKET_ENABLED=true \
-e LOG_FILE=/data/bitwarden.log \
-p 8880:80 \
-p 3012:3012 \
-v /bw-data/:/data/ \
bitwardenrs/server:latest

Docker Compose配置

这一步可选。使用Docker Compose配置可以方便你管理Docker,不用也可以。 在bitwarden目录创建docker-compose.yml文件

1
nano docker-compose.yml

在docker-compose.yml写入一下配置,参考官方wiki(https://github.com/dani-garcia/bitwarden_rs/wiki/Using-Docker-Compose)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3"
services:
bitwarden:
image: bitwardenrs/server
container_name: bitwardenrs
restart: always
ports:
- "127.0.0.1:8880:80" #将8880端口映射到镜像80端口
- "127.0.0.1:3012:3012"
volumes:
- ./bw-data:/data
environment:
WEBSOCKET_ENABLED: "true" #开启WebSocket
SIGNUPS_ALLOWED: "true" #开启注册,自己注册后改成fale
WEB_VAULT_ENABLED: "true" #web客户端\

运行服务

1
2
3
docker-compose up -d #运行服务
docker-compose down #关闭服务
docker-compose restart #重启服务

bitwarden管理密码

网页版bitwarden

网页版的bitwarden管理密码也是非常地方便。以下是bitwarden的界面,有中文:

这是bitwarden的设置页面

可以自己设置两步验证,加强安全性。

浏览器bitwarden

bitwarden提供了Chrome、Firefox等浏览器插件,直接安装就可以启用。

在插件设置中填入你自己的bitwarden地址(否则是进入到官方的地址)


Y9tSSS.png

更多设置等我出视频即可

bitwarden备份与恢复

手动备份

bitwarden备份最关键的就是sqlite3数据库文件了,你可以直接进入到/bw-data目录下,将sqlite3数据库保存下来。当然你也可以将bw-data目录下所有的包括附件文件夹、图标缓存文件夹、密钥等文件备份下来。

自动备份

利用定时任务执行bitwarden备份,首先新建一个文件夹:mkdir /bw-data/db-backup,然后执行数据库备份任务。代码如下(关于定时任务可以自行搜索Crontab定时任务教程):

1
sqlite3 /bw-data/db.sqlite3 ".backup '/bw-data/db-backup/backup.sqlite3'"

恢复备份

bitwarden要恢复备份的话也很简单,直接将sqlite3数据库重写替换就可以了,其它的几个文件夹可以覆盖,也可以保留新的,不影响。如果你的数据库路径与原来的不一致,可以手动指定,代码示例:

1
2
3
4
5
6
docker run -d --name bitwarden \
-e DATABASE_URL=/database/bitwarden.sqlite3 \
-v /bw-data/:/data/ \
-v /bw-database/:/database/ \
-p 80:80 \
bitwardenrs/server:latest

七牛云备份

本地备份只能防止数据出错,有恢复的余地。但是一旦服务器宕机,或者是无法连接,数据就取不出来了,这样就麻烦了。所以我们可以考虑使用七牛云备份到云服务器上,即使服务器宕机也可以把数据轻松下载下来。

点击这里查看和下载qshell。解压并命名为qshell(应该是没有后缀名的),上传到服务器要执行该命令的用户目录里,比如我是用户名为aliyun的用户要执行该命令,就上传到/home/aliyun/upload/qiniu/目录下

给qshell授权

root用户下授予qshell运行权限,开放给所有人

1
chmod a+x qshell

配置好qshell的ak和sk

ak和sk可以在七牛云“个人中心”–>“密钥管理”查看。(存储空间的完整名称,就是你在对象存储里新建的存储空间名字)

aliyun
1
./qshell account 你的access_key 你的secret_key aliyun(aliyun是我为qshell起的用户名,随便起)

完成之后检验一下是否添加成功:

1
./qshell account

填写qshell配置文件

填写好上传配置文件,命名为upload.conf,上传到qshell同一目录里,如果不清楚具体规则可以查看qshell的官方git主页。

我这里给大家一份我用的备份信息,大家可以根据这个进行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"src_dir" : "/bw-data",
"bucket" : "bitwarden-bak",
"file_list" : "",
"key_prefix" : "",
"up_host" : "",
"overwrite" : true,
"check_exists" : false,
"check_hash" : false,
"check_size" : false,
"rescan_local" : true,
"skip_file_prefixes" : "",
"skip_path_prefixes" : "",
"skip_fixed_strings" : "",
"skip_suffixes" : "",
"log_file" : "/opt/qshell/upload.log",
"log_level" : "info",
"log_rotate" : 1,
"log_stdout" : false,
"file_type" : 0
}

之后执行./qshell qupload upload.conf查看上传效果

使用crontab定时任务进行定时备份

1
2
3
crontab -e # 进入cron定时界面

* 2 * * * /opt/qshell/qshell qupload /opt/qshell/upload.conf > /dev/null # 其中的路径要填写完整路径

总结

bitwarden作为一款开源的密码管理器,其本身支持平台之多,功能之全面,是替代1Password的理想品。bitwarden安装简单,采用Docker镜像,特别适合已经有了VPS建站的朋友,在不影响建站的情况下正常使用bitwarden。

bitwarden可以支持多用户注册使用,如果想要让bitwarden发送邮件的话,可以使用SMTP发邮件,参考代码如下:

1
2
3
4
5
6
7
8
9
10
docker run -d --name bitwarden \
-e SMTP_HOST=<smtp.domain.tld> \
-e SMTP_FROM=<[email protected]> \
-e SMTP_PORT=587 \
-e SMTP_SSL=true \
-e SMTP_USERNAME=<username> \
-e SMTP_PASSWORD=<password> \
-v /bw-data/:/data/ \
-p 80:80 \
bitwardenrs/server:latest

本文部分内容参考自:wzfou bitwarden_rs Wiki

免费开源的bitwarden_rs自建密码管理系统-安装,使用和备份教程

https://gwliang.com/2020/05/04/bitwarden-install/

作者

Gaowan Liang

发布于

2020-05-04

更新于

2021-04-25

许可协议

评论