之前使用了两年的 1Password,但是想想花一年百度盘会员的钱只是为了记个密码,简直没有任何性价比可言。而且,1Password 默认将数据保存在它们自己的服务器上,不支持通过 WebDAV 等进行自定义存储位置,这样不够令人放心。

放弃 1Password 后,用了几个月的 Enpass,但是有一个很烦人的小 bug 一直没有得到解决(macOS 下的 mini 窗口不能输入中文),而且界面没有适配 macOS 11 Big Sur。几经周转,最后发现 Bitwarden ,于是我决定试用一段时间。

文章结尾我总结了使用过的几款密码管理软件,不专业也不正式,只是以我个人的喜好进行下对比。

本文介绍使用 docker 配置 bitwarden_rs,没有使用官方的 Bitwarden 是因为官方版本只支持 SQL Server 数据库,对性能要求比较高,而且也不方便在 Linux 平台上部署。

已有环境:

  • CentOS 7
  • 宝塔面板 7.6
  • nginx 1.18

搭建 docker 环境

为了确保安装最新版本,我们从 Docker 官方存储库安装。

安装 docker

首先卸载 docker,此举是避免万一系统中有其他版本的 docker 而引发的兼容性问题。

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

接下来添加 Docker 的官方源,首先需要安装 yum-utils 这个工具:

$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装 docker:

$ sudo yum install docker-ce docker-ce-cli containerd.io

启动 docker:

$ sudo systemctl start docker

至此 docker 安装完成,检查一下是不是安装成功了:

$ sudo systemctl status docker

如果安装成功的话,会显示类似下图的结果:

20210217165728
20210217165728

安装 docker-compose

这部分安装很简单,两条命令就可以搞定:

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose
截止 2021-02-17,docker-compose 的最新版本为 1.28.2,如果你看这篇文章时已经过去了很久,可以查看最新版本的安装方法:Install Docker Compose

安装 bitwarden_rs

实际上 bitwarden_rs 不需要复杂的安装过程,只要 pull 一个 docker 镜像下来并运行就可以了,在此之前我们先准备好 bitwarden_rs 的配置文件。

准备配置文件

假设我们在 Home 目录中存放数据,新建一个目录:

$ cd ~ && mkdir bitwarden && cd bitwarden
$ pwd
# 应当输出 /home/username/bitwarden
# 如果以 root 用户执行命令,则应输出 /root/bitwarden

准备一个配置文件,该文件设置 bitwarden_rs 的一些参数:

cat >> config.env << EOF
SIGNUPS_ALLOWED=true
DOMAIN=https://pass.example.com 
DATABASE_URL=/data/bitwarden.db
ROCKET_WORKERS=2
WEB_VAULT_ENABLED=true
EOF
# https://pass.example.com 这个改成你自己的域名

说明:

  • SIGNUPS_ALLOWED 是否开放用户注册。我们还没有注册第一个用户,所以先打开它;
  • DOMAIN 填入你准备分配给 Bitwarden 服务使用的域名;
  • DATABASE_URL 数据库在容器内的路径。可以不设置,默认位于 /data/db.sqlite3
  • ROCKET_WORKERS 设置服务器使用几个线程。10 是默认值,可以根据机器性能和个人需求适当调整;
  • WEB_VAULT_ENABLED 设置是否开启网页访问。如果开启,可以通过网页来管理密码。因为第一次注册用户需要在网页进行,所以也先打开它。

准备 docker-sompose.yml:

cat >> docker-compose.yml <<EOF
version: '3'

services:
  bitwarden:
    image: bitwardenrs/server:latest
    container_name: bitwarden
    restart: always
    volumes:
      - ./data:/data
    env_file:
      - config.env
    ports:
      - "6666:80"
EOF

说明:

  • volumes 将容器内的 /data 目录挂载到宿主机的当前目录下的 data 目录,这样你可以在宿主机上操作数据库文件(例如备份等);
  • ports 将容器内的 80 端口映射到了宿主机的 6666 端口。

运行 bitwarden_rs

在宝塔中新建一个静态站点,域名添写你准备好的域名,不需要数据库、ftp 等:

20210217171742
20210217171742

配置好 SSL,可以开启“强制HTTPS”:

20210217171947
20210217171947

添加反向代理:

20210217172135
20210217172135

最后启动服务:

$ docker-compose up -d

用户注册和数据导入

启动服务后,访问 https://pass.example.com (替换成你自己的域名),应该可以看到以下界面:

20210217174321
20210217174321

点击“创建账号”进入注册页面:

20210217174248
20210217174248

注册完成后直接登陆,在左侧“工具”菜单中可以进行“导入数据”,支持各种密码管理软件的导出文件。

关闭用户注册,网页访问

关闭网页访问和用户注册功能,在前面生成的 config.env 文件中,调整以下两个参数:

SIGNUPS_ALLOWED=false
WEB_VAULT_ENABLED=false

重启服务使新的配置文件生效:

$ docker-compose down && docker-compose up -d

附:几款密码管理软件的对比

首先我日常使用的设置是一台 Macbook 和一台 Android 手机,所以要求有比较好用的 mac 版、Android 版客户端。

名称加分项减分项
1Password外观好看
功能多、模板全

不支持纯本地存储或 WebDAV
Enpass桌面客户端免费mac 版本没有适配 Big Sur
开发迟缓,解决 bug 慢
MacPass免费、开源
外观好看
支持插件
没有商业支持
比较折腾人