Docker 自建 Bitwarden 密码服务器

/ 36 Comments / 44410 View

2021年5月8日更新

前两年我的复杂密码都是遵循一定的规律,然后简单密码都统一的。有一天在某个论坛上的帐号被盗后,就下定决心全部密码都修改一次,而且随机16~24位大小写字母+符号+数字,最终选择了 1Passwrod 来管理上百个复杂密码,而且在 ios 上体验最佳。

不过因为是和网友一起共享的家庭版,所以管理员可以在不经成员同意的情况下直接删除帐户,导致密码无法找回。还是得另外寻找一个简单易用的。无意间在 v2ex 发现有人推荐一个新的开源密码管理器 Bitwarden。在 GitHub 上有个项目叫做 bitwarden_rs,并且提供了 Docker 镜像。对机器配置的要求很低,而且 Docker 镜像体积很小,部署非常方便。

Docker

因为宝塔面板的 Docker 管理器在系统重启后就会无法启动,卸载重装还是会出现这种情况,似乎论坛有解决办法,但没去细看,还是直接 ssh 到服务器上直接安装吧。

更新 yum 软件源缓存,并安装 docker-ce。

sudo yum makecache fast
sudo yum install docker-ce

启动 Docker CE

sudo systemctl enable docker
sudo systemctl start docker

配置文件

为了方便使用宝塔备份数据,我在网站主目录中存放数据库文件,新建一个目录 Bitwarden:

mkdir /www/wwwroot/bitwarden && cd /www/wwwroot/bitwarden

准备配置文件:

vi config.env

根据需要修改下面的参数:

SIGNUPS_ALLOWED=true #是否开放用户注册;
DOMAIN=https://bitwarden.uefeng.com #Bitwarden 服务使用的域名
DATABASE_URL=/data/bitwarden.db #数据库在容器内的路径
ROCKET_WORKERS=10  #设置服务器线程
WEB_VAULT_ENABLED=true #是否开启 Web 客户端

准备服务描述文件:

vi docker-compose.yml

根据需要修改下面的参数:

version: '3'

services:
  bitwarden:
    image: vaultwarden/server:latest #使用 vaultwarden/server 最新镜像(2021年5月 Bitwarden_rs 更名为 vaultwarden。)
    container_name: bitwarden
    restart: always
    volumes:
      - ./data:/data  #容器内的 /data 目录挂载到宿主机的当前目录下的 data 目录;
    env_file:
      - config.env
    ports:
      - "47878:80" #将容器内的 80 端口映射到了宿主机的 47878 端口;

在面板新建一个站点,站点目录就选择刚新建的 Bitwarden 目录,配置好域名证书,添加反向代理。

bitwarden_5.jpg

最后启动服务:

docker-compose up -d

用户注册和数据导入

启动服务后,通过刚配置好的域名,看到下图所示的登录界面,点击右下方的创建帐号。

bitwarden_1.jpg

登录之后在左侧栏的「工具」菜单中找到数据导入页面,不过直接导入还是会有些错乱,需要手工调整,也有高级版才能使用的 TOTP。

bitwarden_2.jpg

bitwarden_3.jpg

关闭用户注册和网页端访问

因为密码服务器是我一个人使用,所以在注册好帐号,导入数据后,就关闭了用户注册权限和网页端访问权限,前面生成的 config.env 中,调整以下两项值:

SIGNUPS_ALLOWED=false
WEB_VAULT_ENABLED=false

修改之后,需要重启 bitwarden 服务才生效,运行以下命令来删除并重新创建容器。因为之前就做好了 数据库映射,不用担心数据被删除。

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

手机客户端很简洁,功能足够使用了,当然 ios 端的体验还是比 andriod 端的要好很多。

bitwarden_4.jpg

现在 Bitwarden 服务也只是用于密码的二次备份了,免得哪天 1Password 的管理员不爽删库跑路了。

已有 36 条评论
  1. 我觉得用这个和所有密码一样的风险一样。

    回复
    1. @wu先生

      都是有风险,看自己怎么做好风险控制了。我只开了两步验证,然后局域网同步就好。

      回复
  2. 浮游

    开源的挺好,比较关心的是服务器保存密码的数据库安全吗?密码是二次认证的吗?否则别人获取了你数据库文件,直接在本地爆破密码

    回复
    1. @浮游

      数据库保存的是经过加密的,得到数据库也无法破解。其实这类安全软件最大的问题就是:泄漏了主密码,就等于全部密码泄露了。所以主密码也得够复杂,然后加上二步验证。

      回复
      1. @痞子鱼

        请问大佬有没有研究过二次验证的密钥是不是和主密码一起来加密的数据库里的数据,如果是这样那主密码和二次验证只要不泄露任何一个,密码就是安全的。
        另外因为我没怎么用过 bitwarden,请问这个同步密码是需要手动点的么?还是每次加入一个新密码或者进入软件的时候会自动同步。

        回复
        1. @千千

          主密码才是主要的,二次验证只是进入的时候得验证而已。

          新版的 APP 可以设置成每次打开软件就同步。

          回复
发表新评论