在本地搭建密码管理工具 Vaultwarden

2024-03-22#Vaultwarden#密码管理器

Vaultwarden 是一个开源的密码管理器的服务器,它主要由 Rust 编写,最终编译成一个可执行文件,因此不需要安装其他依赖,非常地小巧绿色,下载可执行文件后,即可运行服务器;然后再搭配客户端程序,就可以管理密码了。

其项目主页介绍了通过 Docker 安装和运行的方式:

 docker pull vaultwarden/server:latest
 docker run -d --name vaultwarden -v /vw-data/:/data/ --restart unless-stopped -p 80:80 vaultwarden/server:latest

但是,如果电脑上没有安装 Docker,但是想尝试一下,该怎么办呢?遗憾的是,官方并没有提供官方的可执行文件下载链接。本文介绍获取可执行文件,以及在本地运行和试用的实践。

获取 vaultwarden 可执行文件 🔗

那么有两种方式获取可执行文件:

  • 从官方的 Docker 镜像中提取可执行文件
  • 从源码编译可执行文件

从官方的 Docker 镜像中提取可执行文件 🔗

如果本地有安装了 Docker,那么可以拉取镜像到本地后,然后复制出来;如果本地没有安装Docker,那么也可以使用 docker-image-extract 从镜像中提取。

详细步骤见文档《Pre built binaries 》

从源码编译可执行文件 🔗

安装 Rust 🔗

Vaultwarden 是由 Rust 编写的,因此首先安装 Rust 编译器。根据 Rust 安装页面 的介绍,运行如下命令,按照提示安装:

 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

配置 Rust 的软件包索引 🔗

在编译 Rust 程序时,通常需要下载第三方的包。从国内直接放过官方的软件源,可能非常慢,甚至超时失败。因此首先要克服网络问题。可将 Rust 软件源配置为国内的镜像。比如清华大学开源软件镜像站提供的 Rust creates.io 索引

下载源码并编译 Vaultwaren 🔗

从源码编译的二进制的官方文档见《Building binary 》

 git clone git@github.com:dani-garcia/vaultwarden.git
 cd vaultwarden
 git checkout 1.30.5 # 可选,切换到最新的标签;否则编译主分支上的最新代码
 cargo build --features sqlite,postgresql,mysql --release # 编译发行版的 vaultwarden,并启用 sqlite, postgresql, mysql 的支持。可根据数据库按需启用

注意:上面的命令在编译时使用了--release选项。目前编译后的可执行文件体积为 27M 左右。如果不启用该选项,默认编译的是调试(debug)版本,编译后的可执行文件体积高达上百兆字节。

众所周知,Rust运行起来很快,但是编译起来巨慢无比。因此 cargo build 可能花费数分钟到数十分钟才会完成。编译后的可执行文件路径为 target/release/vaultwarden

特别注意:Vaultwarden 依赖了 openssl,因此需要本地安装了 openssl 相关库才可以编译成功。比如,对于 Debian Linux 发行版,需要安装 libssl-dev

 apt-get update && apt install -y pkg-config libssl-dev

由于编译后的可执行文件不是跨平台的,因此需要为不同的平台编译不同的可执行文件。通常需要在不同的平台上编译,或者使用交叉编译技术。但由于此处用到了 openssl,交叉编译的方式可能难以成功,或者复杂度较高。

启动 Vaultwarden 🔗

Vaultwarden 依赖数据库存储数据,这也是在编译指定了数据库驱动的特性的原因。在本地试用的最简单方式,就是试用 SQLite3 数据库。

创建一个目录作为 Vaultwarden 的程序目录。进入该目录后,创建一个 data 目录,作为 SQLite3 数据库的存储目录。默认情况下,Vaultwarden 要求安装 Web Vault 到程序目录,否则会报如下错误:

➜ vaultwarden
/--------------------------------------------------------------------\
|                        Starting Vaultwarden                        |
|                           Version 1.30.5                           |
|--------------------------------------------------------------------|
| This is an *unofficial* Bitwarden implementation, DO NOT use the   |
| official channels to report bugs/features, regardless of client.   |
| Send usage/configuration questions or feature requests to:         |
|   https://github.com/dani-garcia/vaultwarden/discussions or        |
|   https://vaultwarden.discourse.group/                             |
| Report suspected bugs/issues in the software itself at:            |
|   https://github.com/dani-garcia/vaultwarden/issues/new            |
\--------------------------------------------------------------------/

[2024-03-22 23:04:57.284][vaultwarden][INFO] Private key created correctly.
[2024-03-22 23:04:57.285][vaultwarden][INFO] Public key created correctly.
[2024-03-22 23:04:57.285][vaultwarden][ERROR] Web vault is not found at 'web-vault/'. To install it, please follow the steps in:
[2024-03-22 23:04:57.285][vaultwarden][ERROR] https://github.com/dani-garcia/vaultwarden/wiki/Building-binary#install-the-web-vault
[2024-03-22 23:04:57.285][vaultwarden][ERROR] You can also set the environment variable 'WEB_VAULT_ENABLED=false' to disable it

如果不使用 Web Vault,而使用其他客户端(比如 Bitwarden),那么也可以设置 WEB_VAULT_ENABLED=false。比如使用如下命令启动 Vaultwarden:

WEB_VAULT_ENABLED=false vaultwarden

使用客户端访问 🔗

Vaultwarden 只是一个服务器端程序,因此还需要一个前端交互界面。根据其项目说明,它与官方 Bitwarden 客户端兼容,因此使用 Bitwarden 客户端可访问 Vaultwarden 。另外,也可以在本地启动一个网页客户端 Web Vault builds for Vaultwarden

使用 Web Vault 🔗

因此,在 Web Vault 的 Github Releases 页面 下载编译好的客户端,解压到程序目录下的 web-vault/ 即可。

此时运行 vaultwarden 可执行文件,即可看到程序正常启动:

➜ vaultwarden
/--------------------------------------------------------------------\
|                        Starting Vaultwarden                        |
|                           Version 1.30.5                           |
|--------------------------------------------------------------------|
| This is an *unofficial* Bitwarden implementation, DO NOT use the   |
| official channels to report bugs/features, regardless of client.   |
| Send usage/configuration questions or feature requests to:         |
|   https://github.com/dani-garcia/vaultwarden/discussions or        |
|   https://vaultwarden.discourse.group/                             |
| Report suspected bugs/issues in the software itself at:            |
|   https://github.com/dani-garcia/vaultwarden/issues/new            |
\--------------------------------------------------------------------/

[2024-03-22 23:18:50.756][start][INFO] Rocket has launched from http://127.0.0.1:8000

根据提示,在浏览器打开 http://127.0.0.1:8000,先注册账户:

Web Vault

登录后即可试用 Vaultwarden:

Web Vault

使用 Bitwarden 客户端 🔗

Bitwarden 的官方下载页面 找到客户端的下载地址。对于 macOS 客户端,会跳转到 Apple Store。由于苹果在国内有服务器,因此直接使用国内网络,即可快速地从 Apple Store 下载到本机。

运行 Bitwarden 客户端后,选择 self-hosted,并填入 http://127.0.0.1:8000

Bitwarden

然后就可以创建新的账号或者使用已有的账户使用本地的 Vaultwarden 了。登录后的页面如下所示:

Bitwarden

下一步 🔗

试用 Vaultwarden 的过程是很简单和顺利的。但是,如果要作为个人甚至团队的日常,那么还需要考虑生产使用的数据库(SQLite3也许并不合适)、HTTPS 的访问,以及数据备份等等,需要精心地设计和运维。


加载中...