利用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 和 Collate 正确!)
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浏览器的操作方式吧。
- 地址栏中输入chrome://net-internals/#hsts。
- 在Delete domain中输入项目的域名,并Delete(删除)。
- 可以在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
- 很好用,基本上可以解决换手机二次验证难堪事宜。
参考链接
- https://github.com/dani-garcia/vaultwarden/wiki/FAQs
- https://github.com/dani-garcia/vaultwarden/wiki
- https://www.bitwarden.com/
- https://bitwarden.com/download/
- https://registry.hub.docker.com/r/vaultwarden/server/
- https://www.ixmu.net/article/434.html
- docker compose 在 Github 的地址:https://github.com/docker/compose/releases
- vaultwarden 在 Github 的地址:https://github.com/dani-garcia/vaultwarden
- vaultwarden 在 docker hub 的地址:https://hub.docker.com/r/vaultwarden/server
- vaulwarden 官方文档:https://github.com/dani-garcia/vaultwarden/wiki
- vaultwarden 官方文档中文翻译版:https://rs.ppgg.in/
- Bitwarden--彻底更新我的密码管理系统https://www.bilibili.com/read/cv16225285
Coastline9768
zidangtou