作为一个网安新人,选择使用统一密码还是为每个软件设置独立密码,始终是一个困扰的问题。要记住过多的密码几乎是不现实的,而将密码以书面形式记录又非常不安全。随着账号密码数量的增加,我一直在寻找一种安全、快速、方便的长期保存密码的方法。从手写笔记到手机备忘录,从TXT文档到Word文档,再到自己手动备份和OneDrive自动同步……真是一场挑战!如今,比较流行的方式是使用密码管理工具进行统一管理。这类软件通常提供多平台客户端和浏览器插件,并将密码加密保存到本地或云端。市场上有很多密码管理工具,有人认为1Password是最佳选择,但价格实在太贵,因此我暂时不考虑。在比较其他软件后,我发现它们各有特色。有些倾向于将密码库存储在云端,有些则允许将密码库保存在本地,有的开源,有的是私有化,有的还支持私有化部署。最终,我选择使用Bitwarden来搭建私人密码库。它提供全面的客户端覆盖,支持开源免费版,并且允许私有化部署,完全满足了我对密码库的所有要求。Bitwarden官方提供私有化部署,支持一键部署脚本和手动部署两种方式。然而,由于官方使用的是MSSQL数据库,整体部署对机器配置的要求较高只为一个私人密码库部署这样一个重量级的应用,实在不符合我的习惯(钱包也顶不住)。经过一番查找,我终于在GitHub上发现了一位大佬使用Ruby开发的兼容Bitwarden服务器:bitwarden_rs,并且提供了Docker镜像进行部署。该服务器的系统配置要求很低,Docker镜像体积也小,部署过程非常方便,使用SQLite服务器来存储数据,对于个人用户来说已经足够。最终,我决定使用它作为我的密码库的服务器端。首先,你需要一个域名和一台安装了Docker环境的服务器。可以参考Docker的官方文档来进行Docker的安装。为方便部署和更新,本文将使用docker-compose来管理服务。在Linux下,可以使用以下命令进行docker-compose的安装和更新:sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
mkdir -p /data/bitwarden && cd /data/bitwarden
cat >> docker-compose.yml <<EOF
version: '3'
services:
bitwarden:
image: bitwardenrs/server:latest
container_name: bitwarden
restart: always
volumes:
- /data/docker/bitwarden/data:/data
environment:
WEB_VAULT_ENABLED: 'true'
SIGNUPS_ALLOWED: 'true'
WEBSOCKET_ENABLED: 'true'
LOG_FILE: /data/bitwarden.log
ports:
- 7006:80
- 7007:3012
EOF
location / {
proxy_pass http://127.0.0.1:7006;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:7007;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:7006;
}
现在你的 Bitwarden 服务器允许任何人访问和注册。如果你只是想自己使用,可以通过关闭用户注册功能来保护隐私。请按照以下步骤调整 docker-compose 配置文件:在修改配置后,运行以下命令以删除并重新创建容器,使更改生效。请放心,所有数据都保存在我们在第 4.1 步中创建的目录中,不会丢失。docker-compose down && docker-compose up -d
完成后,用户注册功能将被禁用,Web 访问也会关闭。你仍然可以在客户端中编辑密码数据。