对于密码安全,一款靠谱的密码管理器是非常重要的。目前市面上有着不少的密码管理器,而我选择了 Bitwarden

首先,它有着完全免费的版本,而且功能限制并不多。它允许免费用户存储不限数量的密码,同时能够与另一个账户共享密码库。对于我这种完全没有共享需求的人来说,这已经是足够我使用了。同时它完全开源,如果不放心,甚至还官方提供了 docker 镜像以供自建。

功能介绍

Bitwarden 的功能并不止于生成并管理密码,下面我来简单介绍一下。

生成并管理密码

这算是 Bitwarden 的本职工作了吧,不过除了账号密码外,它还可以通过 TOTP 提供两步验证,如果网站支持的话。另外,还能够自定义一些笔记或是新增字段,来添加对于该站点的描述。它还支持文件夹,通过不同的文件夹来进行分类,不过只支持一级文件夹。

在创建密码时,选项也比较丰富。它支持最长 128 位的密码,还可选最少的数字或特殊字符个数,并且生成的密码中,数字,字母,符号都会以不同的色彩显示,极大程度上避免了混淆。同时它还支持生成最多 20 个单词的密码短语,还可选分隔符,是否包含大小写与数字。不仅如此,它还有历史记录功能,可以查看之前所生成的密码。

数据的导出与导入

作为密码管理软件,密码的导出与导入势必是非常重要的,这关系到是否能够方便地进行数据迁移,以及是否能够方便备份,防止软件出现问题时无法登录到网站中。

Bitwarden 支持从绝大多数主流密码管理软件中进行数据导入,例如 Chrome,Firefox,1Password,LastPass 等等,并且支持 json 与 csv 这两种格式的导出,操作也非常便捷,完全能够满足我的需求。

密码安全报告

Bitwarden 还会生成一系列的安全报告,以保护用户密码的安全。

它会将密码以及邮箱地址与已经公开的,被泄露的数据库中的内容进行对比,并找出这些不安全的密码,另外也会与你自己的密码库中的密码进行对比,防止一个密码被重复使用多次。它能够找到那些非常容易被破解的密码,在自动填写的域名中未使用 https 的,以及网站有两步验证但并未被启用的,并进行提醒,增加密码的安全程度。

账户保护

除了普通的账号密码,以及两步验证(必须通过网页端开启)外,Bitwarden 还通过 “指纹短语”(fingerprint phrase)来保护帐号安全。每个帐号都有一个固定的,由 5 个英语单词组成的指纹短语,且不会改变。可以通过验证指纹短语,来判断所连接到正确的的 Bitwarden 服务器。或用来验证添加到组织中的帐号是否为正确的帐号。

它还支持通过修改 KDF 迭代来防止主密码遭到暴力破解。

其他一些安全措施,别的密码管理软件也具有,像后台自动锁定,禁止截图等等,这里就不展开细说了。

总而言之,它所提供的功能非常丰富,在生成管理密码外,还有一系列保护账户安全的功能,

自建

Bitwarden 能够部署在自己的服务器上,也就是说如果不放心官方,担心自己的数据隐私,也能够自己将 Bitwarden 部署到自己的服务器上,这样就能更加放心地使用了。这也是 Bitwarden 相对于其他密码管理软件更具有优势的一点吧。

由于部署采用的是 Docker 部署,非常简单方便,也易于升级,对新手也很友好。官方的镜像需要付费才能够使用高级的功能,因此我一般使用第三方制作的 这个 镜像,解锁了所有高级功能,也提供了非常丰富的自定义功能。

建议使用 Nginx 代理。

安装 Docker 与 Docker-compse

安装 Docker 具体可以查阅 官方文档 ,这里就简单写一下常见的 CentOS 与 Ubuntu 的安装方法。默认之前都没有安装过 Docker,并且将安装最普通的稳定版。

CentOS

sudo yum install -y yum-utils

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

sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker

# 这条命令建议查看 https://docs.docker.com/compose/install/ 来确定使用的是最新的版本
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

Ubuntu

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
    
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 这里要确定使用的架构,一般都是 amd64
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
   
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
sudo systemctl enable --now docker

安装 Bitwarden

有官方的版本以及第三方的版本,我个人推荐第三方的。

官方安装

官方的安装文档可以查阅 这里 ,推荐配置是 64 位系统,2 核 4 G,25 G 以上。

首先需要在 这里 用邮箱申请一个 key,然后会给你一个 installation idinstallation key,记好这两串字符串。

然后连接到服务器上,运行一下命令:

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

之后会在终端里询问域名以及 installation idinstallation key,按照实际情况填写即可。它还会询问是否部署 SSL,如果不额外配置 nginx 等代理的话,建议选择需要,以保证访问的安全性。

最后运行 ./bitwarden.sh start 就可以通过域名访问了。

第三方部署

有人用 Rust 写了一个 Bitwarden 的第三方版本,不用在 Bitwarden 申请 installation key 和 id,直接就能使用高级版本,而且配置丰富,因此我选择使用这个版本。

注意:它由于可以不使用 Docker-compose (例如我就没有使用),因此可以只安装 Docker。

由于它会用到非常长的一串,需要更改中间部分内容的命令,建议将命令先复制到记事本中,更改完成后再复制到终端去执行。

首先先拉取 docker 镜像

docker pull bitwardenrs/server:latest

如果只是需要测试是否可以成功运行,可以先运行一下这个最简单的命令,然后通过 ip 地址访问,看看是否能够成功显示。

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

如果之后需要进行其他配置,或是要升级镜像,可以通过这两条命令进行删除后再重新部署。

docker stop bitwarden
docker rm bitwarden

# 如果是要升级的话,再拉取最新的镜像
docker pull bitwardenrs/server:latest

由于可自定义的内容实在太多,我这里就介绍一些个人认为比较实用的内容,其他的可以查阅项目的 wiki 页面。

如果只是自己使用,可以在注册完自己的帐号后,加上 -e SIGNUPS_ALLOWED=false 选项来禁止新用户注册。如果需要其他人注册,可以打开 admin 页面添加。

如果需要管理账户,可以通过设置 token 打开 Admin 页面(位于 https://domain.com/admin),即加上 -e ADMIN_TOKEN=some_random_token_as_per_above_explanation,最好将这串 token 设置的复杂一些,防止被暴力破解,不过别忘记了。同时最好打开 https 防止中间人攻击。

由于一般都是个人使用,许多人不会去配置邮件服务,因此它会默认在页面直接显示出密码提示,而非将其发送至邮箱。如果不要直接显示,可以加上 -e SHOW_PASSWORD_HINT=false

如果要显示通知,则加上 -e WEBSOCKET_ENABLED=true ,并且多映射一个端口 -p 3012:3012

而如果需要配置邮件服务,可以通过以下方式配置:

-e SMTP_HOST=<smtp.domain.tld> \
-e SMTP_FROM=<bitwarden@domain.tld> \
-e SMTP_PORT=587 \
-e SMTP_SSL=true \
-e SMTP_USERNAME=<username> \
-e SMTP_PASSWORD=<password> \

具体内容因人而异,如果不理解上面这些内容都是什么,就建议不要配置了。

由于我使用 Nginx 进行代理,需要配置 DOMAIN,不然很多地方会出现奇怪的错误。加上 -e DOMAIN=https://domain.com来解决这个问题。

最后设置一下 Nginx 代理,就可以进行使用了。记得在设置上禁止注册前先注册好帐号哦 : )

server {
  server_name domain.com;

  # Allow large attachments
  client_max_body_size 128M;

  location / {
    proxy_pass http://localhost:80;
    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://localhost:3012;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
  location /notifications/hub/negotiate {
    proxy_pass http://localhost:80;
  }


  listen 80;
}

把 domain.com 换成自己的域名,把 ssl 相关内容换成自己的,再重启下 Nginx,就完成部署,可以使用了。配置证书时建议使用 certbot 自动配置,非常方便。

如果部署成功,此时访问域名就会看到这样的界面

接下来就请尽情使用吧。