利用Docker搭建Vaultwarden/Bitwarden过程记录

Bitwarden是一款支持全平台的开源密码管理器,可以直接访问他们的官网注册并使用他们的服务,将账号信息交给他们管理,也可以自行搭建服务,将账号密码存在自己的服务器上,供自己或者朋友进行使用。

Bitwarden是一款免费且开源的支付卡、密码、秘钥及关键文本存储方案,其最大的亮点就是这全平台支持,提供有浏览器、移动、桌面应用程序支持,可以一键填入密码。

运行环境准备

Bitwarden官方推荐使用Docker镜像安装,而官方使用.net构建,docker镜像体积有点大,这里推荐使用第三方构建的Vaultwarden,支持使用SQlite3、MySQL、PostgreSQL进行数据存储(默认使用SQlite3)。

bitwarden推荐所有请求都是安全的https访问(采用群晖反代理),当然可以使用子域名进行访问。

除了可以选择群晖反代理,亦可采用SSL映射方式

此处内容需要 回复 后才能查看

docker_cli方式

docker pull vaultwarden/server:latest
docker run -d --name vaultwarden -v /vw-data/:/data/ -p 80:80 vaultwarden/server:latest
docker pull vaultwarden/server:latest
docker run -d --name vaultwarden -v /root/vaultwarden:/data/ -e DATABASE_URL=mysql://用户名:用户密码@数据库ip:3306/数据库名称 -p 14556:80 vaultwarden/server:lates
  • 留意下密码最好不要有特殊符号

docker-compose.yaml

如果是群晖,推荐使用其内置的反向代理,同时注释掉- "./ssl:/ssl/"- ROCKET_TLS={certs="/ssl/cert.pem",key="/ssl/privkey.pem"} 

version: "3"
services:
 vaultwarden:
  image: "vaultwarden/server:latest"
  container_name: "vaultwarden"
  hostname: "vaultwarden"
  restart: always
  volumes:
   - "./data:/data/"
   - "./ssl:/ssl/"
  environment:
    - ROCKET_TLS={certs="/ssl/cert.pem",key="/ssl/privkey.pem"}
    - DATABASE_URL=mysql://用户名:密码@ip:3306/数据库名称
    - ADMIN_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    - RUST_BACKTRACE=1
    # 禁用新用户注册
    - SIGNUPS_ALLOWED=false
  ports:
   - "80:80"
  • 不论是哪种部署方式,最终都需要开启代理,比如群晖的,控制面板-->登录门户-->高级-->反向代理服务器-->新增''

创建数据库和用户

1、为 vaultwarden 创建一个新的(空)数据库(确保 Charset 和 Collat​​e 正确!)

CREATE DATABASE vaultwarden CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2a.、创建新的数据库用户并授予数据库权限(MariaDB、MySQL v8 之前的版本)

CREATE USER 'vaultwarden'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL ON `vaultwarden`.* TO 'vaultwarden'@'localhost';
FLUSH PRIVILEGES;

2b、如果您使用 MySQL v8.x,则需要像这样创建用户:

-- Use this on MySQLv8 installations
CREATE USER 'vaultwarden'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
GRANT ALL ON `vaultwarden`.* TO 'vaultwarden'@'localhost';
FLUSH PRIVILEGES;

如果您已经创建用户并且想要更改密码类型:

-- Change password type from caching_sha2_password to native
ALTER USER 'vaultwarden'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';

您可能想要尝试一组受限制的授权:

GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, UPDATE ON `vaultwarden`.* TO 'vaultwarden'@'localhost';
FLUSH PRIVILEGES;

添加邮件验证

2024.08.21 新增解决 “Email 2FA is disabled”

  • - SMTP_FROM=670186693@qq.com
  • - SMTP_HOST=smtp.qq.com
  • - SMTP_PORT=465
  • - SMTP_SECURITY=force_tls
  • - SMTP_USERNAME=670186693@qq.com
  • - SMTP_PASSWORD=<less-secure-app-password>

对于使用端口 465 的邮件服务器

  • SMTP_PORT=465
  • SMTP_SECURITY=force_tls

对于使用端口 587(或有时是 25)的邮件服务器

  • SMTP_PORT=587
  • SMTP_SECURITY=starttls

对于根本不支持加密的邮件服务器

  • SMTP_PORT=25
  • SMTP_SECURITY=off

环境变量说明:

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:图标缓存路径

Vaultwarden开启管理员权限

Vaultwarden可以开启管理员权限/admin页面,此页面允许服务器管理员查看所有注册用户并删除它们,它还允许邀请新用户,即使注册被禁用。当然为了用户隐私安全,管理员只能查看用户和删除用户,并不能读取用户存储的密码信息。

环境变量新增:

  • SIGNUPS_ALLOWED:false # 是否允许注册
  • WEBSOCKET_ENABLED=true
  • ADMIN_TOKEN:为后台管理页面 (/admin)设置token, 类似于管理员密码

数据备份

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

疑难杂症

1.http被自动跳转至https问题

自从安装了Vaultwarden后,发现docker的其他应用被自动的跳转到https了,网上搜的解决方案是关闭浏览器的HSTS功能。具体可自行百度。

附上Chrome浏览器的操作方式吧。

  1. 地址栏中输入chrome://net-internals/#hsts。
  2. 在Delete domain中输入项目的域名,并Delete(删除)。
  3. 可以在Query domain测试是否删除成功。

不晓得其他人有没有成功,但我的没成功。我的解决方式很另类。具体如下:

此处内容需要 回复 后才能查看

2.匹配规则的解析

  • 基础域
    • 基础域是什么意思呢?其实就是一级域名的意思。
    • 比如说我填写的链接是`https://123.baidu.com`,那么只要是一级域名是`baidu.com`的网站,Bitwarden都会自动监测到,并给出密码填写建议。所以二级域名的网址`cn.baidu.com`、带端口的网址`baidu.com:5000`、带了路径的网址`baidu.com:5000/ch/asd/123`都可以检测到。
  • 主机
    • 主机名可以简单理解为路径前面的信息。比如说`https://123.baidu.com/123/345`中`123.baidu.com`就是主机名,如果带了端口号的话,还要算上端口号。
    • 所以`主机`模式比`基础域`模式要更加精确一点。
    • 当我的URI是`https://123.baidu.com`时,`其他的`二级域名的网址`cn.baidu.com`、带端口的网址`123.baidu.com:5000`都是不能够检测到的。当我的URI是`https://123.baidu.com:5000`时,其他的二级域名(即使带了同样的端口)的网址`cn.baidu.com:5000`、带`不同端口`的网址`123.baidu.com:6000`也都是不能够检测到的。
  • 总结:
    • 基础域是最大的范围,只要主域名对上了,都会检测到。
    • 主机模式下会对`二级域名`、`端口`敏感,但是对网址路径不敏感。
    • 开始于模式下则更加严格,除了主机名等,还会对网址路径敏感。
    • 最严格的就是精确模式,一定要完全一样才能检测到。

3.关于TOTP

  • 很好用,基本上可以解决换手机二次验证难堪事宜。

参考链接

THE END
分享
二维码
打赏
海报
利用Docker搭建Vaultwarden/Bitwarden过程记录
Bitwarden是一款支持全平台的开源密码管理器,可以直接访问他们的官网注册并使用他们的服务,将账号信息交给他们管理,也可以自行搭建服务,将账号密码存在自……
<<上一篇
下一篇>>