实用工具

Bitwarden自建密码存储系统图文教程-开源免费的bitwarden_rs安装与使用

之前已经分享过一次用bitwarden_rs自建密码存储系统方法了,经过一段时间的试用发现Bitwarden自建密码存储系统确实可以完美替代1Password等付费的密码管理服务了。好处有三点:一是不用支付“高额”的费用,虽然说1Password一年仅需要35美元。

但是对于我们这样的“穷站长”来说35美元可以够自己买一台VPS主机了;二是Bitwarden提供了全平台的插件,电脑PC端、手机APP、Chrome、Firefox等插件,自动填充功能和1Password相差无异;三是安全性掌握在自己手里,再也不用担心1Password“删库跑路”了。

这篇就来分享一下利用VPS主机安装与搭建Bitwarden密码存储系统,作为一名草根站长,要让自己手里的VPS主机“发光发热”,自建RSS在线阅读、相册以及主机监控才是省钱第一大法宝:

  1. Chevereto免费相册程序安装与使用-免费自建图床和公共图片相册
  2. 自建RSS阅读器Tiny Tiny RSS安装和配置自动更新,全文RSS,更换主题,手机RSS登录
  3. 利用ServerStatus自建VPS主机和服务器性能和宕机监控平台-效果美化和自定义

PS:更新记录

1、支持WebDAV同步的密码管理软件,可以和各类网盘整合:Buttercup开源免费的密码管理器-支持网盘WebDAV同步/跨平台/手机APP。2022.11.14

2、如果你觉得付费的密码管理软件太贵,也可以试试免费的密码管理软件,汇总专题:密码管理软件整理汇总-好用免费和付费的密码管理软件推荐。2022.4.8

3、如果不想自己折腾,愿意花钱购买付费服务,请参考:密码管理软件1password使用-自动填充密码支持各大浏览器和手机应用。2022.3.22

一、Bitwarden密码管理系统准备

网站:

  1. 官网:https://bitwarden.com/
  2. 第三方项目:https://github.com/dani-garcia/vaultwarden

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

PS:2022年12月更新,bitwarden_rs已经于2021年8月更换名称为vaultwarden,见:https://github.com/dani-garcia/vaultwarden/discussions/1642。本篇文章所有的安装方法已经更新为Vaultwarden。教程:Vaultwarden(原Bitwarden_RS)自建密码库教程-安装方法 绑定域名 Https证书

1.1 准备一台VPS主机

VPS主机配置不用太高,512MB内存足够了,国内和国外的VPS主机都可以,不过为了后期使用域名访问建议你购买国外的VPS主机,除非你有BA域名。参考:VPS主机排行榜单

1.2 准备一个域名

可选项,Bitwarden安装好了后可以直接使用IP访问,且端口可以自定义,国内的VPS主机不用80、443等端口都可以使用。但是为了安全起见,建议绑定上域名,然后使用Https访问,域名注册参考:域名服务

1.3 配置好Nginx

建议使用Oneinstack或者LNMP一键包,一键安装好Nginx。特别提醒:Bitwarden不影响VPS建站,你可以在你的Web服务器上运行Bitwarden,这也是节省成本的原因了。当然不习惯使用命令的朋友,也可以使用宝塔面板,宝塔面板后台自带了反代。参考:

  1. BT宝塔面板安装与使用-DirectAdmin空间平滑迁移至VPS主机的过程
  2. Oneinstack从入门到精通-Oneinstack安装与使用教程收集整理

二、Bitwarden密码管理系统安装

2.1 安装好Docker

你需要在VPS主机上先安装好 Docker CE (社区版)和Docker Compose,以下命令是基于Ubuntu系统的演示,如果你是Debian参考:安装好Docker,其它的请参考官网:

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

Ubuntu系统安装Docker CE 如下:

sudo apt-get remove docker docker-engine docker.io containerd runc

sudo apt-get update

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

#测试一下有没有成功
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) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

#验证一下是不是正确安装
sudo docker run hello-world
#有以下反馈就表示正确安装
root@localhost:~# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc
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/

Ubuntu系统安装 Docker Compose如下:

#安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

#检测一下是不是成功安装
docker-compose --version

最后,安装好bitwarden_rs用以下命令:

#安装
docker pull vaultwarden/server:latest

2.2 做好DNS解析

到你的域名DNS管理处添加好A记录,将你的域名解析到你的VPS主机上。(注意:如果你只想使用IP访问,关于域名解析和绑定、反代等部分可以直接跳过)

2.3 绑定域名并反代

如果你用的是Oneinstack,使用命令添加虚拟主机绑定好你的域名,然后打开Nginx配置文件,参考以下配置做好反代:(主要是后半部分复制粘贴过去,前部分每个网站不一样,需要保留你自己的原先的配置)

server {
  listen 80;
  listen 443 ssl http2;
  ssl_certificate /usr/local/nginx/conf/ssl/mima.wzfou.net.crt;
  ssl_certificate_key /usr/local/nginx/conf/ssl/mima.wzfou.net.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 mima.wzfou.net;
  if ($ssl_protocol = "") { return 301 https://$host$request_uri; }

  #后半部分
   client_max_body_size 128M;
    location / {
        proxy_set_header  Host  'mima.wzfou.net';
        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,在/usr/local/caddy/Caddyfile里输入下面的内容即可(教程:Caddy最容易上手的Web Server-自动化HTTPS一分钟部署网站\网盘

xx.wzfou.com {
  gzip
  tls freehao123@gmail.com
  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
  }
}

三、Bitwarden密码管理系统运行

3.1 Bitwarden运行关闭

使用以下命令可以运行Bitwarden:

#简单
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

使用以下命令可以停止Bitwarden运行:

docker stop vaultwarden

docker start vaultwarden

3.2 Bitwarden禁止注册

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

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

3.3 Bitwarden发送邮件

如果你的Bitwarden是多用户使用的话,那么你可以配置一下SMTP发邮件了(免费的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

四、Bitwarden密码管理系统使用

4.1 Bitwarden注册用户

在最Bitwarden最开始运行时候不要关闭注册,因为管理员也需要在第一次运行注册账号。

4.2 Bitwarden操作界面

以下就是Bitwarden的使用界面了,非常地简洁。

在Bitwarden“设置”页面中可以对程序进行一定的设置。

你可以开启Bitwarden的两步验证。

4.3 浏览器扩展插件

Bitwarden提供了Firefox、Chrome等常用浏览器扩展插件,安装好了插件,先点击“设置”。

填写你的Bitwarden域名地址。

Bitwarden的浏览器扩展插件操作如下:

Bitwarden自带了密码生成器。

4.4 Bitwarden手机APP

这是Bitwarden手机APP操作界面:

Bitwarden支持手机自动填充。

Bitwarden支持手机指纹登录。

4.5 Bitwarden电脑PC端

这是Bitwarden电脑PC端的界面,基本上和1password差不多。(点击放大)

五、Bitwarden导入导出与备份

5.1 导入导出

以1Password导入到Bitwarden密码管理系统为演示,首先到你的1Password电脑客户端选择导出密码。格式选择1pif即可。

然后打开你的Bitwarden网页端,选择“工具”下的导入1Password即可。

5.2 Bitwarden备份

关于在VPS主机上打包备份的教程,你可以参考:一个命令让Linux定时打包备份指定目录文件夹并同步备份到各大网盘

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

六、总结

这篇文章我们用的是bitwarden_rs来搭建Bitwarden密码存储系统,为了可以让手机APP和浏览器扩展能够正常使用Bitwarden自建密码存储系统,我们需要用到反代域名,如果这些都不需要直接执行启动命令使用IP登录即可。

bitwarden运行命令相关的参数还有如下:

# 运行 bitwarden_rs 容器
docker run -d --name vaultwarden \
    -e SIGNUPS_ALLOWED=false \
    -e INVITATIONS_ALLOWED=false \
    -e ADMIN_TOKEN=step2_generated_token \
    -e ROCKET_TLS='{certs="/data/xxx.crt",key="/data/xxx.key"}' \
    -e DOMAIN=https://bwh.vioe.cc/ \
    -e LOG_FILE=/path/to/log \
    -e LOG_LEVEL=warn -e EXTENDED_LOGGING=true \
    -e DATA_FOLDER=/path/to/data/folder \
    -p 443:80 \
    -v /path/to/host/ssl/:/path/to/docker/ssl/
    -v /path/to/host/data/folder:/path/to/docker/data/folder \
    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 start $name
# 停止容器
docker stop $name
# 删除容器
docker rm $name
# 查看运行容器
docker ps -as

bitwarden升级命令如下:

# 重新拉取镜像
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

文章出自:挖站否 https://wzfou.com/bitwarden-mima/,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。

文章更新于: 2023年3月7日 下午8:07

Qi

关于站长(Qi),2008年开始混迹于免费资源圈中,有幸结识了不少的草根站长。之后自己摸爬滚打潜心学习Web服务器、VPS、域名等,兴趣广泛,杂而不精,但愿将自己经验与心得分享出来与大家共勉。

查看评论