技术笔记

NAS 自建密码库:Vaultwarden 部署与安全配置

yaobingbin yaobingbin · · 约 7 分钟 · 0 条评论

Vaultwarden 是什么

Vaultwarden 是 Bitwarden 服务端的一个第三方开源实现,用 Rust 重写。它完全兼容官方 Bitwarden 客户端——你用官方的浏览器扩展、手机 App、桌面端,都能连接自托管的 Vaultwarden 服务。

与官方 Bitwarden 自托管版的区别:

对比项 Vaultwarden 官方 Bitwarden
资源占用 极低(几十 MB 内存) 高(Java + .NET + MSSQL,几 GB)
部署难度 一个容器搞定 需要多个容器和数据库
功能完整度 覆盖付费功能(部分需配置) 官方完整
官方支持 社区维护 官方

对个人和家庭来说,Vaultwarden 是明显更务实的选择。 官方自托管版的资源需求对家用 NAS 来说过于沉重,而 Vaultwarden 用极小的代价提供了几乎相同的功能。

需要注意的是它是社区项目,不是官方产品。安全敏感的用户应该评估这一点——但它的代码是开源的,社区活跃度也很高。

部署

单个容器即可运行:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      - DOMAIN=https://vault.example.com
      - SIGNUPS_ALLOWED=true      # 注册账号后要改成 false
    volumes:
      - ./vw-data:/data
    ports:
      - 3012:80

几个关键配置:

/data 目录必须持久化。 所有数据(数据库、附件、密钥)都在这个目录里。容器重建时目录丢了,密码库就没了。

DOMAIN 要填实际访问地址。 这个变量会影响部分功能的链接生成,填错会导致客户端登录异常。

端口:容器内监听 80,通常映射到宿主机的 3012 或其他非冲突端口,再通过反代暴露。

必须上 HTTPS

这是硬性要求,不是建议。 Bitwarden 客户端在连接非 HTTPS 的服务端时会直接拒绝工作(部分客户端甚至不给你提示,只是连不上)。

原因很直接:密码库是最高敏感度的数据,明文 HTTP 传输等于把主密码和所有密码送给中间人。

配置 HTTPS 的方式:

  • 反向代理 + Let’s Encrypt(Caddy 或 Nginx Proxy Manager)——最常用
  • Tailscale——如果不打算公网访问,用 Tailscale 组网后在局域网内通过 HTTPS 访问也行,但同样要配置证书
  • 自签证书——客户端通常不认,不推荐

部署后必须做的三件事

一、关闭公开注册

这是最重要的一步。 容器启动后先注册你自己的账号,然后立刻把 SIGNUPS_ALLOWED 改成 false 并重启容器。

原因:Vaultwarden 默认允许任何人注册。如果你的服务暴露在公网上而没关注册,互联网上的扫描器会找到它,然后任何人都能在上面开账号——虽然他们看不到你的数据,但你的 NAS 变成了一个免费的公开服务,还可能被滥用。

SIGNUPS_ALLOWED=false

日后需要新增账号(家人)时,可以临时改成 true,注册完再关掉。

二、配置管理员面板

Vaultwarden 有一个管理后台(访问 /admin),可以查看用户、删除账号、配置 SMTP 等。它默认不启用,需要一个 token:

# 生成一个 argon2 哈希作为 ADMIN_TOKEN
# 可以用容器自带的 hash 命令,或在线工具
docker exec -it vaultwarden /vaultwarden hash

把生成的哈希设为 ADMIN_TOKEN 环境变量。不要使用明文密码作为 token——管理面板的入口防护依赖这个值的强度。

三、配置 SMTP

密码库涉及账号安全,邮件通知(新设备登录提醒、邮箱验证、紧急联系人)需要 SMTP。

      - SMTP_HOST=smtp.example.com
      - SMTP_PORT=587
      - SMTP_SECURITY=starttls
      - SMTP_USERNAME=your@email.com
      - SMTP_PASSWORD=app_password
      - SMTP_FROM=noreply@example.com

注意用邮件服务商的应用专用密码,不要用邮箱登录密码。

备份:该备什么

Vaultwarden 的数据全在 /data 目录里,关键文件:

文件 内容
db.sqlite3 主数据库(密码条目、用户信息)
attachments/ 附件(如果你存了文件)
sends/ Send 功能的文件
rsa_key.* 密钥对
config.json 管理面板配置

简单的备份方式是把整个 /data 目录打包。它体积通常不大(几十 MB 到几 GB,取决于附件数量)。

更稳妥的做法是用官方推荐的数据库导出:Vaultwarden 支持通过 sqlite3 的备份命令或管理面板导出,能在数据库处于使用状态时获得一致性快照。

备份频率与存放:

  • 建议每周至少一次
  • 备份要加密,因为里面全是密码
  • 至少一份异地(云盘、另一台设备)
  • 定期验证恢复流程——备份不能恢复等于没备份

一个重要的补充:密码库的备份不是唯一的安全网。强烈建议定期导出一份 Bitwarden 的明文/JSON 备份,加密后离线保存(比如 U 盘)。万一 Vaultwarden 实例彻底损坏而你又忘了主密码,这份导出是最后的救命稻草。

安全加固清单

按重要性排序:

1. 关闭公开注册 — 必做 2. 启用 HTTPS — 必做 3. 设置强主密码 — 主密码的强度决定一切,建议 20 位以上 4. 开启双因素认证 — 支持 TOTP,在账号设置里开启 5. 不要公网裸奔 — 优先用 Tailscale,其次反代 + 认证,最次才是直接暴露 6. 配置失败登录限制 — 可以设置 LOGIN_RATELIMIT_* 参数防止爆破 7. 定期更新镜像 — 安全补丁在社区项目里同样重要 8. 监控日志 — 留意异常的登录尝试

一个现实的风险提示

自建密码库最大的风险不是被黑,而是你自己把服务搞挂了或备份失效了。

商业密码管理器(1Password、Bitwarden 官方)卖的核心价值不是加密技术,而是”永远能访问你的密码”这个可用性承诺。自建意味着你要自己承担可用性——NAS 硬盘坏了、容器起不来、证书过期、忘记续费域名,任何一种情况都会让你在需要密码时打不开密码库。

降低这个风险的办法:

  • 保证有一份离线的、加密的密码导出文件
  • 关键账号(邮箱、域名注册商、NAS 本身)的密码不要只存在密码库里,用纸质或其他方式另行保存
  • 定期检查服务是否正常工作,不要等到需要时才打开

自建密码库适合有运维习惯的人。如果你连 NAS 都很少维护,用商业服务可能是更负责任的选择。

微信搜一搜 纳思Note
评论经后台审核通过后显示 · 请勿发布广告、外链或无关内容

发表评论

邮箱地址不会被公开。填写昵称与邮箱后方可评论。