Vaultwarden:轻量级开源密码管理器,自建服务器实现密码自由
背景
密码管理是数字时代的基本功,但现状令人担忧:
- 密码太多记不住,不同平台重复使用同一密码
- 浏览器保存的密码缺乏加密,安全性低
- 1Password、LastPass 等商业密码管理器订阅费用高昂
- 云端密码库数据存储在第三方服务器,隐私无法保障
- 换设备时密码同步困难
今天介绍一款开源密码管理利器——Vaultwarden,它是 Bitwarden 的轻量级自托管替代方案。
什么是 Vaultwarden?
Vaultwarden 是一款使用 Rust 编写的开源密码管理器,是 Bitwarden 的社区分支,完全兼容 Bitwarden 客户端协议。
核心理念: "Lightweight Bitwarden server API implementation written in Rust"——用 Rust 编写的轻量级 Bitwarden 服务器实现。
核心特性:
| 特性 | 说明 |
|---|---|
| 轻量高效 | 资源占用极低,2核2G服务器流畅运行 |
| 协议兼容 | 完全兼容 Bitwarden 官方客户端 |
| 开源免费 | AGPL 3.0 许可证,完全免费 |
| 自托管 | 数据完全自主,隐私安全 |
| 多平台支持 | Web/iOS/Android/桌面客户端 |
| 端到端加密 | 密码在客户端加密,服务端无法查看 |
GitHub 地址: github.com/dani-garcia…
Star 数量: 30K+
Vaultwarden vs Bitwarden vs 其他方案
| 对比项 | Vaultwarden | Bitwarden | 1Password | 浏览器保存 |
|---|---|---|---|---|
| 价格 | 免费 | 免费/付费 | $36/年 | 免费 |
| 开源 | ✅ 完全开源 | ✅ 开源 | ❌ 闭源 | ❌ 闭源 |
| 自托管 | ✅ 完全支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 服务器资源 | 极低(80MB) | 较高(1GB+) | 云服务 | 本地 |
| 部署难度 | 简单 | 复杂 | 不适用 | 不适用 |
| 数据隐私 | 完全自主 | 第三方可选 | 第三方 | 不安全 |
Vaultwarden 的独特优势:
- 资源占用极低,一台 2核2G 的小服务器就能运行
- 兼容所有 Bitwarden 官方客户端,体验一致
- 完全开源,代码可审计
- 数据完全自主,隐私安全
- 部署简单,一个 Docker 镜像搞定
工作原理
Vaultwarden 采用端到端加密架构:
┌─────────────────────────────────────────────────────────────┐
│ 客户端 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 密码库数据 │───▶│ AES-256 │───▶│ 加密数据 │ │
│ │ (原文) │ │ 加密 │ │ (发送至服务器)│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Vaultwarden │
│ │
│ 服务器存储的是加密后的数据,无法解密原始密码 │
│ 即使服务器被攻破,攻击者也无法获取用户密码 │
│ │
└─────────────────────────────────────────────────────────────┘
加密流程:
- 客户端使用主密码生成加密密钥
- 密码库数据在本地加密
- 加密后的数据上传至服务器
- 服务器仅存储密文,无法解密
快速上手
Docker 部署(推荐)
创建目录:
mkdir -p ~/vaultwarden && cd ~/vaultwarden
创建 docker-compose.yml:
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "8080:80"
- "3012:3012"
environment:
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=true
- SIGNUPS_VERIFY=true
- ADMIN_TOKEN=your_admin_token_here
volumes:
- ./vw-data:/data
networks:
- vaultwarden_network
networks:
vaultwarden_network:
driver: bridge
启动服务:
# 启动服务
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs -f
访问 Web 界面:
http://your-server-ip:8080
高级配置
使用 MySQL 数据库:
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "8080:80"
- "3012:3012"
environment:
- WEBSOCKET_ENABLED=true
- DATABASE_URL=mysql://vaultwarden:your_password@mysql:3306/vaultwarden
volumes:
- ./vw-data:/data
mysql:
image: mysql:8
container_name: vaultwarden_mysql
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=root_password
- MYSQL_DATABASE=vaultwarden
- MYSQL_USER=vaultwarden
- MYSQL_PASSWORD=your_password
volumes:
- ./mysql-data:/var/lib/mysql
使用 PostgreSQL 数据库:
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "8080:80"
- "3012:3012"
environment:
- WEBSOCKET_ENABLED=true
- DATABASE_URL=postgresql://vaultwarden:your_password@postgres:5432/vaultwarden
volumes:
- ./vw-data:/data
postgres:
image: postgres:15
container_name: vaultwarden_postgres
restart: unless-stopped
environment:
- POSTGRES_ROOT_PASSWORD=root_password
- POSTGRES_DB=vaultwarden
- POSTGRES_USER=vaultwarden
- POSTGRES_PASSWORD=your_password
volumes:
- ./postgres-data:/var/lib/postgresql/data
客户端配置
浏览器扩展
支持的浏览器:
| 浏览器 | 支持版本 |
|---|---|
| Chrome | Chrome 79+ |
| Firefox | Firefox 63+ |
| Safari | Safari 14+ |
| Edge | Edge 79+ |
| Opera | Opera 64+ |
配置步骤:
1. 安装 Bitwarden 浏览器扩展
Chrome: Chrome Web Store
Firefox: Firefox Add-ons
2. 点击扩展图标,点击设置图标
3. 选择"自托管"并配置:
- 服务器 URL:http://your-server-ip:8080
4. 创建账号或登录
5. 开始使用
桌面客户端
支持的操作系统:
| 平台 | 支持版本 |
|---|---|
| Windows | Windows 7+ |
| macOS | macOS 10.11+ |
| Linux | Ubuntu/Debian/Fedora |
配置步骤:
1. 下载 Bitwarden 桌面客户端
https://bitwarden.com/download/
2. 安装并启动
3. 点击设置 → 选择"自托管"
4. 填写服务器 URL:
http://your-server-ip:8080
5. 登录或创建账号
移动端
支持的平台:
| 平台 | 支持版本 |
|---|---|
| iOS | iOS 12+ |
| Android | Android 5.0+ |
配置步骤:
1. 下载 Bitwarden App
iOS: App Store
Android: Google Play
2. 打开 App,点击设置图标
3. 选择"自托管"
4. 填写服务器 URL:
http://your-server-ip:8080
5. 登录或创建账号
核心功能详解
1. 密码管理
创建密码条目:
密码条目包含:
- 登录名称
- 密码
- 网站 URL
- 备注
- 收藏夹标记
- 自定义字段
- 附件
密码生成器:
配置选项:
- 密码长度:8-128位
- 大写字母:A-Z
- 小写字母:a-z
- 数字:0-9
- 特殊字符:!@#$%^&*
- 避免歧义字符:0、O、l、1、I
生成示例:
- 长度 20,包含所有字符
- 输出:aB3$kL9@mN2#pQ5!
2. 双因素认证(TOTP)
Vaultwarden 支持 TOTP 双因素认证:
支持的 TOTP 方式:
- 基于时间的一次性密码 (TOTP)
- 支持 Google Authenticator 兼容
- 支持 Authenticator 导入
使用步骤:
1. 在需要双因素认证的网站获取密钥
2. 在 Vaultwarden 中添加 TOTP
3. 自动生成 6 位验证码
4. 每 30 秒自动更新
3. 安全笔记
Vaultwarden 支持加密安全笔记:
支持的笔记类型:
- 常规笔记
- 信用卡信息
- 身份信息
- 加密文件
信用卡笔记包含:
- 卡号
- 持卡人姓名
- 到期日期
- CVV
- 备注
4. 组织与共享
创建组织:
组织功能:
- 多人共享密码库
- 设置不同权限
- 群组管理
权限级别:
- 用户:只读
- 成员:读写
- 管理员:完全控制
共享集合:
共享方式:
- 创建组织集合
- 添加成员到集合
- 设置集合权限
- 成员自动同步
5. 密码健康检查
Vaultwarden 提供密码健康检查:
健康检查项:
- 弱密码检测
- 重复密码检测
- 泄露密码检测(Have I Been Pwned)
- 旧密码提醒
报告内容:
- 弱密码数量
- 重复使用密码数量
- 暴露在数据泄露中的密码
- 最近修改时间过长的密码
6. 导入导出
支持导入:
支持的导入格式:
- Bitwarden (JSON)
- 1Password (1PIF)
- LastPass (CSV)
- Chrome (CSV)
- Firefox (CSV)
- Edge (CSV)
- Dashlane (JSON)
- Keeper (CSV)
导出步骤:
1. 登录 Web 界面
2. 进入设置 → 导出保管库
3. 选择格式(JSON/CSV)
4. 输入主密码确认
5. 下载导出文件
高级配置
反向代理配置
Nginx 配置:
server {
listen 80;
server_name vault.example.com;
client_max_body_size 128M;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://localhost:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /notifications/hub/negotiate {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启用 HTTPS:
server {
listen 443 ssl http2;
server_name vault.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# ... 其他配置同上
}
环境变量配置
常用环境变量:
environment:
# 允许新用户注册(生产环境建议关闭)
- SIGNUPS_ALLOWED=false
# 注册邮箱验证
- SIGNUPS_VERIFY=true
# 管理面板 Token
- ADMIN_TOKEN=your_secure_token
# WebSocket 启用
- WEBSOCKET_ENABLED=true
# 日志级别
- RUST_LOG=info
# 最大附件大小(字节)
- ATTACHMENT_MAX_SIZE=10485760
# 数据库 URL
- DATABASE_URL=sqlite://./data/vaultwarden.db
禁用注册与邀请用户
生产环境建议:
environment:
- SIGNUPS_ALLOWED=false
- INVITATIONS_ALLOWED=true
手动创建用户(通过 Admin 面板):
1. 访问 http://your-server-ip:8080/admin
2. 输入 ADMIN_TOKEN
3. 点击"Add User"
4. 填写用户信息
5. 发送邀请链接
备份策略
数据目录备份:
# 备份数据目录
tar -czvf vaultwarden-backup-$(date +%Y%m%d).tar.gz ./vw-data
# 备份到远程服务器
rsync -avz ./vw-data user@backup-server:/path/to/backups/
定时备份脚本:
#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR=/path/to/backups
DATA_DIR=/path/to/vaultwarden/vw-data
# 创建备份
tar -czvf $BACKUP_DIR/vaultwarden-$DATE.tar.gz $DATA_DIR
# 删除 30 天前的备份
find $BACKUP_DIR -name "vaultwarden-*.tar.gz" -mtime +30 -delete
# 上传到云存储(可选)
# rclone copy $BACKUP_DIR/vaultwarden-$DATE.tar.gz remote:backups/
安全加固
设置强主密码
主密码建议:
- 长度至少 12 位
- 包含大小写字母、数字、特殊字符
- 避免使用常见单词
- 不要与其他网站密码相同
最佳实践:
- 使用密码管理器生成的主密码
- 定期更换主密码
- 启用双因素认证
启用双因素认证
TOTP 设置步骤:
1. 登录 Web 界面
2. 进入设置 → 双因素认证
3. 扫描二维码或输入密钥
4. 输入验证码确认
建议使用:
- Authy(支持多设备同步)
- Google Authenticator
- FreeOTP
配置防火墙
# 只允许 HTTPS 和 WebSocket
sudo ufw allow 443/tcp
sudo ufw allow 8443/tcp
# 限制管理面板访问
sudo ufw allow from 192.168.1.0/24 to any port 8080
常见问题
Q:Vaultwarden 和 Bitwarden 有什么区别?
A:
- Bitwarden 官方版使用 .NET Core,需要更多资源
- Vaultwarden 使用 Rust,资源占用极低
- Vaultwarden 是社区分支,完全兼容 Bitwarden 客户端
- 官方版支持更多企业功能,Vaultwarden 更适合个人/小团队
Q:需要多少服务器资源?
A:
- 最低配置:1核1G
- 推荐配置:2核2G
- SQLite 数据库,存储占用小
- 内存占用约 80-200MB
Q:数据安全如何保障?
A:
- 端到端加密,服务器无法解密
- 主密码不存储在服务器
- 支持双因素认证
- 支持审计日志
- 完全自主托管,数据不经过第三方
Q:如何更新 Vaultwarden?
A:
# 拉取最新镜像
docker-compose pull
# 重启服务
docker-compose up -d
# 或使用 Watchtower 自动更新
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
vaultwarden
Q:支持哪些客户端?
A:
- 所有 Bitwarden 官方客户端
- 浏览器扩展(Chrome/Firefox/Edge/Safari/Opera)
- 桌面客户端(Windows/macOS/Linux)
- 移动端(iOS/Android)
- CLI 工具
适用场景
推荐使用:
- 个人密码管理
- 家庭共享密码
- 小团队密码协作
- 替代 1Password/LastPass
- 对隐私安全有要求的用户
- 不想付费使用 Bitwarden 高级功能
不推荐使用:
- 需要完整企业功能(LDAP 集成、SCIM provisioning)
- 超大规模团队集中管理
- 需要本地客服支持的场景
总结
Vaultwarden 以"轻量 + 开源 + 自托管 + 兼容 Bitwarden"的组合,成为了密码管理领域的最佳开源选择。
核心优势回顾:
- 极低资源占用:2核2G 服务器即可流畅运行
- 完全开源:代码透明可审计
- 协议兼容:无缝使用 Bitwarden 全套客户端
- 端到端加密:数据安全有保障
- 自托管部署:数据完全自主
- 完全免费:无任何功能限制
对于追求密码自主管理、隐私安全、免费无限制的用户,Vaultwarden 是最佳选择。
本文由无边界科技技术团队分享,专注软件开发与技术解决方案。
官网:wubianj.com
© 版权归无边界科技所有,版权所有。