知点IT

如何在 Docker 上自托管 Vaultwarden 密码管理服务

space 13 0

特别声明:未经允许禁止转载!

在密码管理工具的「芸芸众生」之中,Bitwarden 是我最为青睐的一款。主要是:开源、免费、私有部署。通过自建服务器,你可以将密码和身份验证凭据牢牢掌握在自己的手中,再也不用担心敏感信息被服务提供商或第三方获取。本文使用飞牛NAS的Docker Compose安装。

简介

Vaultwarden 是一款开源、自托管的密码管理服务器,为 Bitwarden 的轻量化替代方案;完全兼容 Bitwarden 客户端(轻松实现跨平台使用),并且可以免费使用其企业级功能。

尽管 Bitwarden 官方的服务器方案已经十分出色,但是比较吃硬件资源 😂。为此,GitHub 上的大拿 Dani Garcia开发了 Vaultwarden,来作为 Bitwarden 的轻量级自托管替代方案。

Vaultwarden 采用了 Rust 编写,完全兼容 Bitwarden 客户端协议,支持通过 Docker 或 Podman 极速部署,几分钟内就能完成上线,极为便捷。尤其适合服务器资源有限、追求轻量化的用户。

那么,Vaultwarden 和 Bitwarden 之间有哪些具体差异呢?以下几点可以帮助你快速了解:

特点

安全性:都采用了端到端加密(E2EE)来保护「密码库」数据。不过,Vaultwarden 使用了一种名为 Crypton 的专有算法,类似于 Signal 的加密方案,一定程度上甚至比 Bitwarden 的 OpenPGP 端到端加密更加安全。
用户界面:两者的界面风格相似,但不完全一致。Vaultwarden 的布局稍有不同,并且提供了内置密码管理器等额外功能,导航体验也略有区别。
服务端实现:Vaultwarden 采用了去中心化的服务器架构,各用户的数据加密后会分散存储,仅在客户端解密。相比 Bitwarden 的传统客户端-服务器(C/S)模式,这种设计在数据安全性上更具优势。

作为 Bitwarden 的轻量级替代品,Vaultwarden 自然继承了它的诸多核心功能,例如:

  • 支持多设备同步。
  • 端到端加密保护。
  • 密码生成器:可以随机生成高强度密码、口令和用户名。
  • 安全分享:可以与他人安全共享敏感信息。
  • Android 和 iOS 移动端应用覆盖。

部署

部署Vaultwarden需要有一台服务器作为支撑,这里推荐速拓云,拥有香港服务器免备案还便宜。

有了服务器之后需要给服务器安装docker支持,由于我这里用的飞牛NAS,这里不再赘述,度娘很多教程如何安装docker。


打开飞牛的Docker管理工具,找到Compose,然后点击新建。

输入项目名称和位置,然后点击创建docker compose.yml即可。


具体的docker Compose代码如下:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      - DOMAIN=https://www.example.com
      - SIGNUPS_ALLOWED=true
    volumes:
      - /dockerData/vaultwarden/vw-data:/data
    ports:
      - "1880:80"

其中:

  1. DMAIN=https://www.example.com: 域名,这里我使用的是 https://www.example.com,你需要换成你自己的域名。后续我们使用 Nginx 代理到该域名。
  2. SIGNUPS_ALLOWED=true: 允许注册,我们可以第一次启动后,注册一个账号,然后关闭该配置,这样就可以禁止注册来实现私有化。
  3. volumes: - /dockerData/vaultwarden/vw-data:/data: 挂载数据卷,这样数据就不会丢失。
  4. ports: - "1880:80": 端口映射,把容器内的 80 端口映射到宿主机的 1880 端口。

反向代理

下面是nginx反向代理的配置代码:

server {
    listen 80;

    server_name wwww.example.com; 

    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }
    root /var/www/x;

    include /etc/nginx/ssl/example.com.conf;
    
    client_max_body_size 1g;
    
    location / {
        proxy_pass http://bitwarden/; 
        dav_methods PUT DELETE MKCOL COPY MOVE;
        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;  
        proxy_cookie_path / /;
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }
}

如果你的nginx和Vaultwarden 在同一个网段,使用上述配置之后重启nginx即可。

管理

首先进入容器中,输入./,然后会自动生成一串hash码。然后重新修改docker compose 文件。

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      - DOMAIN=https://www.example.com
      - SIGNUPS_ALLOWED=true
      - ADMIN_TOKEN: $$argon2id$$v=19$$m=65540,t=3,p=4$$kY7jtrQrZvI2Zjc7W5/AQZxcN//SilxjMIJV50kXH0g$$t0RlKSlQr5Vz28xNBDzOuFeV+T4SW/m8OvAneTAystk
    volumes:
      - /dockerData/vaultwarden/vw-data:/data
    ports:
      - "1880:80"

注意上面的美元符号是两个,但是系统生成的是一个,需要手动添加一个。然后进入管理员界面:https://www.example.com/admin,输入你的密码,然后点击Enter。

创建用户

首先访问地址:https://www.example.com/#/signup进入注册界面,注册一个用户。然后修改Docker Compose文件,把SIGNUPS_ALLOWED=false,此时只能是已有用户使用,其他人无法使用。

然后可以使用导入功能,把以前其他应用的密码导入到当前系统中,比如我经常用的SafeInCloud可以直接导入。

插件

点击插件可以自动匹配当前浏览器并且跳转到插件的主目录中。

按照提示安装插件即可。

点击插件,然后修改服务器地址。

选择自托管,然后输入服务器地址即可,比如:https://www.example.com

然后使用你的账户登录即可。

找到指定网站即可使用插件自动登录。