分享基于 bitwarden 的自建密码管理方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
mrchi
V2EX    分享创造

分享基于 bitwarden 的自建密码管理方案

  •  
  •   mrchi
    mrchi 2021-01-11 23:27:06 +08:00 16777 次点击
    这是一个创建于 1814 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Bitwarden 是一个开源的密码管理器解决方案,拥有多个平台的客户端。它采用的方式是云端数据库、客户端同步和离线使用的模式,类似现在的 1password 。

    我的方案采用 bitwarden_rs + HTTPS + Fail2Ban + 坚果云备份的方式,可以参考这篇笔记 https://mrchi.cc/posts/88980/

    说一下优点吧:

    • 基于 bitwarden 开源项目,用 ruby 实现的 bitwarden_rs,相比闭源代码,更安全一些,并且支持 docker 部署;
    • HTTPS 保证传输安全,我用的 lets encrypt 自动续签证书;
    • Fail2Ban 保护 bitwarden_rs 服务和 SSH 服务,报错三次即 ban 掉 IP,防止暴力穷举主密码;
    • 根据 bitwarden 的文档,服务端数据是加密后存储的,解密需要用户设置的主密码,即使服务端被攻破,密码不那么容易泄露;
    • 官方开发维护的多平台客户端(包括 Win/Mac/Linux/iOS/Andriod)和常用浏览器扩展,美观和易用性上都有保证;
    • 支持 TOTP 二次认证码保存;
    • 使用坚果云备份(免费额度就够了),不备份也可以,任何一个客户端的数据都可以导出,服务重建后再导入。

    再说一下缺点:

    • 浏览器扩展,每次打开浏览器都要重新输入主密码;
    • 密码生成器,不知道为什么,生成的密码比 1password 看着丑了很多,会有重复字符;
    • 浏览器里对域名的匹配不够智能;

    以上,笔记就是随手记了一下(懒~)欢迎提问。

    第 1 条附言    2021-01-12 12:58:11 +08:00
    更正,bitwarden_rs 是 rust 实现的,不是 ruby,多谢楼下几位提醒。
    51 条回复    2023-08-09 17:54:53 +08:00
    fivestrong
        1
    fivestrong  
       2021-01-11 23:28:38 +08:00 via iPhone   2
    ruby 实现的 bitwarden_rs ?
    neteroster
        2
    neteroster  
       2021-01-11 23:35:30 +08:00 via Android   2
    也分享一下我的:
    0. 服务端 bitwarden_rs (docker)。
    1. 备份 rclone + OneDrive 每日自动备份密码数据库。
    2. HTTPs: caddy2 自动 Let's Encrypt + 反代 docker 内 bitwarden 服务。

    优势:部署简单快速,稳定性还不错。
    oott123
        3
    oott123  
       2021-01-12 00:16:04 +08:00 via Android
    浏览器扩展有 PIN 码可以设置
    域名的匹配可以在保存的时候选择匹配规则
    UUZ
        4
    UUZ  
       2021-01-12 00:18:44 +08:00 via Android
    懒得输入密码可以用 PIN

    没弄 f2b,只是把实例用 ngx 代理到一个复杂的子目录,主机名用一个奇怪的域名。
    UUZ
        5
    UUZ  
       2021-01-12 00:21:46 +08:00 via Android   3
    主密码 64 位,弄成二维码打印出来。放书柜里,平时用 pin
    Tink
        6
    Tink  
    PRO
       2021-01-12 00:28:42 +08:00 via Android
    ruby ???
    fantasticliyin
        7
    fantasticliyin  
       2021-01-12 00:48:26 +08:00
    bitwarden_rs 是基于 rust 实现的。。。
    yyfearth
        8
    yyfearth  
       2021-01-12 04:02:51 +08:00
    我觉得可能 lz 打错了 rust 成 ruby 了
    wd
        9
    wd  
       2021-01-12 06:45:55 +08:00 via iPhone
    二次认证不要和密码放一个地方
    ferock
        10
    ferock  
    PRO
       2021-01-12 07:00:39 +08:00 via iPhone
    下载了数据库的 sqlite 看了一下,大部分字段其实没有加密,虽然我自己也在用,但是搜索效果和加密性,比起 keepass 还是差了一点。好处是浏览器插件,和手机自动填充方便
    NeoChen
        11
    NeoChen  
       2021-01-12 07:22:43 +08:00 via iPhone   1
    用过 3 年 keepass,6 个月 1p,1 个月 bitwarden,2 年 enpass 。当前用 enpass,不折腾。keepass,免费,强大,灵活,但是 ios 端的支持至少 2 年前实在不行,导致我的密码库文件出现很多问题。最终转移 enpass 阵营,各端统一,各个网站的识别及自动填充都比较优秀。
    iphoneXr
        12
    iphoneXr  
       2021-01-12 07:45:45 +08:00 via iPhone   1
    先回答下你的缺点,或许对楼主有帮助:
    1 、浏览器插件可以设置,不用每次重启输入主密码,安全与否自己决定
    3 、对于域名的匹配我选的主机域,默认的不太好
    iphoneXr
        13
    iphoneXr  
       2021-01-12 07:47:06 +08:00 via iPhone
    再来说说我的方案是 proxmox 虚拟机备份,3+2+1 策略。nginx 基于 geoip 深圳能反正就行了。
    Biggoldfish
        14
    Biggoldfish  
       2021-01-12 07:48:12 +08:00   2
    浏览器扩展每次要输入密码这点在这个 PR merge 后应该很快能支持用 Windows Hello/Touch ID 登录了
    https://github.com/bitwarden/desktop/pull/566
    xiaoz
        15
    xiaoz  
       2021-01-12 08:29:40 +08:00 via Android
    楼主用的 MySQL 还是 SQLite ?
    v2lhr
        16
    v2lhr  
       2021-01-12 09:10:56 +08:00
    自建每年大概花费多少钱呢
    Clash
        17
    Clash  
       2021-01-12 09:27:13 +08:00
    没有跨平台需求,随便用
    mrchi
        18
    mrchi  
    OP
       2021-01-12 12:57:32 +08:00
    @fivestrong
    @Tink
    @fantasticliyin
    @yyfearth
    sorry,当时可能不太清醒
    mrchi
        19
    mrchi  
    OP
       2021-01-12 13:00:33 +08:00
    @UUZ
    @oott123
    多谢多谢,我试试 PIN 码
    mrchi
        20
    mrchi  
    OP
       2021-01-12 13:03:05 +08:00
    @ferock
    @NeoChen
    我也用过一段时间的 keepass,在 mac 和 Linux 下的体验都感觉不太好,而且同步也比较麻烦。enpass 也用过一段时间,后来感觉开源的会更好一些
    mrchi
        21
    mrchi  
    OP
       2021-01-12 13:04:28 +08:00
    @wd 你说的有道理,但是也可能是觉得现在的实现足够安全吧,为了能同步和自动填充,我还是放一起了。
    mrchi
        22
    mrchi  
    OP
       2021-01-12 13:05:31 +08:00
    @xiaoz 用的默认的,应该是 SQLite
    mrchi
        23
    mrchi  
    OP
       2021-01-12 13:10:01 +08:00
    @v2lhr 费用就只有主机和域名的花销,HTTPS 证书免费,bitwarden 客户端免费,bitwarden_rs 开源不收费,坚果云使用的免费额度。

    主机是国外的 vps,大概 30 刀;域名之前趁着 cc 域名便宜买了 10 年的,大概平均每年几块钱。总花费不到 220 RMB 。

    如果自建麻烦也可以使用 bitwarden 的官方服务(相当于公有云)。
    NeoChen
        24
    NeoChen  
       2021-01-12 13:22:19 +08:00
    @mrchi #20 同步不麻烦,就是一个数据库文件而已,存 onedrive 、坚果云都可以。而且有许多客户端,比较好用的 keepassXC 吧,好看点的可以 keeweb,还可以有很多骚操作,比如通过 keepasshttp,让局域网里的其他电脑也能自动填写密码,比较方便的就是开虚拟机的时候就不用再安装一套客户端就可以方便的填密码登录帐号。
    bitwarden 我记得浏览器插件不支持快捷键打开,不知道现在咋样了
    Tink
        25
    Tink  
    PRO
       2021-01-12 14:08:31 +08:00
    sqlite 的话备份应该很方便,同步数据文件就行了吧
    cm2gseh
        26
    cm2gseh  
       2021-01-12 15:56:34 +08:00 via Android
    buttercup+坚果云 的路过看看
    Unclev21x
        27
    Unclev21x  
       2021-01-12 17:50:15 +08:00
    也想弄个同步的,但是觉得学习成本太高了。于是我这样搞的:1. 网银等重要密码写 txt 里面,然后使用 TrueCrypt 生成一个空白的大文件(可以是任何格式,比如 txt,pdf,bin 等等,可以把这个大文件想象成一个 U 盘,里面可以放其他文件),然后把 txt 放里面。然后设置一个打开密码,每次需要用到的时候,必须用 TrueCrypt 加载这个文件,输入密码。2. 非重要密码,直接保存在 chrome/safari 中了,能开启 2 步验证的网站都开启了。

    不便之处:必须使用电脑,还要安装 TrueCrypt 文件。
    安全性:不了解。自我安慰觉得可以。

    我认为的优点:学习成本低。
    toptyloo
        28
    toptyloo  
       2021-01-12 17:53:02 +08:00 via Android
    @Biggoldfish 这个不是桌面 app 么,桌面 app 的话 mac 这边已经可以用 touch is 了,Windows 还没测试。浏览器插件都还没有支持
    bianqurenfm
        29
    bianqurenfm  
       2021-01-12 18:02:30 +08:00
    并不是每次打开浏览器都要重新输入主密码,Bitwarden 有提供记住主密码的功能只是不推荐,提示该操作容易忘记主密码
    mrchi
        30
    mrchi  
    OP
       2021-01-12 19:16:12 +08:00
    @NeoChen 没有快捷键打开,但是可以快捷键填充
    pC0oc4EbCSsJUy4W
        31
    pC0oc4EbCSsJUy4W  
       2021-01-13 03:54:46 +08:00   1
    浏览器扩展,每次打开浏览器都要重新输入主密码;

    可以关闭的

    设置 安全 密码库超时 从不
    CatCode
        32
    CatCode  
       2021-01-13 09:08:36 +08:00
    @Unclev21x 你这个真的不如 Keepass/KeepassXC
    Unclev21x
        33
    Unclev21x  
       2021-01-13 09:33:18 +08:00
    @CatCode 这么多年也将就用下来了
    zyq2280539
        34
    zyq2280539  
       2021-01-13 09:38:00 +08:00
    刚好最近也在弄这个密码管理,不过因为不太习惯用 docker, 参考了海运博客这个 https://www.haiyun.me/archives/1360.html
    ryanlid
        35
    ryanlid  
       2021-01-13 09:53:47 +08:00
    我也用了,用的是 MySQL,备份 MySQL 就好了~
    HankAviator
        36
    HankAviator  
       2021-01-13 20:38:31 +08:00 via Android
    @Unclev21x 很多像你一样的人采用了类似的方案,他们现在应该后悔的无以复加了吧。那些 U 盘 硬盘上面存储了大量比特币私钥的人们,要么是误操作,删掉了磁盘内容,要么是真的想不起来私钥。如果回到 2013 年,问问他们会不会未来有一天想不起来他们设置的密钥或者存储介质损坏,他们都会信誓旦旦的说不可能,而且就算是发生这种事件,也不会损失什么,一如 IT 从业者不可触碰的骄傲。
    但是多个地方备份的话肯定有安全顾虑,去说服使用非自行管理的在线服务,几乎是不可能的。
    数据无价,谨慎拔插
    suibianzai
        37
    suibianzai  
       2021-04-16 14:08:22 +08:00
    -》浏览器扩展,每次打开浏览器都要重新输入主密码;

    这个可以在设置->密码库超时 修改成永久记住密码
    dreamramon
        38
    dreamramon  
       2021-08-17 11:08:49 +08:00
    发现 bitwarden 上传附件也要付费的,感觉买了他那个就和 1password 差不多钱了,lz 没有上传附件嘛?
    mrchi
        39
    mrchi  
    OP
       2021-08-17 14:00:06 +08:00
    @dreamramon 用 bitwarden_rs (现在叫 vaultwarden )自建不需要收钱吧,你是不是用的 bitwarden 的 saas 版本。
    dreamramon
        40
    dreamramon  
       2021-08-17 17:32:46 +08:00
    @mrchi 自建的 secure note 不能上传附件,你试下就知道了。
    mrchi
        41
    mrchi  
    OP
       2021-08-17 21:02:38 +08:00
    @dreamramon 附件是怎么上传的呢?我这看 secure note 只有 text bool hide 三种字段。
    bpf2049
        42
    bpf2049  
       2021-12-25 20:59:11 +08:00
    之前还在担心自建 bitwarden 服务器放出公网的安全性,原来 Fail2Ban 还能这样用,有空搭一个试试
    bpf2049
        43
    bpf2049  
       2021-12-25 21:57:34 +08:00
    bitwarden_rs 自带 vip 功能,附件上传方式:以 win 客户端为例:
    1 、先创建一个项目(密码或者笔记都行)
    2 、点击项目,然后点“编辑”按钮
    3 、在选择文件夹那个框有个 [附件] 按钮
    daisyfloor
        44
    daisyfloor  
       2023-08-09 05:18:25 +08:00
    @neteroster 请教一下:
    1.能备份到 google drive 么?或者说还有哪些备份选项可以选?
    2.docker 部署的 bitwarden 是不是得 -p 127.0.0.1:xxxx:xxxx 以做到不把端口暴露给公网 ip 的访问?

    您的 2. HTTPs: caddy2 自动 Let's Encrypt + 反代 docker 内 bitwarden 服务。 有没有配置笔记教程一类的可以分享,谢谢!(我是小白新手。。。)
    daisyfloor
        45
    daisyfloor  
       2023-08-09 05:25:38 +08:00
    请教楼主:Fail2Ban 保护 bitwarden_rs 服务和 SSH 服务,报错三次即 ban 掉 IP ,防止暴力穷举主密码;

    这个怎么针对具体服务设置保护呢?可以分享下方案么?
    neteroster
        46
    neteroster  
       2023-08-09 07:27:04 +08:00 via Android
    @daisyfloor

    1. 可以的。我的备份是依靠 rclone 这个工具,他所支持的存储服务都能够支持,种类丰富。具体参见这里: https://rclone.org/overview/
    2. 理论上可以,但是我没试过,我是靠防火墙完成这一点的。

    2. 实际上这一步非常简单,caddy 会自动帮你申请 HTTPS 证书(没记错应该你的域名要先解析到主机这一步才能成功)。

    具体参见这里: https://caddyserver.com/docs/quick-starts/reverse-proxy

    一行命令就可以搞定
    daisyfloor
        47
    daisyfloor  
       2023-08-09 07:41:59 +08:00
    SSH 是内置的可以直接启用,Fail2Ban 如何保护 bitwarden_rs 服务呢?
    daisyfloor
        48
    daisyfloor  
       2023-08-09 07:47:07 +08:00
    @neteroster 你用的是 caddy 自签证书还是他帮忙申请的第三方证书? 2 者区别大么?
    neteroster
        49
    neteroster  
       2023-08-09 09:39:11 +08:00 via Android
    @daisyfloor 他自己处理的,应该是自动申请的免费证书。
    其实无所谓,就是加个密而已。甚至你不用 HTTPS
    neteroster
        50
    neteroster  
       2023-08-09 09:40:18 +08:00 via Android
    @neteroster 都可以,因为整个传输过程传输的都是加密的数据。我用 HTTPS 单纯是因为不想浏览器写不安全。
    mrchi
        51
    mrchi  
    OP
       2023-08-09 17:54:53 +08:00
    @daisyfloor https://mrchi.cc/posts/selfhosted-bitwarden/ 可以参考一下这篇,或者 bitwarden_rs (现在叫 vaultwarden 了)的官方 wiki
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     964 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 22:38 PVG 06:38 LAX 14:38 JFK 17:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86