公众号关注「奇妙的 Linux 世界」
设为「星标」,每天带你玩转 Linux !
前言
两年前,我就想自托管 Bitwarden 密码管理器了,但是直到 年快结束的现在,我才真正动手。在搭建好 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 登录云服务器后,先刷新软件源安装一些基础软件包
$sudoaptupate&&\sudoaptupgrade&&\sudoaptinstall-ywgetcurlvimca-certificatesgnupglsb-release
导入 Docker 官方的 GPG 密钥
$sudomkdir-p/etc/apt/keyrings&&\curl-fsSL/linux/debian/gpg|sudogpg--dearmor-o/etc/apt/keyrings/docker.gpg
设置 Docker 存储库
$echo\"deb[arch=$(dpkg--print-architecture)signed-by=/etc/apt/keyrings/docker.gpg]/linux/debian\$(lsb_release-cs)stable"|sudotee/etc/apt/sources.list.d/docker.list>/dev/null
开始安装
$sudoaptupdate&&\sudoaptinstall-ydocker-cedocker-ce-clicontainerd.iodocker-compose-plugin
验证安装
$sudodockerversion$sudodockercomposeversion
现在 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 进行注册
注册成功后,妥善保管您的 API 信息
部署 Vaultwarden
为了备份和迁移方便,本文使用 docker compose 部署
#返回用户主目录#新建vaultwarden目录并进入$cd&&\mkdir-pcontainer/vaulwarden&&\cdcontainer/vaulwarden#创建数据映射目录和部署配置文件$touchdocker-compose.ymlvault.env&&\mkdirvault-data
❝docker-compose.yml 包含部署 Vaultwarden 的配置,vault.env 是它的环境变量
编辑 docker-compose.yml 文件
$vimdocker-compose.yml
写入以下配置
version:'3.3'services:vaultwarden:image:vaultwarden/server:alpinecontainer_name:vaultwardenrestart:alwaysenvironment:-TZ=Asia/Shanghaiports:-1314:80#Vaultwarden映射端口-3012:3012#Websocket映射端口volumes:-'./vault-data:/data'env_file:-./vault.env#环境变量路径
编辑环境变量 vault.env 文件,下面是我的配置文件,您可以参考完整的示例文件[7]修改
IP_HEADER=noneWEBSOCKET_ENABLED=trueWEBSOCKET_ADDRESS=0.0.0.0WEBSOCKET_PORT=3012SENDS_ALLOWED=true#启用紧急访问EMERGENCY_ACCESS_ALLOWED=true#日志等级LOG_LEVEL=warn#注册需要验证?SIGNUPS_VERIFY=trueSIGNUPS_VERIFY_RESEND_TIME=3600SIGNUPS_VERIFY_RESEND_LIMIT=3#允许注册的域名白名单(你的邮箱域名)SIGNUPS_DOMAINS_WHITELIST=#允许创建组织的用户邮箱ORG_CREATION_USERS=you@#使用opensslrand-base6448命令快速生成管理员令牌ADMIN_TOKEN=eefPNlNPHiA13sXw2z8B6/og7K/lTzNo0KFrUKjB9xHzpYtiUTmAa9+NmLPCILcB#允许邀请?INVITATIONS_ALLOWED=true#邀请名称INVITATION_ORG_NAME=Vaultwarden#邀请失效时间(时)INVITATION_EXPIRATION_HOURS=12#密码提示?SHOW_PASSWORD_HINT=false#Vaultwarden域名DOMAIN=#替换您的YubikeyAPI信息(没有请注释掉)YUBICO_CLIENT_ID=87654YUBICO_SECRET_KEY=Sd1yGCsWonKyDAkyhObC1khs2QDJQYo1arrfDmg=#YUBICO_SERVER=/wsapi/2.0/verify#设置您的SMTP发送邮箱信息SMTP_HOST=SMTP_FROM=warden@SMTP_FROM_NAME=VaultwardenService#根据邮箱修改SMTP_SECURITY=force_tls#SMTP端口SMTP_PORT=465SMTP_USERNAME=warden@#密码用''包围起来SMTP_PASSWORD='Y6qMP7LVgx+JOzYa3kKbOq8q'SMTP_TIMEOUT=15
开始启动 Vaultwarden 容器了
$sudodockercomposeup-d
查看 Vaultwarden 是否启动
$sudodockerps-a
安装 Cloudflared
为了方便以后更新建议添加cloudflared 软件库[8],以 Debian 11 (Bullseye) 为例
#导入GPGKey$sudomkdir-p--mode=0755/usr/share/keyringscurl-fsSL/cloudflare-main.gpg|sudotee/usr/share/keyrings/cloudflare-main.gpg>/dev/null#添加软件库$echo'deb[signed-by=/usr/share/keyrings/cloudflare-main.gpg]/cloudflaredbullseyemain'|sudotee/etc/apt/sources.list.d/cloudflared.list#安装cloudflared$sudoaptupdate&&sudoaptinstall-ycloudflared
登录Cloudflare Zero Trust[9]控制台,新建一个 Cloudflare Tunnel,选择系统和架构,复制右边的安装服务命令执行
然后给这个 Tunnel 添加 Public Hostname
[可选] 添加 Websocket Public Hostname
❝通过 Websocket 主动向桌面客户端推送密码库更新,此处选择 TCP 类型应该是错误的,更多信息可查看Vaultwarden Wiki - Enabling WebSocket Notifications[10]
[推荐] 保护 Vaultwarden 管理员后台路径
❝默认的管理后台是
/admin
,只能通过之前设置的 Admin Token 登录,为了防止这个管理入口被人恶意爆破,此处我们可以使用 Cloudflare Zero Trust 设置保护策略。
在Cloudflare Zero Trust[11]控制台左侧导航栏的 Access 里的 Applications ⇒ Add an applications 添加一个访问应用,类型选择 Self-hosted,选择托管 Vaultwarden 的域名,路径写 admin 保存
接着在后面 Policies 和 Authentication 按照你自己的要求设置访问策略和验证方式即可,这样在访问管理员后台的时候,会先通过 Cloudflare Zero Trust 访问策略才能继续。
使用 Bitwarden
第一次使用,在部署的 Vaultwarden 上按照流程注册账号、设置记得住且足够强的 Master Password、添加几种保护账号的两步验证方式
现在进入 Bitwarden下载页面[12]选择使用的客户端和浏览器插件安装后就可以开始使用啦!
客户端支持:Windows, macOS, Linux, iOS, iPadOS, Android
浏览器支持:Google Chrome, Safari, Opera, Edge, Brave, Tor…
无论是哪种客户端/浏览器,将自托管服务器 URL 修改为您的 Vaultwarden 服务地址
在 iPhone/iPad/Android 上可以设置 Bitwarden 为默认的密码自动填充工具(部分国产魔改 Android 可能有所限制)
在 iOS/iPadOS 上的 Bitwarden 客户端设置里,按照 Add extension 提示添加拓展,现在就可以完美使用了!
最后
这几天体验下来真的不错,每个设备上的 Bitwarden 客户端可以设置密码库定时锁定(1~5 分钟都可以)。然后可以用 TouchID、FaceID、Windows Hello 等生物识别方式解锁密码库,非常方便!
此外,这个方案可以也可以在你家里的 NAS、树莓派(参考官方文档选择镜像)、All in One 设备上部署,而完全不需要考虑公网 IP、DDNS、内网穿透、反向代理……
用户名生成和密码生成都支持自定义规则,以后终于不用苦想用户名了;Bitwarden Sent 功能很赞,可以发送文本或文件(最大支持 500MB),设置访问策略、阅后即焚、定时删除……
如果要更新 Vaultwarden Docker 容器
$cd&&\cdcontainer/vaulwarden&&\sudodockercomposedown&&\sudodockercomposepull&&\sudodockercomposeup-d
别忘记定期备份你的 Vaultwarden 哦,如果使用其他数据库后端的,数据库也要单独备份!
引用链接
[1]
Bitwarden:/
[2]
服务端:/bitwarden/server
[3]
Vaultwarden:/dani-garcia/vaultwarden
[4]
Cloudflare Tunnel:/products/tunnel/
[5]
Yubikey 转运日志及上手指南 - OTP:https://www.dejavu.moe/posts/yubikey-setup/#otp
[6]
Yubico API Key Signup:/getapikey/
[7]
完整的示例文件:/dani-garcia/vaultwarden/blob/main/.env.template
[8]
cloudflared 软件库:/index.html
[9]
Cloudflare Zero Trust:https://one./
[10]
Vaultwarden Wiki - Enabling WebSocket Notifications:/dani-garcia/vaultwarden/wiki/Enabling-WebSocket-notifications
[11]
Cloudflare Zero Trust:https://one./
[12]
下载页面:/download/
本文转载自:「Dejavu’s Blog」,原文:https://url.hi-/ujbSt,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-。
最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在「奇妙的 Linux 世界」公众号直接回复「加群」邀请你入群。
你可能还喜欢
点击下方图片即可阅读
AutoCut: 一款通过字幕自动剪辑视频的神器
点击上方图片,『美团|饿了么』外卖红包天天免费领
更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!