计算机网络技术毕业,个人很注重网络及信息安全,看过一篇关于有规律的管理密码的文章,自己也就建了一套类似规则;
但是几年前爆发的密码泄露问题还是查询到密码泄露,就注册了 LastPass 进行密码管理:日常密码继续按规律设置、更新,不常登录的使用 LastPass 计算随机密码并添加站点。
一种用着还算顺利,不过 LastPass 浏览器插件时不时提示无法连上服务器,应该是服务器在国外的原因;
然后无意中看到 Bitwarden 及其衍生版本 bitwarden_rs,刚好搬瓦工就搭了个梯子相当于闲置,就打算也自建一个试试效果。

Docker 环境搭建

安装要求

CentOS 7(64-bit),内核版本不能低于3.10;

卸载旧版本

较旧版本的Docker被称为docker或docker-engine。如果已安装这些,请卸载它们以及相关的依赖项。

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

安装 Docker

使用 yum 安装

安装所需依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2
# 使用国内源(阿里云)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 使用官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 如果需要测试版本的 Docker CE 请使用以下命令
yum-config-manager --enable docker-ce-test
# 如果需要每日构建版本的 Docker CE 请使用以下命令
yum-config-manager --enable docker-ce-nightly

安装 Docker-CE 并设置开机启动

yum makecache # 更新 yum 缓存
yum -y install docker-ce --nobest # 安装 Docker-CE
systemctl enable docker # 设置开机自启
systemctl start docker # 启动 Docker-CE

使用脚本自动安装
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装:

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun

添加内核参数

如果在 CentOS 使用 Docker CE 看到下面的这些警告信息:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

请添加内核配置参数以启用这些功能。

tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p # 重新加载 sysctl.conf

参考文档

菜鸟教程 从入门到实践 官方文档 阿里云镜像源站 国内仓库和镜像

部署 Bitwarden_rs

快速部署

docker pull bitwardenrs/server:latest
docker run -d --name bitwarden -v /bw-data/:/data/ -p 6666:80 bitwardenrs/server:latest

官方提供

curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh \
  && chmod +x bitwarden.sh
./bitwarden.sh install
./bitwarden.sh start

自定义部署

自定义一些参数,加入 HTTPS 支持等…

# 拉取 bitwarden_rs 镜像
docker pull bitwardenrs/server:latest
# 生成一个 admin 用户管理页面的 token
openssl rand -base64 48
# 生成 ssl 证书,以启用 https,推荐使用 acme.sh 免费申请及自动续签

# 运行 bitwarden_rs 容器
docker run -d --name bitwarden \
    -e SIGNUPS_ALLOWED=false \
    -e INVITATIONS_ALLOWED=false \
    -e ADMIN_TOKEN=step2_generated_token \
    -e ROCKET_TLS='{certs="/data/v2ray.crt",key="/data/v2ray.key"}' \
    -e DOMAIN=https://bwh.vioe.cc/ \
    -e LOG_FILE=/path/to/log \
    -e LOG_LEVEL=warn -e EXTENDED_LOGGING=true \
    -e DATA_FOLDER=/path/to/data/folder \
    -p 443:80 \
    -v /path/to/host/ssl/:/path/to/docker/ssl/
    -v /path/to/host/data/folder:/path/to/docker/data/folder \
    bitwardenrs/server:latest

参数解释:

SIGNUP_ALLOWED:是否允许注册
INVITATIONS_ALLOWED:是否允许组织邀请注册
ADMIN_TOKEN:用户管理界面 (/admin),可用于删除用户及邀请用户注册
ROCKET_TLS:ssl 证书信息,同时需要配置 -v /path/to/host/ssl/:/path/to/docker/ssl/ 卷,前者为宿主机 ssl 证书的位置,后者为容器证书位置
DOMAIN:域名
LOG_FILE、LOG_LEVEL、EXTENDED_LOGGING:日志保存文件路径以及日志等级定义
DATA_FOLDER:docker 容器数据保存文件夹(默认为 /data),除了定义这个文件夹之外,还可以定义附件、图标缓存、数据库等参数
DATABASE_URL:数据库路径
ATTACHMENT_FOLDER:附件路径
ICON_CACHE_FOLDER:图标缓存路径

更多参数可参考官方 Wiki

容器操作命令

# $name 为 docker run 中定义的 name
# 启动容器
docker start $name
# 停止容器
docker stop $name
# 删除容器
docker rm $name
# 查看运行容器
docker ps -as

升级 Bitwarden 镜像

# 重新拉取镜像
docker pull bitwardenrs/server:latest
# 停止、删除原容器
docker stop bitwarden
docker rm bitwarden
# 重新运行 docker run 命令
# 查看镜像文件
docker image ls
# 删除原镜像文件, $ID 在 step4 中可以看到
docker image rm $ID

上述都太繁杂,使用 Docker Compose 部署

curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

自行选择安装目录用于存储数据,如安装到 /home/bitwarden
cd /home && mkdir bitwarden && cd bitwarden
准备一个配置文件 config.env
cat >> config.env << EOF
写入:

SIGNUPS_ALLOWED=true
DOMAIN=https://yourdomain.com
DATABASE_URL=/data/bitwarden.db
ROCKET_WORKERS=10
WEB_VAULT_ENABLED=true
ADMIN_TOKEN=xxxxxx
WEBSOCKET_ENABLED=true
EOF

准备服务描述文件 docker-compose.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"
      - "8888:3012"
EOF

文件说明:

bitwarden 现在是唯一一个服务;
image: mprasil/bitwarden:latest 指定使用 Docker Hub 的 mprasil/bitwarden 最新镜像;
volumes 中指定将容器内的 /data 目录挂载到宿主机的当前目录下的 data 目录,这样你可以在宿主机上执行数据库的备份操作;
ports 指定将容器内的 80 端口映射到了宿主机的 6666 端口;

以后对 bitwarden 服务做的所有操作,都需要预先进入这两个配置文件所在的目录内。
拉取镜像:docker-compose up -d

nginx 配置

请查看:https://github.com/dani-garcia/bitwarden_rs/wiki/Proxy-examples

设置开机启动

编辑 rc.local文件:vi /etc/rc.d/rc.local,在最后加上:

/usr/local/bin/docker-compose -f
/usr/local/bitwarden/docker-compose.yml up -d

bitwarden 搭建完成,访问 https://你的域名/admin 输入上述配置文件的管理密码,可以进去管理面板;修改配置,需要重新启动容器以便生效:docker-compose down && docker-compose up -d

开始使用

数据迁移

网页访问搭建号的账号注册账号(如果是个人使用注册完以后将上述 SIGNUPS_ALLOWED=true 字段修改为 SIGNUPS_ALLOWED=false 然后重启容器),于此同时登录 LastPass 导出密码(虽说需要输入主密码,但是导出的文件里的密码居然是明文的):

切回 Bitwarden 页面,点击工具->导入数据;选择 LassPass,再见上述步骤得到的内容直接复制粘贴到第二个红框中或者选择你得到的 csv 文件。

客户端使用

市面商所有平台都可以使用,详情见官方下载页面
PS.Chromium 版的 Microsoft Edge 扩展链接没有列出:Microsoft Store,装好以后点击设置,输入自定义的域名,其他选项按实际情况填写。

所有客户端设置界面相同,另外中文界面好评,先用一段时间;如果没有问题,准备将 LastPass 账号彻底删掉!

最后修改日期:2020-01-13

作者