bitwarden_rs是一个免费开源、能自己搭建服务端的安全密码库服务器

Docker安装

wget -qO- get.docker.com | bash

安装Docker Compose

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > ./docker-compose
mv ./docker-compose /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose

Docker进程管理

systemctl enable docker
systemctl start docker
systemctl status docker

部署 Bitwarden

https://github.com/dani-garcia/bitwarden_rs

‘bitwarden_rs’的docker镜像bitwardenrs/server现已变更为vaultwarden/server

为了安全,可通过docker并创建一个临时容器,Generate an Argon2id PHC string using the ‘bitwarden’ preset。

docker run --rm -it vaultwarden/server /vaultwarden hash

得到用bitwarden生成的ADMIN_TOKEN值。类似如下值

ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$iK/BPqYwo02kukcDLJH+oUV1OSGkI0NRSgpGJam3Y6A$PTk/xhEI0bWQk8mWwk8HWdOQMwOipBAtMSEU8CAt274'

复制替换掉ADMIN_TOKEN值

docker run -d --name bitwarden --restart=always -v /bw-data/:/data/ -p 45729:80 -e SIGNUPS_ALLOWED=false -e INVITATIONS_ALLOWED=false -e ADMIN_TOKEN=`ADMIN_TOKEN值` vaultwarden/server:latest

以下参数可自定义按需修改:

  • SIGNUP_ALLOWED值是否允许注册
  • INVITATIONS_ALLOWED值是否允许组织邀请注册
  • youpassword用户管理界面 (/admin)的密码
  • /bw-data/宿主机映射目录
  • 将宿主机的45729映射到容器的80端口上
  • --restart=always自动启动bitwarden
  • -e SHOW_PASSWORD_HINT=false禁用密码提示

禁用日志添加-e LOG_LEVEL=off、 -e USE_SYSLOG=false 、-e EXTENDED_LOGGING=false

新增 SSH密钥 类型

-e EXPERIMENTAL_CLIENT_FEATURE_FLAGS=ssh-key-vault-item,ssh-agent

完整示范

docker run -d --name bitwarden --restart=always -e EXPERIMENTAL_CLIENT_FEATURE_FLAGS=ssh-key-vault-item,ssh-agent -e TZ=Asia/Shanghai -e SHOW_PASSWORD_HINT=false -v /bw-data/:/data/ -p 45729:80 -e SIGNUPS_ALLOWED=false -e INVITATIONS_ALLOWED=false -e ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$iK/BPqYwoMPsukcDLJH+oUV1OSGkI0NRSgpGJam3Y6A$PTk/xhEI0bWQk8mWwk8HWdOQMwOipBAtMSEU8CAt274' vaultwarden/server:latest

bitwarden容器操作命令

启动容器

docker start bitwarden

停止容器

docker stop bitwarden

删除容器

docker rm bitwarden

升级 Bitwarden 镜像

docker stop bitwarden
docker pull vaultwarden/server:latest
docker start bitwarden

备份Bitwarden

以下为必须要备份的

  • /bw-data/db.sqlite3是Bitwarden的数据库文件
  • /bw-data/sends/*目录下的所有附件是不加密的
docker restart bitwarden
# 手动检查文件更新
# ls -l /bw-data/db.sqlite3
# rclone ls rclonename:bitwarden/db.sqlite3
rclone sync /bw-data/db.sqlite3 rclonename:bitwarden --update
#rclone sync /bw-data/db.sqlite3 rclonename:bitwarden --ignore-times --size-only

其它的都可以不备份(可选),例如/bw-data/config.json管理面板参数,把下面的内容保存为bitwarden_backup.sh

/bw-data/db.sqlite3是Bitwarden 数据库文件 /root/bitwarden/db.sqlite3是本地复制过来的,用于上传到github或通过rclone上传,判断比对MD5值,只有当有更新才上传。

#!/bin/bash
# 重新启动 Bitwarden Docker 容器
docker restart bitwarden

# 等待 Bitwarden 容器启动完成
sleep 3

# 获取 Bitwarden 数据库文件的 MD5 值
db_md5_before=$(md5sum /bw-data/db.sqlite3 | awk '{print $1}')

# 再次获取 Bitwarden 数据库文件的 MD5 值
db_md5_after=$(md5sum /root/bitwarden/db.sqlite3 | awk '{print $1}')

# 如果 MD5 值没有变化,则结束脚本
if [ "$db_md5_before" == "$db_md5_after" ]; then
  echo "Bitwarden 数据库没有更新,脚本退出。"
  exit 0
fi

# 
cd /root/bitwarden/
rm /root/bitwarden/db.sqlite3
cp -f /bw-data/db.sqlite3 /root/bitwarden
# 把备份压缩包文件通过github私有仓库
git add --all
# 指定时间格式
DATE=$(TZ=Asia/Shanghai date +%Y-%m-%d_%H:%M:%S)
git commit -m "$DATE"
git push
echo "github push推送更新成功。"
# 下面是网盘备份
# 把db.sqlite3加密压缩
# 指定时间格式
DATE=$(TZ=Asia/Shanghai date +%Y%m%d%H%M%S)
zip -P yourpassword  -r /bw-data/tmp/bw-$DATE.zip /bw-data/db.sqlite3 /bw-data/sends
# 把备份压缩包文件通过rclone上传到网盘
rclone copy /bw-data/tmp/*.zip rclonename:bitwarden
# 删除15天前的备份文件
rclone delete rclonename:bitwarden --min-age 15d
# 删除压缩包文件
rm /bw-data/tmp/*.zip
echo "删除压缩包文件"
# 提示用户更新完成
echo "Bitwarden 数据库已经更新完毕。"

然后授权

chmod +x bitwarden_backup.sh

通过Crontab定时执行计划任务,编辑/etc/crontab文件,添加

23 11 * * *  root bash /root/bitwarden_backup.sh

然后重启Crontab

systemctl restart cron.service
/etc/init.d/cron restart

还原Bitwarden的备份数据库、镜像备用站点

rclone sync rclonename:bitwarden/db.sqlite3 /bw-data  --ignore-times --size-only
docker restart bitwarden

解压、替换掉原来的文件即可,创建bitwarden_sync.sh文件,

#!/bin/bash
rm /root/bitwarden/db.sqlite3
# 例如从github恢复
cd /root/bitwarden && git pull
# 或者从rclone恢复,二选一即可
rclone copy rclonename:bitwarden/db.sqlite3  /root/bitwarden

# 获取 Bitwarden 数据库文件的 MD5 值
db_md5_before=$(md5sum /root/bitwarden/db.sqlite3 | awk '{print $1}')

# 再次获取 Bitwarden 数据库文件的 MD5 值
db_md5_after=$(md5sum /bw-data/db.sqlite3 | awk '{print $1}')

# 如果 MD5 值没有变化,则结束脚本
if [ "$db_md5_before" == "$db_md5_after" ]; then
  echo "Bitwarden 数据库没有更新,脚本退出。"
  exit 0
fi

rm /bw-data/db.sqlite3 /bw-data/db.sqlite3-shm /bw-data/db.sqlite3-wal
cp /root/bitwarden/db.sqlite3 /bw-data

# 重新启动 Bitwarden Docker 容器
docker restart bitwarden

# 等待 Bitwarden 容器启动完成
sleep 3

# 提示用户更新完成
echo "Bitwarden 数据库已经更新完毕。"

SMTP邮件设置

在docker部署时加上SMTP的参数,示范阿里云域名邮箱

-e SMTP_HOST=smtp.qiye.aliyun.com -e SMTP_FROM=info@example.com -e SMTP_PORT=465 -e SMTP_SECURITY=force_tls -e SMTP_USERNAME=info@example.com -e SMTP_PASSWORD=yourPassword

必要选项如下

  -e SMTP_HOST=smtp.qiye.aliyun.com \
  -e SMTP_FROM=info@example.com \
  -e SMTP_PORT=465 \
  -e SMTP_SECURITY=force_tls \
  -e SMTP_USERNAME=info@example.com \
  -e SMTP_PASSWORD=yourPassword \

也可以登陆http://IP:端口号/admin在网页端手动添加修改

如果发送测试时报错,请注意Secure SMTP认证方式有starttls 、force_tls 、 off及对应的端口号要设置正确

Secure SMTPPort
starttls587
force_tls465
off25

nginx配置带SSL证书的站点配置文件示范

编辑/etc/nginx/sites-available/example.com站点配置文件

server {
	listen 80;
	listen [::]:80;
	server_name example.com;
	return 301 https://$server_name$request_uri;
}
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name example.com;
  location / {
  proxy_pass http://127.0.0.1:45729;
  proxy_redirect off;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  ssl on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
}

Send上传发送文件报错

解决nginx上传文件时413 Request Entity Too Large错误

产生原因:

上传文件的大小超出了 Nginx 允许的最大值,如果没有配置的话,默认是1M;

解决方法:修改Nginx的配置文件

nano /etc/nginx/nginx.conf

在 http{} 段中增大nginx上传文件大小限制

#设置允许发布内容为500M
client_max_body_size 500M;
client_body_buffer_size 512k;

修改完成后,测试并重新加载配置文件

nginx -t
nginx -s reload
systemctl start nginx

客户端使用

https://bitwarden.com/download/

Desktop

  1. Windows

Support for Windows 7, 8, and 10

  1. macOS Support for macOS Yosemite and later

  2. Linux

Support for most distributions

Web Browser

  1. Google Chrome
  2. Mozilla Firefox
  3. Opera
  4. Microsoft Edge
  5. Safari
  6. Vivaldi
  7. Brave
  8. Tor Browser

Mobile

  1. App Store
  2. Google Play