密码全靠脑子记还是记事本?Vaultwarden自建密码管理器实战:全家人的密码保险箱,一把钥匙都不交给别人


导读:本站安全系列讲过SSH密钥、讲过fail2ban、讲过防火墙——但有个每天都要面对的软肋一直没正面处理:密码本身。浏览器记住的密码躺在厂商云里、手机备忘录里存着一排明文密码、每个网站都弱口令撞运气——密码管理是安全木桶上最短的那块板。Bitwarden是这个赛道的标杆,官方收费版的自托管方案对个人又重又贵;Vaultwarden(原bitwarden_rs)用Rust重写了Bitwarden服务端,一台512M小鸡就能跑,官方全平台客户端原生支持。这篇讲透:为什么人人需要密码管理器、Vaultwarden和Bitwarden官方的关系、小鸡上的部署与配置、全平台客户端接入、主密码与保险库的加密模型(服务端能看到什么)、家庭成员共享与紧急访问、安全加固清单、以及最后那笔账——自建密码库的信任边界到底在哪。

一、密码现状:每个人的软肋都一模一样

先做个残忍的自查:你的密码是不是这三种状态之一?状态一,一码走天下——一个密码注册所有网站,任何一个网站泄露(这几年泄露库还少吗),你的邮箱、支付、社交全线失守;状态二,密码记事本——手机备忘录或微信收藏里存着一列"某网站-账号-密码"的明文,手机一丢或者账号一被盗,整本密码拱手送人;状态三,浏览器代记——Chrome记住的密码存在谷歌云上,同步是要登录账号的,而且浏览器密码导出只要系统密码确认一下,任何摸到你电脑的人三十秒拷走全部。这三种状态的共同点:密码和身份之间的那道锁,钥匙根本不在你自己手里。而正确姿势业界早就达成共识:密码管理器——所有密码用一个"主密码"加密保护,每个网站用独立的高强度随机密码,你只需要记住主密码这一个。商业方案(1Password、LastPass、Bitwarden官方云)好用,但又回到了老问题:你的全部密码——比照片隐私浓度更高的数据——躺在别人的服务器上,LastPass 2022年那次大规模泄露事件(用户保险库被拖走)就是前车之鉴。本站一路把代码搬进Gitea、照片搬进Immich、搜索搬进SearXNG——密码这最后一站,该轮到Vaultwarden了。

二、Vaultwarden是什么:Bitwarden的轻量级分身

先厘清关系,免得概念打架。Bitwarden是这个赛道最主流的开源方案:客户端全平台覆盖(浏览器扩展、桌面APP、手机APP、网页端),服务端也开源——但官方服务端是C#/.NET写的,全家桶部署要吃掉1G以上内存,且多个高级功能(TOTP验证码、文件附件、紧急访问)只在付费订阅里开放。Vaultwarden(原名bitwarden_rs)是社区用Rust重写的第三方服务端实现:只实现了Bitwarden的API协议,客户端直接用Bitwarden官方的——浏览器扩展和手机APP填上你自己的服务器地址就能用,体验和官方云完全一致。它的两个杀手锏:其一,轻——Rust单二进制,内存占用30-50MB,512M小鸡轻松跑,加上SQLite做默认数据库零外部依赖;其二,付费订阅的功能全免费——TOTP两步验证码生成、文件附件、密码健康报告、紧急访问、组织共享,在Vaultwarden上统统开放(因为你自己就是服务端,没人向你收订阅费)。法律层面的说明要讲清楚:它是非官方重实现,不是Bitwarden公司的产品——但运行多年、社区庞大、代码开源可审计,已经是自托管密码管理器的事实标准。选型顺带对比:KeePass系(本地数据库+自己想办法同步)轻但多设备体验割裂;Passbolt偏团队;Bitwarden官方自托管重且功能墙——个人和家庭场景,Vaultwarden就是答案。

三、部署:512M小鸡都能跑的保险箱

部署依然是Docker一条路(Compose篇的配方):

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

三个关键点。其一,DOMAIN必须填——Bitwarden客户端的部分Web加密操作依赖正确的域名,不填或填错,网页端能登录但部分功能会异常;这个域名就是你最终访问的地址(反代+HTTPS之后的那个)。其二,SIGNUPS_ALLOWED——首次部署先开true,注册完自己的账号后立刻改成false重启——不关掉的话,任何扫到你服务地址的人都能在你机器上注册账号(虽然他们看不到你的数据,但保险箱门口不该有陌生人的储物格);之后家人要用再临时开、注册完关,或者用ADMIN_TOKEN进管理面板发邀请。其三,/data目录是全部身家——SQLite数据库(含加密后的保险库)和附件都在里面,这个目录必须在备份清单的最高优先级(备份篇的restic流水线里它是第一顺位——数据库丢了,全家的密码就真的没了,后面第八节展开)。部署完,标准三件套跟上:Nginx反代8080端口(反代篇)、Let's Encrypt证书(HTTPS篇)——密码管理器必须HTTPS,明文HTTP等于把主密码在公网裸奔;ufw只放行443(ufw篇),8080这种后端端口不对外。

四、客户端接入:全平台一把梭

服务端就绪后,各端客户端都指向它。浏览器扩展(Chrome/Edge/Firefox商店搜Bitwarden)装好后,点设置图标→账户设置→服务器URL,把默认的bitwarden.com改成`https://vault.example.com`,然后注册/登录——之后的使用体验和官方云版零差别:访问登录页,扩展图标自动亮起提示填充,一键填账号密码;右键扩展图标还能生成随机密码、生成TOTP验证码。手机APP(Bitwarden官方APP,iOS/Android都有)同样改服务器地址登录;iOS的体验尤其值得说:开启自动填充权限后,Safari和各类APP的登录框弹出键盘时,上方会出现Bitwarden的填充建议,点了就填——从此手机上再也不用手打密码;Android同理,凭据自动填充框架集成得很好。桌面客户端可选装,主要价值是全局快捷键(Ctrl+Shift+L呼出搜索)和生物识别解锁。注册流程:第一次注册输入邮箱和主密码——注意,主密码是整个保险库唯一的加密钥匙,它不存在服务器上(客户端加密后才上传),忘了就是忘了,没有任何"找回"选项——主密码的强度和记忆方式,下一节专门讲。全家接入的姿势:管理员开好账号(每人独立账号、独立保险库),常用网站密码放各自库里,家庭共享的(宽带账号、视频会员、路由器管理密码)放"组织"共享集合——一人改,全家同步,再也不会出现"爸爸改了WiFi密码全家断网挨个通知"的名场面。

五、加密模型:服务端到底能看到什么

这是自建密码库最核心的问题,值得用一整节讲透——因为"自建"的前提是你要明白你信的是什么。Bitwarden的加密模型是零知识端到端:你的主密码在客户端(浏览器扩展/APP本地)派生出加密密钥,所有库里的条目(登录密码、笔记、卡片)都用这把密钥在客户端加密后才上传——服务器上存储的、磁盘上躺着的,全是密文。拆开来看各方的可见性:Vaultwarden服务器(你的小鸡)能看到:你的邮箱(登录标识)、加密后的保险库数据(没有主密码就是一堆乱码);服务器看不到:主密码本身、任何一条密码的明文。偷了你小鸡的攻击者(拖走了全部数据)能拿到加密包,但要暴力破解你的主密码——一个够强的主密码(四五个随机词的密码短语)用现在的算力算到宇宙热寂。反过来看风险面:你的客户端设备是链条上真正的薄弱点——中毒的手机、被装的键盘记录器、肩窥——这些攻击绕过一切加密直接看明文输入。所以正确的安全观是:零知识加密让你"放心把密文放在任何地方",但明文只该出现在你信任的设备和屏幕上——这也是为什么公共电脑上应该用一次性密码而不是登录主账号。主密码的选择单独交代:要长(20位以上或4-5个随机词)、要好记(词组串联编个画面)、绝不复用(它保护的是你所有其他密码,它自己必须是唯一的);定期换不必要(长随机的主密码暴力破解不现实),但设备遗失、怀疑被窥时立刻换。

六、进阶玩法:TOTP、附件与紧急访问

Vaultwarden把Bitwarden付费版的功能全开了,三个最值得用。TOTP两步验证码:给每条密码条目加动态验证码(编辑条目→验证器密钥→贴入网站给的secret串),之后手机APP的填充建议里会直接带上当前的6位码——从此谷歌、微软、GitHub的两步验证不用专门装Authy/Google Authenticator,密码管理器一体化解决;网站同时要密码+验证码时,Bitwarden一次填充全给你。这里有个安全权衡值得点破:验证码和密码放在同一个库里,等于把"第二把锁"挂在了同一扇门上——密码库泄露,两道防线一起丢——但考虑到你的库是零知识加密+强主密码,这个风险可控,便利性收益巨大,家庭场景推荐合并管理。文件附件:每条密码条目可以挂文件——恢复码、恢复PDF、营业执照扫描件、软件许可证——全家重要证件的电子件全部加密入库,比邮箱里散落各处安全得多(附件同样端到端加密,服务端只见密文)。紧急访问(Bitwarden的Emergency Access功能):指定一位家人为紧急联系人,设置等待期(比如7天)——你发起授权后对方7天内无拒绝则自动获得你保险库的访问权;场景很沉重但很现实:万一发生了什么,家人能拿到你的密码库处理身后事——密码管理器管的不只是日常便利,还有"数据的最终去向"。另外还有密码健康报告(弱密码、重复密码、泄露库命中检查——把全库扫一遍,红色的条目挨个换掉,这是把多年欠的密码债一次还清的过程)和Send功能(加密的临时文本/文件分享链接,过期即焚——给同事发个密码不再用微信明文)。

七、安全加固:保险箱自己的四道锁

密码管理器是"全部鸡蛋的篮子",它自身的加固不能含糊——清单化,逐条过。第一道,主密码强度(第五节讲透了,20位以上或长词组,唯一不复用)。第二道,传输与入口:HTTPS强制(HTTP请求301到HTTPS)、HSTS头开启(Nginx加一行`add_header Strict-Transport-Security`,防首次访问被劫持降级)、管理面板ADMIN_TOKEN必设强随机(`/admin`路径是Vaultwarden的管理后门,默认关闭,要开就设强token,并且ufw层面限制访问来源——1Panel篇讲过的IP白名单思路)。第三道,注册与账号:自己注册完立刻关SIGNUPS_ALLOWED;开启邮件验证(配好SMTP——Postfix篇搭的发信服务正好用上,注册需要邮箱验证码,挡住脚本批量注册);自己账号开两步验证(登录Vaultwarden网页端本身也加TOTP——保险箱门上加第二把锁,客户端APP会记住设备,不会每次都烦你)。第四道,监控与备份:哪吒探针盯服务在线(哪吒篇)、restic每日备份/data目录(备份篇)——这里有个看似矛盾的问题:密码库的备份会不会成为新的风险点?答案是不会,因为备份的也是密文——restic仓库(MinIO篇的对象存储)里躺着的备份,没有主密码同样解不开——零知识模型的好处在这里闭环了:你可以放心把密文备份到任何地方,异地、云上、U盘,越多副本越安全,只要主密码在你脑子里。四道锁上齐,你的密码库的安全水位就超过了绝大多数商业云方案——毕竟它的攻击面只有你自己知道的那台小鸡。

八、资源账与信任账:自建的边界在哪

资源账简单到不像话:Vaultwarden内存占用30-50MB(Rust的胜利),SQLite单文件,全量数据按KB计——它是自托管清单里资源成本最低、使用频率最高的服务,没有之一;512M小鸡跑它绰绰有余,甚至可以和别的服务挤一台机器。真正的账是信任账:自建密码库,你信任的是"自己的运维水平"——小鸡挂了(机器故障、商家跑路——heyunidc那篇预警还挂在本站首页),全家的密码填充就断了,虽然密文备份都在,但恢复服务需要你动手;商业云信任的是"公司的安全水平和商业信誉"——LastPass的泄露已经示范过翻车姿势。自建派的底气来自两件事:其一,零知识加密让"服务器丢失"只等于"服务不可用",而不等于"数据泄露"——密文备份在手,换台机器十分钟恢复服务;其二,备份纪律让"单点故障"不等于"永久丢失"——/data目录的restic快照每天进MinIO,3-2-1在密码场景一步不缺。所以自建密码库的正确姿势是"服务可失去,数据不可失去":服务挂了能重建,主密码在脑子里,密文备份在异地仓库——这个结构下,你的密码主权才算真正落袋。最后一个诚实的边界提示:密码管理器管的是"密码"这一种凭据,不是安全的一切——钓鱼网站照样骗你主动输入密码(Bitwarden的域名匹配能挡一部分:填充建议只在正确的域名下亮起,这一点比浏览器自带记住密码安全一档)、中毒设备照样看明文——工具之外,浏览器习惯和设备卫生依然是必修课。

结语

从SSH密钥到fail2ban,本站的安全教程都在"加固门锁"——这篇补上了最后一块:把所有钥匙放进一个只有你能打开的盒子。Vaultwarden是这个清单里投产比最夸张的服务:50MB内存换全家人的密码卫生——每个网站独立强密码、泄露库预警、验证码一体化、证件附件加密归档、紧急访问安排身后事。部署只要半小时,但它的回报按十年计:从此密码这件事从"日复一日的弱口令赌博"变成"一次性的迁移作业"。今晚就开工:小鸡上拉起容器,注册账号,把最常用的十个网站密码迁进去换掉,浏览器扩展装上用一周——等哪天你在新设备上三秒填充了那个26位随机密码时,你会想起这篇文章,然后庆幸自己动手了。密码是数字身份的地基,这地基,该浇在自己家的院子里。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

视频会员开了一个又一个?Jellyfin自建影音库实战:电影剧集一屏聚合,刮削海报、续播记录、多端同步全都有

搜索记录全在别人手里?SearXNG自建聚合搜索引擎实战:Google、Bing一锅端,查什么都留不下痕迹

评 论
更换验证码