Vaultwarden:轻量级开源密码管理器,自建服务器实现密码自由

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 地址: https://github.com/dani-garcia/vaultwarden

Star 数量: 30K+

Vaultwarden vs Bitwarden vs 其他方案

对比项 Vaultwarden Bitwarden 1Password 浏览器保存
价格 免费 免费/付费 $36/年 免费
开源 ✅ 完全开源 ✅ 开源 ❌ 闭源 ❌ 闭源
自托管 ✅ 完全支持 ✅ 支持 ❌ 不支持 ❌ 不支持
服务器资源 极低(80MB) 较高(1GB+) 云服务 本地
部署难度 简单 复杂 不适用 不适用
数据隐私 完全自主 第三方可选 第三方 不安全

Vaultwarden 的独特优势:

  • 资源占用极低,一台 2核2G 的小服务器就能运行
  • 兼容所有 Bitwarden 官方客户端,体验一致
  • 完全开源,代码可审计
  • 数据完全自主,隐私安全
  • 部署简单,一个 Docker 镜像搞定

工作原理

Vaultwarden 采用端到端加密架构:

复制代码
┌─────────────────────────────────────────────────────────────┐
│                         客户端                               │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐      │
│  │ 密码库数据   │───▶│  AES-256   │───▶│ 加密数据    │      │
│  │ (原文)      │    │   加密      │    │ (发送至服务器)│      │
│  └─────────────┘    └─────────────┘    └─────────────┘      │
└─────────────────────────────────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                       Vaultwarden                           │
│                                                             │
│   服务器存储的是加密后的数据,无法解密原始密码               │
│   即使服务器被攻破,攻击者也无法获取用户密码               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

加密流程:

  1. 客户端使用主密码生成加密密钥
  2. 密码库数据在本地加密
  3. 加密后的数据上传至服务器
  4. 服务器仅存储密文,无法解密

快速上手

Docker 部署(推荐)

创建目录:

bash 复制代码
mkdir -p ~/vaultwarden && cd ~/vaultwarden

创建 docker-compose.yml:

yaml 复制代码
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

启动服务:

bash 复制代码
# 启动服务
docker-compose up -d

# 查看运行状态
docker-compose ps

# 查看日志
docker-compose logs -f

访问 Web 界面:

复制代码
http://your-server-ip:8080

高级配置

使用 MySQL 数据库:

yaml 复制代码
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 数据库:

yaml 复制代码
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 配置:

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:

nginx 复制代码
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;

    # ... 其他配置同上
}

环境变量配置

常用环境变量:

yaml 复制代码
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

禁用注册与邀请用户

生产环境建议:

yaml 复制代码
environment:
  - SIGNUPS_ALLOWED=false
  - INVITATIONS_ALLOWED=true

手动创建用户(通过 Admin 面板):

复制代码
1. 访问 http://your-server-ip:8080/admin
2. 输入 ADMIN_TOKEN
3. 点击"Add User"
4. 填写用户信息
5. 发送邀请链接

备份策略

数据目录备份:

bash 复制代码
# 备份数据目录
tar -czvf vaultwarden-backup-$(date +%Y%m%d).tar.gz ./vw-data

# 备份到远程服务器
rsync -avz ./vw-data user@backup-server:/path/to/backups/

定时备份脚本:

bash 复制代码
#!/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

配置防火墙

bash 复制代码
# 只允许 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:

bash 复制代码
# 拉取最新镜像
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

© 版权归无边界科技所有,版权所有。

相关推荐
Eason_LYC2 小时前
封神!Apache OFBiz CVE-2024-45507 漏洞复现(从入门到反弹Shell,新手也能拿捏服务器)
服务器·web安全·网络安全·apache·apache ofbiz·cve-2024-45507·getshell
sz66cm2 小时前
Linux基础 -- systemd 用户服务残留条目清除
linux·服务器
❀͜͡傀儡师2 小时前
macOS/Linux Gemini CLI安装指南
linux·运维·macos
liulilittle2 小时前
LINUX RING BUFFER TUN/TAP 2
linux·运维·服务器·开发语言·网络·c++
疯狂吧小飞牛2 小时前
修改crashkernel为0
linux·服务器
maosheng114610 小时前
RHCSA的第一次作业
linux·运维·服务器
NocoBase10 小时前
【2.0 教程】第 1 章:认识 NocoBase ,5 分钟跑起来
数据库·人工智能·开源·github·无代码
NocoBase11 小时前
开源项目管理工具选型指南(2026年最新)
人工智能·开源·无代码
旺仔.29111 小时前
Linux 信号详解
linux·运维·网络