Vaultwarden: 开源密码管理方案

发布时间: 更新时间: 总字数:1969 阅读时间:4m 作者: IP上海 分享 网址

Vaultwarden(原名 Bitwarden_RS)是一个非官方的、使用 Rust 编写的 Bitwarden 服务器端替代品。

介绍

核心特点

  • 轻量级:相比官方的 C# 版服务器(需要 MSSQL,占用内存大),Vaultwarden 非常节省资源,甚至可以在树莓派或 512MB 内存的 VPS 上流畅运行。
  • 全功能:它解锁了官方版通常需要付费的企业级功能,例如:组织/其享功能、附件上传、YubiKey/Duo 2FA 支持、TOTP 生成等。
  • 兼容性:完全兼容官方的 Bitwarden 客户端(浏览器插件、iOS/Android App、桌面端)。
  • 数据掌控:所有密码数据存储在你自己的服务器上,不依赖第三方云。

Bitwarden(及 Vaultwarden)的加密原理

Bitwarden(及 Vaultwarden)的加密原理可以简要概括为 零知识架构 (Zero-Knowledge Architecture)端到端加密 (End-to-End Encryption)

核心逻辑是:加密和解密只发生在你的设备上,服务器只负责存储加密后的乱码。

以下是 4 个关键步骤:

密钥派生 (Key Derivation)

当你输入 主密码 时,你的设备(手机/浏览器)会结合你的邮箱(作为盐 Salt),使用 PBKDF2Argon2 算法进行数十万次哈希运算。

  • 结果:生成一个 主密钥 (Master Key)
  • 注意:主密码和主密钥永远不会离开你的设备。

本地加密 (AES-256)

系统会随机生成一个 账户加密密钥

  1. 加密数据:你的密码库数据(账号、密码、笔记)使用这个 账户加密密钥 进行 AES-256 位加密。
  2. 加密密钥:然后,这个 账户加密密钥 本身会被你的 主密钥 再次加密。

数据传输与存储

只有以下两样东西会被发送到服务端:

  • 加密后的数据(一堆乱码)。
  • 主密码的哈希值(仅用于验证身份登录,无法用于解密数据)。

服务器管理员看到的数据全是加密后的密文(Cipher Text),没有密钥无法破解。

数据共享 (RSA 非对称加密)

当你与他人共享密码时(组织功能):

  • 使用 RSA 算法。
  • 你用对方的 公钥 加密密码数据。
  • 对方收到后,用只有他自己知道的 私钥 解密。

一句话总结: 你的主密码是唯一的钥匙,它只存在于你的脑海和设备内存中,服务端也是瞎子,完全不知道你存了什么。

部署前准备

在开始之前,你需要满足以下条件:

  1. 一台 Linux 服务器/VPS (Ubuntu/Debian/CentOS 等)。
  2. 已安装 Docker 和 Docker Compose
  3. 一个域名 (强烈建议)。
  4. 反向代理与 HTTPS (强制要求):由于浏览器的安全限制(Web Crypto API),Bitwarden 客户端必须通过 HTTPS 连接。可以使用 Nginx, Caddy, 或 Nginx Proxy Manager (NPM)。

Docker Compose 部署步骤

下面将使用 Docker Compose 来管理容器,这样配置和维护都更方便。

第一步:创建目录

在服务器上创建一个文件夹来存放配置文件和数据:

mkdir -p /data/vaultwarden/vw-data/logs
cd /data/vaultwarden

第二步:生成 Admin Token (可选但推荐)

如果想启用后台管理页面(用于邀请用户、查看状态),需要生成一个 Token。 运行以下命令生成一个安全的随机字符串:

openssl rand -base64 48

# 推荐
docker run --rm -it vaultwarden/server:1.35.2 /vaultwarden hash

记下输出的字符串,稍后填入配置文件中。

第三步:编写 docker-compose.yml

services:
  vaultwarden:
    image: vaultwarden/server:1.35.2
    container_name: vaultwarden
    # restart: always
    restart: unless-stopped
    ports:
      - '8080:80'
      - '3012:3012' # WebSocket 通知
    volumes:
      - ./vw-data:/data
    environment:
      # 域名配置 (对于某些功能如 WebAuthn 是必须的)
      - DOMAIN=https://pass.yourdomain.com
      # 注册控制: 建议初次部署设为 true,注册完自己账号后改为 false
      - SIGNUPS_ALLOWED=true
      # 启用 WebSocket 通知 (多端实时同步)
      - WEBSOCKET_ENABLED=true
      # 管理面板 Token (填入上一步生成的字符串)
      # 如果不设置,默认无法访问 /admin 页面
      - ADMIN_TOKEN=UFScxZejBFzoNKAzgdfZSmAw6TK4KZMK+l18N/ECS5ixlL5unZuZzrcYLRz//vhBqzuxBshVXmXYOd++w+yZP4R1/Ps9In/J0GsB41BFhufkheu6kh22TqrEXOyU4mbQR9HwdO6SqjxHAjpapsNrc7VAUinmZuBbEZu/gFrgp04=
      # 日志设置
      - LOG_FILE=/data/logs/vaultwarden.log
      - LOG_LEVEL=warn

第四步:启动容器

docker compose up -d

配置反向代理 (HTTPS)

重要: 不能直接通过 http://ip:8080 使用 Vaultwarden 的大部分功能(包括注册和登录),必须配置 HTTPS。

使用 Nginx

在你的 Nginx 配置文件 (server 块) 中加入:

server {
    listen 443 ssl http2;
    server_name pass.yourdomain.com;

    # SSL 证书路径配置...
    # ssl_certificate ...
    # ssl_certificate_key ...

    location / {
        proxy_pass http://127.0.0.1:8080; # 指向 Docker 端口
        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;
    }

    # WebSocket 支持 (可选,但推荐)
    location /notifications/hub {
        proxy_pass http://127.0.0.1:3012;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /notifications/hub/negotiate {
        proxy_pass http://127.0.0.1:8080;
    }
}

使用 Nginx Proxy Manager

  1. 添加 Proxy Host。
  2. Domain Names: pass.yourdomain.com
  3. Forward Hostname: 服务器IPvaultwarden (如果在同一 Docker 网络)
  4. Forward Port: 8080
  5. SSL Tab: 申请 Let’s Encrypt 证书并勾选 Force SSL

初始设置与安全加固

注册账号

访问你的域名 https://pass.yourdomain.com,点击 “Create Account” 注册你的主账号。

关闭注册 (重要安全措施)

一旦注册了自己的账号,强烈建议关闭新用户注册,防止陌生人利用你的服务器。

  1. 修改 docker-compose.yml
    - SIGNUPS_ALLOWED=false
    
  2. 重启容器:
    docker compose down && docker compose up -d
    
    注:即使关闭了注册,管理员依然可以通过 /admin 页面邀请家人或朋友加入。

访问管理面板

访问 https://pass.yourdomain.com/admin。 输入你在 docker-compose.yml 中设置的 ADMIN_TOKEN。 在这里你可以:

  • 查看注册用户。
  • 邀请新用户。
  • 删除用户。
  • 配置 SMTP 邮件服务(用于发送邀请邮件)。

客户端连接

  1. 下载官方 Bitwarden 客户端(App Store, Chrome Store 等)。
    1. chrome 插件:Bitwarden 密码管理器
  2. 在登录页面,点击 设置 (Settings)自托管 (Self-hosted) 图标。
  3. 服务器 URL (Server URL) 中输入你的域名:https://pass.yourdomain.com
  4. 保存并登录。

备份与维护

数据备份(核心): Vaultwarden 的所有数据都在 ./vw-data 目录中,最重要的文件是 db.sqlite3 (数据库) 和 rsa_key* (密钥)。 建议定期将整个 /data/vaultwarden/vw-data 目录备份到异地(如 git、OSS、S3、NAS 或 Google Drive)。

更新容器:

cd /data/vaultwarden
docker compose pull
docker compose up -d

参考

  1. https://github.com/dani-garcia/vaultwarden
本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics