如何通过 Docker 快速部署开源密码管理器 Bitwarden

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

94a853393708d0f8a6936cf5d4c63a5f.png

前言

两年前,我就想自托管 Bitwarden 密码管理器了,但是直到 2022 年快结束的现在,我才真正动手。在搭建好 Vaultwarden 服务以后,这两天我就干了三件事:

  • 把七年里 Google Chrome 保存的密码导入到 Vaultwarden

  • 删除所有 Google Chrome 保存的密码

  • 整理密码:登录这些年注册过的网站,删除无法访问的网站账号,使用 Bitwarden 生成新的用户名/密码

众所周知,Bitwarden[1] 是个基础免费、增值付费、跨平台、自由开源的 密码管理器,官方提供了 服务端[2] 可部署源码,但是它有点太过于庞大。

Vaultwarden[3](原名 Bitwarden_RS)是官方服务端几乎等价的最佳替代品,它占用资源更低并且拥有更丰富的功能。在本文中,我们约定服务端叫做 Vaultwarden,客户端(包括浏览器拓展)叫做 Bitwarden。

社区的大牛们使用 Rust 重写了 Bitwarden API 服务端,除支持几乎所有的官方服务端特性外,它还带给我们一些原本 Premium 用户才能使用的特性,比如:

  • 对组织的支持

  • 文件作为附件(支持加密)

  • 保险库 API 支持

  • 高级 2FA 支持:Yubikey OTP, FIDO U2F, Duo…

  • Bitwarden TOTP 支持

  • 紧急访问

  • ……

为什么使用 Cloudflare Tunnel?

我们的口号是什么?安全!安全!还是 TMD 安全!

部署 Vaultwarden 的实例通过 Cloudflare Tunnel[4] 访问,我们就无需关心服务器安全、反向代理、SSL 证书这些问题了,本文以一台刚 DD 重装纯净系统的 Debian GNU/Linux 11 (bullseye) 云服务器为例

安装 Docker

通过 SSH 登录云服务器后,先刷新软件源安装一些基础软件包

$ sudo apt upate && \ sudo apt upgrade && \ sudo apt install -y wget curl vim ca-certificates gnupg lsb-release

导入 Docker 官方的 GPG 密钥

$ sudo mkdir -p /etc/apt/keyrings && \ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

设置 Docker 存储库

$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

开始安装

$ sudo apt update && \ sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

验证安装

$ sudo docker version $ sudo docker compose version

现在 Docker 和 docker compose 就安装好了。

[可选] 注册 Yubikey API

要是您有 Yubikey 的话,Vaultwarden 还支持 Yubikey OTP 的两步验证方法,假如您不幸地将出厂卡槽 (Slot 1) 的 OTP 信息删除了的话,可以参考我的 Yubikey 转运日志及上手指南 – OTP[5] 部分,重新注册新的 OTP 信息并在 Yubikey 的官方服务器上注册。

否则,您只需要打开 Yubico API Key Signup[6] 网站,输入您的邮箱和 Yubikey OTP 点击 Get API key 进行注册

b21dcec7d4eae0cf501c83c6584c8f34.png

Register Yubikey API

注册成功后,妥善保管您的 API 信息

13f72791b373554b23a8a3b4bf7f9845.png

Get Yubikey API

部署 Vaultwarden

为了备份和迁移方便,本文使用 docker compose 部署

# 返回用户主目录 # 新建 vaultwarden 目录并进入 $ cd && \ mkdir -p container/vaulwarden && \ cd container/vaulwarden # 创建数据映射目录和部署配置文件 $ touch docker-compose.yml vault.env && \ mkdir vault-data

docker-compose.yml 包含部署 Vaultwarden 的配置,vault.env 是它的环境变量

编辑 docker-compose.yml 文件

$ vim docker-compose.yml

写入以下配置

version: '3.3' services: vaultwarden: image: vaultwarden/server:alpine container_name: vaultwarden restart: always environment: - TZ=Asia/Shanghai ports: - 1314:80 # Vaultwarden 映射端口 - 3012:3012 # Websocket 映射端口 volumes: - './vault-data:/data' env_file: - ./vault.env # 环境变量路径

编辑环境变量 vault.env 文件,下面是我的配置文件,您可以参考 完整的示例文件[7] 修改

IP_HEADER=none WEBSOCKET_ENABLED=true WEBSOCKET_ADDRESS=0.0.0.0 WEBSOCKET_PORT=3012 SENDS_ALLOWED=true # 启用紧急访问 EMERGENCY_ACCESS_ALLOWED=true # 日志等级 LOG_LEVEL=warn # 注册需要验证? SIGNUPS_VERIFY=true SIGNUPS_VERIFY_RESEND_TIME=3600 SIGNUPS_VERIFY_RESEND_LIMIT=3 # 允许注册的域名白名单(你的邮箱域名) SIGNUPS_DOMAINS_WHITELIST=yourdomain.com # 允许创建组织的用户邮箱 ORG_CREATION_USERS=you@yourdomain.com # 使用 openssl rand -base64 48 命令快速生成管理员令牌 ADMIN_TOKEN=eefPNlNPHiA13sXw2z8B6/og7K/lTzNo0KFrUKjB9xHzpYtiUTmAa9+NmLPCILcB # 允许邀请? INVITATIONS_ALLOWED=true # 邀请名称 INVITATION_ORG_NAME=Vaultwarden # 邀请失效时间(时) INVITATION_EXPIRATION_HOURS=12 # 密码提示? SHOW_PASSWORD_HINT=false # Vaultwarden 域名 DOMAIN=https://warden.yourdomain.com # 替换您的 Yubikey API 信息(没有请注释掉) YUBICO_CLIENT_ID=87654 YUBICO_SECRET_KEY=Sd1yGCsWonKyDAkyhObC1khs2QDJQYo1arrfDmg= # YUBICO_SERVER=http://yourdomain.com/wsapi/2.0/verify # 设置您的 SMTP 发送邮箱信息 SMTP_HOST=smtp.xxx.com SMTP_FROM=warden@yourdomain.com SMTP_FROM_NAME=Vaultwarden Service # 根据邮箱修改 SMTP_SECURITY=force_tls # SMTP 端口 SMTP_PORT=465 SMTP_USERNAME=warden@yourdomain.com # 密码用 '' 包围起来 SMTP_PASSWORD='Y6qMP7LVgx+JOzYa3kKbOq8q' SMTP_TIMEOUT=15

开始启动 Vaultwarden 容器了

$ sudo docker compose up -d

查看 Vaultwarden 是否启动

$ sudo docker ps -a

安装 Cloudflared

为了方便以后更新建议添加 cloudflared 软件库[8],以 Debian 11 (Bullseye) 为例

# 导入 GPG Key $ sudo mkdir -p --mode=0755 /usr/share/keyrings curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null # 添加软件库 $ echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bullseye main' | sudo tee /etc/apt/sources.list.d/cloudflared.list # 安装 cloudflared $ sudo apt update && sudo apt install -y cloudflared

登录 Cloudflare Zero Trust[9] 控制台,新建一个 Cloudflare Tunnel,选择系统和架构,复制右边的安装服务命令执行

162b9de1106290b0c91ca924c1b63e64.png

Install Cloudflared Service

然后给这个 Tunnel 添加 Public Hostname

71db1432920d9419d92957192688af3d.png

Add Service Port

[可选] 添加 Websocket Public Hostname

通过 Websocket 主动向桌面客户端推送密码库更新,此处选择 TCP 类型应该是错误的,更多信息可查看 Vaultwarden Wiki – Enabling WebSocket Notifications[10]

0862b33158c386477c4e9b797fecd6f8.png

Add Websocket Tunnel

[推荐] 保护 Vaultwarden 管理员后台路径

默认的管理后台是 https://warden.yourdomain.com/admin,只能通过之前设置的 Admin Token 登录,为了防止这个管理入口被人恶意爆破,此处我们可以使用 Cloudflare Zero Trust 设置保护策略。

在 Cloudflare Zero Trust[11] 控制台左侧导航栏的 Access 里的 Applications ⇒ Add an applications 添加一个访问应用,类型选择 Self-hosted,选择托管 Vaultwarden 的域名,路径写 admin 保存

b6440d8b8704c53ef4d35c21a377f2d1.png

Admin Access

接着在后面 Policies 和 Authentication 按照你自己的要求设置访问策略和验证方式即可,这样在访问管理员后台的时候,会先通过 Cloudflare Zero Trust 访问策略才能继续。

使用 Bitwarden

第一次使用,在部署的 Vaultwarden 上按照流程注册账号、设置记得住且足够强的 Master Password、添加几种保护账号的两步验证方式

068facde88e10a18bfcc5ca914e3d171.png

Add 2FA

现在进入 Bitwarden 下载页面[12] 选择使用的客户端和浏览器插件安装后就可以开始使用啦!

  • 客户端支持:Windows, macOS, Linux, iOS, iPadOS, Android

  • 浏览器支持:Google Chrome, Safari, Opera, Edge, Brave, Tor…

无论是哪种客户端/浏览器,将自托管服务器 URL 修改为您的 Vaultwarden 服务地址

e0fa28ac28791e5ad3ad433a5700e42f.png

Server URL

在 iPhone/iPad/Android 上可以设置 Bitwarden 为默认的密码自动填充工具(部分国产魔改 Android 可能有所限制)

26caaf419e425c99d30d995872d05600.png

Set Default Autofill

在 iOS/iPadOS 上的 Bitwarden 客户端设置里,按照 Add extension 提示添加拓展,现在就可以完美使用了!

21b2d00c31e4a92552b49ca0f9f3fefb.png

Add Extension

最后

这几天体验下来真的不错,每个设备上的 Bitwarden 客户端可以设置密码库定时锁定(1~5 分钟都可以)。然后可以用 TouchID、FaceID、Windows Hello 等生物识别方式解锁密码库,非常方便!

此外,这个方案可以也可以在你家里的 NAS、树莓派(参考官方文档选择镜像)、All in One 设备上部署,而完全不需要考虑公网 IP、DDNS、内网穿透、反向代理……

用户名生成和密码生成都支持自定义规则,以后终于不用苦想用户名了;Bitwarden Sent 功能很赞,可以发送文本或文件(最大支持 500MB),设置访问策略、阅后即焚、定时删除……

如果要更新 Vaultwarden Docker 容器

$ cd && \ cd container/vaulwarden && \ sudo docker compose down && \ sudo docker compose pull && \ sudo docker compose up -d

别忘记定期备份你的 Vaultwarden 哦,如果使用其他数据库后端的,数据库也要单独备份!

引用链接

[1]

Bitwarden: https://bitwarden.com/

[2]

服务端: https://github.com/bitwarden/server

[3]

Vaultwarden: https://github.com/dani-garcia/vaultwarden

[4]

Cloudflare Tunnel: https://www.cloudflare.com/products/tunnel/

[5]

Yubikey 转运日志及上手指南 – OTP: https://www.dejavu.moe/posts/yubikey-setup/#otp

[6]

Yubico API Key Signup: https://upgrade.yubico.com/getapikey/

[7]

完整的示例文件: https://github.com/dani-garcia/vaultwarden/blob/main/.env.template

[8]

cloudflared 软件库: https://pkg.cloudflare.com/index.html

[9]

Cloudflare Zero Trust: https://one.dash.cloudflare.com/

[10]

Vaultwarden Wiki – Enabling WebSocket Notifications: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-WebSocket-notifications

[11]

Cloudflare Zero Trust: https://one.dash.cloudflare.com/

[12]

下载页面: https://bitwarden.com/download/

本文转载自:「Dejavu’s Blog」,原文:https://url.hi-linux.com/ujbSt,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

5576392155a5990880f40af6c3211ecd.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

3bd323ee37b80fb64476de05d289c1f0.png

你可能还喜欢

点击下方图片即可阅读

2f8d8570e51dc72a3f96870ad35ba44f.png

AutoCut: 一款通过字幕自动剪辑视频的神器

d03edcf7d684f079f83831dd8388f56b.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

fb3dfcaf703d7edd1f03c959d3467a9d.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

原文链接:https://blog.csdn.net/easylife206/article/details/128349485?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168525635616800188522124%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168525635616800188522124&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-28-128349485-null-null.268%5Ev1%5Econtrol&utm_term=NAS%E3%80%81%E7%BE%A4%E6%99%96%E3%80%81%E9%98%BF%E9%87%8C%E4%BA%91%E3%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E3%80%81%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E3%80%81ipv6%E3%80%81ddns%E3%80%81%E8%BD%BB%E9%87%8F%E7%BA%A7%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%81%E9%93%81%E5%A8%81%E9%A9%AC%E3%80%81%E5%A8%81%E8%81%94%E9%80%9A%E3%80%81DSM%E3%80%81DSM6.0%E3%80%81%E7%BE%A4%E6%99%96nas%E3%80%81%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%81%E8%9C%97%E7%89%9B%E6%98%9F%E9%99%85%E3%80%81%E9%BB%91%E7%BE%A4%E6%99%96%E3%80%81docker%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C%E3%80%81%E5%AE%9D%E5%A1%94%E3%80%81%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E3%80%81nginx%E3%80%81frp%E3%80%81%E5%8A%A8%E6%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享