1. Current Location: Home >  NAS >  全家密码靠一个本子记?我在NAS上自建Vaultwarden密码库,账号都攥在自己手里

全家密码靠一个本子记?我在NAS上自建Vaultwarden密码库,账号都攥在自己手里

NAS自建Vaultwarden密码库:部署三要素、HTTPS坑、data目录备份与三条红线

我家抽屉里有个绿皮本子,记密码记到第三本了。最早一本是我爸的字,路由器后台、燃气缴费、视频会员,一人一页。后来本子传到我妈手里,她记密码的路子更野:同一个生日变着花样用,wjh1985、wjh@1985、1985wjh,网站要特殊字符就加个感叹号。

上上个月给我妈清理老电脑,把她浏览器里躺了七年的37条密码清了个干净,这事专门写过一篇。清完问题跟着来了:密码总得有个地方放。让她们娘俩背16位随机密码是不现实的,继续往本子上记,我夜里睡不着。最后我把主意打到了家里那台飞牛NAS身上——装个Vaultwarden,全家的密码搬进自己家的机器里。

Vaultwarden是什么:Bitwarden的自建版服务端

先把名字掰清楚。Bitwarden是国外一家开源密码管理器,客户端做得很规矩:浏览器插件、手机App、网页保险库都有,基础功能免费。你的密码加密后存在它的云服务器上,它家口碑不差,但密码这东西,再靠谱的云也不如自己手里那台NAS踏实。

Vaultwarden就是干这个的:一个用Rust写的、兼容Bitwarden协议的轻量服务端。说人话——客户端还用Bitwarden官方的App和插件,服务端换成你自己NAS上跑的一个小容器。对客户端来说,它以为自己连的还是Bitwarden,实际上数据一步都没出门,全落在你家NAS的硬盘里。

这玩意儿轻到什么程度?官方镜像跑起来,日常内存占用几十MB,比我那个Navidrome音乐容器还省。我家N100小主机上已经跑了六个容器,塞进去这个第七个,top里看一眼连个水花都没有。顺便说一句,官方云版的免费档,密码共享能拉的人头卡得很紧,家里三口人都凑不齐;自建的没这个限制,这也是我选自己搭的一个原因。

部署半小时:一个容器一个目录

Docker装过东西的话,这个属于最简单的一档。镜像搜vaultwarden/server,关键参数就三样:端口映射(容器内是80,映射到NAS上挑个不冲突的,比如8222)、目录挂载(/data必须映射出来,别的都可以丢,这个不能丢)、重启策略选always。端口映射和目录挂载是什么关系,Docker入门那篇和讲bridge网络那篇里写过,这里不重复。

起来之后,浏览器敲NAS的IP加端口,能看到Bitwarden风格的网页保险库,先注册自己的账号。注意第一件事:进容器设置里加一个环境变量DOMAIN,值填你打算访问它用的地址。这个变量不影响登录,但它管着网页里生成的邀请链接和附件下载地址,不设的话后面共享组织的时候链接会指错路。

所有家当都在挂载出来的那个/data目录里:db.sqlite3一个文件装着全部密码记录,attachments文件夹放附件,还有一对rsa_key文件。这意味着两件事:备份就是备份这一个目录;搬家就是把这个目录拷走。没有玄学。

最大的坑:客户端只认HTTPS

装完兴冲冲去配浏览器插件,在插件设置里打开「自托管」,服务器URL填http://192.168.31.10:8222,点登录——报错,连不上。容器明明活着,网页明明开得欢。

这不是坏了,是浏览器插件强制要求HTTPS。插件里加密用的那套接口,浏览器只肯在安全上下文里给,http的页面摸不着。这是安全设计,不是Bug,http和https的区别那篇里讲过传输加密是怎么回事,密码库这种地方,浏览器替你把门焊死了反而省心。

给内网服务上HTTPS,两条路。有自己域名的,走NAS自带的反向代理:群晖在控制面板→登录门户→高级→反向代理里建规则,来源选HTTPS加域名,目的地指到本机的8222,证书用Let's Encrypt签一张绑上去,顺手在自定义头里把WebSocket的两个 Upgrade 头加上(插件实时同步靠它)。新版的Vaultwarden已经把WebSocket并进主端口了,不用像老教程那样单独再开一个3012,照着两三年前的教程抄会抄出一堆用不上的配置。

没域名的,给容器挂自签证书也行,环境变量SSL_CERT_PATH和SSL_KEY_PATH指过去。代价是每台要用插件的设备都得先信任这张证书一次:电脑双击装进信任存储,手机也一样。三台设备就是三趟。我家的做法是前者——反正域名是现成的,路由器DNS里把这个域名解析到内网IP,证书正规,设备零配置,出门也用同一个地址,省心。

全家人怎么用:一人一个账号,共享密码走组织

家里人别共用一个账号。Bitwarden的设计是一人一库,每个人的密码进自己的保险库,主密码各自保密。我妈的库她自己也打不开才有意义——都挂在我名下,那不叫密码库,叫户口本。

全家共用的那部分密码,比如WiFi密码、视频会员、宽带账号,走「组织」功能。建一个家庭组织,把共享条目放进组织的集合里,再发邮件邀请家里人加入。各人的库里多出一个「家庭」分组,里面的条目大家都能看,改一处全家同步。我给我妈单独建了个「爸妈」集合,把她那9条还活着的密码挨个迁进去,顺便全部换成生成的16位随机密码——她要做的只是记住一个主密码。

客户端这边,家里电脑装浏览器插件,登录时选自托管填自己地址;手机装Bitwarden官方App,同样在设置里指到自己家。之后的使用体感跟Chrome存密码差不多:网页上账号密码框一出现,图标一点自动填。区别是它跨浏览器、跨设备,我妈那台老电脑的Edge和我爸手机上的浏览器,填的是同一个库。

主密码忘了真没救:这跟别的账号不一样

用之前必须想明白一件事:Vaultwarden没有「忘记密码」这个功能。你的库是用主密码加密的,服务端只存密文,零知识架构——服务器不知道你的主密码,自然也没法帮你重置。主密码一丢,库里所有密码变成一堆谁也解不开的乱码,神仙来了都没用。

所以主密码是全场唯一一个你需要真正记住的密码。别用生日,别用跟别的网站重复的,但也不用搞到32位——四五个词连成一句口语密码,长度够、好记、抗暴力破解。我妈的主密码是她的口头禅加一个年份,她自己记得牢,我就当没看见。

怕人真忘了的,Vaultwarden有个「应急访问」功能:指定一个信任的人(比如我把媳妇设成我的紧急联系人),设一个等待期,七天也行三十天也行。真到了那边发起申请、等待期满你没拒绝,对方就能接管你的库。家里老人用,这个功能值得配一下。另外网页保险库里有导出功能,能导出加密的JSON文件,打印一份主密码提示和导出文件存放位置,锁进实体柜——云端没有找回,纸质的反而最抗时间。

备份和三条红线:data目录就是整个保险箱

密码库成了全家的命根子,备份就不能含糊。好消息是它结构简单,就是/data一个目录。坏消息是db.sqlite3是个正在被写的数据库文件,容器跑着的时候直接复制,有小概率拷到写了一半的状态。开SSH进去用sqlite3的.backup命令导一份安全的副本,再打包整个/data目录,扔进NAS自己的备份任务里,按3-2-1的原则留一份到NAS以外的地方。我的做法是每天凌晨自动导一份到冷备盘,反正一个SQLite文件撑死几MB,不心疼空间。

最后三条红线,是我在配置过程中给自己立的规矩,也建议你照抄:

红线为什么怎么做
不把密码库端口转发到公网密码库是全网扫描器最爱的目标,撞库脚本天天上门出门要用就走VPN回家,一条隧道的事
不开管理面板/admin能改用户改配置,等于保险箱后门不设ADMIN_TOKEN它就是关的,保持这样
主密码不进任何自动填充主密码一旦被别的网站泄露连带全库只存在于脑子里和那张纸质提示上

出门在外要查密码,手机App配上就行——要么走VPN回家,要么像我这样FN Connect连回内网。反正密码库这东西,访问频次没那么高,慢半秒无所谓,稳最重要。

收尾给个对号表:

你的情况建议
嫌折腾,密码也不多直接用Bitwarden官方免费云版,客户端体验一样,零部署
有NAS,密码全在家用自建Vaultwarden,data目录进每日备份,一步到位
家里多人共用一堆会员账号自建+家庭组织,共享条目集中管,谁改了全家同步
老人记不住随机密码一个口语主密码+应急访问设给你,剩下的交给插件自动填

那个绿皮本子我已经收进抽屉最底层了。第三本还没写满,但应该不会有第四本了。

Read More


Copyright Notice Scan to read on mobile
All Rights Reserved: 《SHUNOT》 => 《全家密码靠一个本子记?我在NAS上自建Vaultwarden密码库,账号都攥在自己手里》
Article URL: https://www.shunot.com/en/nas/1244.html
Unless otherwise stated, all articles are original by 《SHUNOT》. Reposting is welcome! Please indicate the original URL when reposting, thank you.

Contact Us

Online Consultation: Click here to send me a message

WeChat ID: master_135

Scan to follow