AI时代,每个人都该有自己的小金库——手把手教你搭建专属密码管理器

AI时代,每个人都该有自己的小金库——手把手教你搭建专属密码管理器

你有没有过这种经历?

某个网站要登录,试了三遍密码都不对,最后点了”忘记密码”,发现新密码要求”包含大小写字母、数字和特殊字符,长度不少于12位”——然后你设完转头又忘了。

或者更惨的:多个网站用同一个密码,其中一个被拖库了,其他账号也跟着遭殃。

如果你觉得”我的账号不值钱,没人会黑我”,那我告诉你一个事实:AI时代,自动化攻击的成本已经低到几乎为零。过去黑客要花时间研究你的密码,现在一个脚本可以每秒尝试几百万次组合。你的”不值钱”的账号,只是他们批量扫库的其中一行数据而已。

今天这篇文章,教你用不到30分钟,搭建一个属于自己的密码管理器——你的数字小金库。


为什么是”自己的”?Bitwarden 和 Vaultwarden 是什么关系?

市面上密码管理器很多:1Password、LastPass、iCloud钥匙串……但它们有一个共同的问题:你的密码存在别人的服务器上

2022年 LastPass 被黑,用户加密的密码库被窃取。2023年这些数据开始被暴力破解,很多人的加密货币被盗。把最重要的钥匙交给别人保管,终究不踏实。

Bitwarden 是目前最受欢迎的开源密码管理器,免费、跨平台、功能强大。但它的免费版有一些限制,而且数据仍然存在 Bitwarden 的服务器上。

Vaultwarden 是 Bitwarden 的第三方开源兼容实现——你可以理解为”民间版Bitwarden”。它完全兼容 Bitwarden 的所有客户端(浏览器插件、手机App、桌面App),但你可以把数据存在自己的服务器上

打个比方:

  • Bitwarden = 银行保险箱(好用,但钥匙在银行手里)
  • Vaultwarden = 家里的保险箱(钥匙在你手里,安全性你自己负责)
  • 选择 Vaultwarden 的理由:

  • 🔐 数据完全在自己手里,不依赖任何第三方
  • 💰 完全免费,没有付费功能限制
  • 📱 兼容 Bitwarden 全平台客户端
  • 🐳 Docker 一键部署,维护简单
  • 🔧 开源透明,代码经得起审查

  • 准备工作

    在开始之前,你需要准备:

    硬件要求:

  • 一台云服务器(最低配置就够,1核1G即可)
  • 或者家里的NAS、树莓派也行
  • 软件要求:

  • 已安装 Docker 和 Docker Compose
  • 一个域名(用于HTTPS访问)
  • 一个邮箱(用于申请SSL证书和SMTP通知)
  • 我用的环境:

  • Ubuntu 24.04 LTS
  • Docker 24.0.2
  • Docker Compose v2.18.1
  • Apache 作为反向代理

  • 第一步:部署 Vaultwarden Docker 容器

    Vaultwarden 是一个 Docker 镜像,部署非常简单。

    创建数据目录:

    
    sudo mkdir -p /opt/vaultwarden/data
    

    启动容器:

    
    sudo docker run -d 
      --name vaultwarden 
      --restart unless-stopped 
      -e DOMAIN=https://vault.你的域名.com 
      -e SIGNUPS_ALLOWED=false 
      -e ADMIN_TOKEN='你的Argon2哈希Token' 
      -e WEBSOCKET_ENABLED=true 
      -e LOG_FILE=/data/vaultwarden.log 
      -e LOG_LEVEL=warn 
      -e EXTENDED_LOGGING=true 
      -v /opt/vaultwarden/data:/data 
      -p 8080:80 
      vaultwarden/server:latest
    

    参数说明:

  • `DOMAIN`:你的域名,必须是HTTPS
  • `SIGNUPS_ALLOWED=false`:关闭公开注册(安全起见)
  • `ADMIN_TOKEN`:管理员后台的登录Token,后面会讲怎么生成
  • `WEBSOCKET_ENABLED`:启用WebSocket推送通知
  • `-p 8080:80`:容器端口80映射到主机端口8080
  • 验证容器运行:

    
    sudo docker ps --filter name=vaultwarden
    curl -s http://localhost:8080 | head -5
    

    ⚠️ 如果 Docker Hub 拉取镜像超时,可以使用国内镜像源:

    “`bash

    sudo docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vaultwarden/server:latest

    sudo docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vaultwarden/server:latest vaultwarden/server:latest

    “`


    第二步:配置 DNS 和域名

    在你的域名服务商(阿里云、腾讯云、Cloudflare等)添加一条 A 记录:

    主机记录 记录类型 记录值
    vault A 你的服务器IP

    验证 DNS 是否生效:

    
    dig +short vault.你的域名.com
    # 应该返回你的服务器IP
    

    第三步:配置 Apache 反向代理 + HTTPS

    启用必要的 Apache 模块:

    
    sudo a2enmod proxy proxy_http proxy_wstunnel rewrite ssl headers
    sudo systemctl restart apache2
    

    创建 HTTP 配置(用于 certbot 验证):

    
    sudo tee /etc/apache2/sites-available/vaultwarden.conf << 'EOF'
    <VirtualHost *:80>
        ServerName vault.你的域名.com
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/vaultwarden-error.log
        CustomLog ${APACHE_LOG_DIR}/vaultwarden-access.log combined
    </VirtualHost>
    EOF
    
    sudo a2ensite vaultwarden.conf
    sudo systemctl restart apache2
    

    申请 Let’s Encrypt SSL 证书:

    
    sudo certbot --apache 
      -d vault.你的域名.com 
      --non-interactive 
      --agree-tos 
      --email your@email.com 
      --redirect
    

    配置完整的 HTTPS 反向代理:

    
    sudo tee /etc/apache2/sites-available/vaultwarden-le-ssl.conf << 'EOF'
    <IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName vault.你的域名.com
        
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/vault.你的域名.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/vault.你的域名.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
        
        Header always set X-Frame-Options SAMEORIGIN
        Header always set X-Content-Type-Options nosniff
        
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
        
        RewriteEngine On
        RewriteCond %{HTTP:Upgrade} =websocket [NC]
        RewriteRule /notifications/hub ws://127.0.0.1:3012/ [P,L]
        
        ErrorLog ${APACHE_LOG_DIR}/vaultwarden-error.log
        CustomLog ${APACHE_LOG_DIR}/vaultwarden-access.log combined
    </VirtualHost>
    </IfModule>
    EOF
    
    sudo apache2ctl configtest
    sudo systemctl restart apache2
    

    验证 HTTPS 访问:

    
    curl -sI https://vault.你的域名.com | head -3
    # 应该返回 HTTP/1.1 200 OK
    

    💡 Let’s Encrypt 证书有效期90天,certbot 会自动续期。可以用 `sudo certbot renew –dry-run` 测试续期是否正常。


    第四步:生成安全的管理员 Token

    Vaultwarden 的管理员后台需要一个 Token 来登录。为了安全,我们使用 Argon2 哈希。

    安装 argon2 工具:

    
    sudo apt-get install -y argon2
    

    生成随机 Token 和 Argon2 哈希:

    
    # 生成随机Token
    NEW_TOKEN=$(openssl rand -base64 32)
    echo "你的Token(请保存好): $NEW_TOKEN"
    
    # 生成Argon2哈希
    HASH=$(echo -n "$NEW_TOKEN" | 
      argon2 "$(openssl rand -base64 16)" 
      -id -m 16 -t 3 -p 4 -e)
    echo "Argon2哈希: $HASH"
    

    把哈希值填入容器的 ADMIN_TOKEN 环境变量中(单引号包裹,防止 $ 被转义)。


    第五步:配置 SMTP 邮件服务

    配置 SMTP 后,Vaultwarden 可以发送:

  • 邮箱验证邮件
  • 两步验证码
  • 紧急访问通知
  • 以 QQ 邮箱为例:

    配置项
    SMTP服务器 smtp.qq.com
    端口 465
    加密方式 SSL/TLS
    用户名 你的QQ邮箱
    密码 QQ邮箱SMTP授权码(不是QQ密码)

    获取 QQ 邮箱授权码:

  • 登录 mail.qq.com
  • 设置 → 账户
  • 找到「POP3/SMTP/IMAP服务」
  • 开启「POP3/SMTP服务」
  • 按提示发短信验证
  • 获取16位授权码
  • 在容器环境变量中添加:

    
    -e SMTP_HOST=smtp.qq.com 
    -e SMTP_FROM=你的邮箱@qq.com 
    -e SMTP_FROM_NAME=Vaultwarden 
    -e SMTP_PORT=465 
    -e SMTP_SECURITY=force_tls 
    -e SMTP_USERNAME=你的邮箱@qq.com 
    -e SMTP_PASSWORD=你的16位授权码 
    

    第六步:开启两步验证(2FA)

    强烈建议开启! 密码再强也不如多一层验证。

    推荐使用 TOTP 验证器(最安全):

  • 下载 Google Authenticator 或 Authy
  • 登录 Vaultwarden → Settings → Security → Two-step login
  • 选择 Authenticator app → Manage
  • 扫描二维码 → 输入验证码 → 启用
  • 一定要保存恢复代码!
  • 也可以用邮箱验证(方便但安全性稍低):

  • Settings → Security → Two-step login → Email
  • 输入邮箱 → 发送验证码 → 启用

  • 日常管理命令

    
    # 查看容器状态
    sudo docker ps --filter name=vaultwarden
    
    # 查看日志
    sudo docker logs vaultwarden --tail 50
    
    # 重启容器
    sudo docker restart vaultwarden
    
    # 备份数据(建议定期备份)
    sudo tar -czf vaultwarden-backup-$(date +%Y%m%d).tar.gz 
      /opt/vaultwarden/data
    
    # 更新版本
    sudo docker pull vaultwarden/server:latest
    sudo docker stop vaultwarden && sudo docker rm vaultwarden
    # 然后重新运行 docker run 命令
    

    常见问题

    Q:无法访问网站?

    
    sudo docker ps --filter name=vaultwarden
    sudo ss -tlnp | grep -E ':(80|443|8080) '
    dig +short vault.你的域名.com
    

    Q:邮件发送失败?

  • 确认授权码正确(不是邮箱密码)
  • 确认已开启 POP3/SMTP 服务
  • 检查端口465是否被防火墙拦截
  • Q:忘了管理员Token?

    重新生成一个,更新容器环境变量即可,数据不会丢失。


    总结

    部署清单:

  • ✅ Docker 容器部署
  • ✅ DNS 域名解析
  • ✅ Apache 反向代理
  • ✅ HTTPS 证书(自动续期)
  • ✅ Argon2 安全哈希
  • ✅ SMTP 邮件服务
  • ✅ 两步验证
  • 整个过程不到30分钟,你就拥有了一个完全由自己掌控的密码管理器

    在 AI 时代,安全意识比以往任何时候都重要。不要等到账号被盗才后悔——现在就开始,建好你的数字小金库。

    评论

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注