通过 Bitwarden 管理你的密码

密码安全问题

盗号是个严重的问题,您访问的网站、使用的各类应用每天都在遭受攻击。每当发生安全漏洞,您的密码就会被盗取,如果您跨应用和网站使用相同的密码,黑客就可以轻松访问您的电子邮件,甚至银行或者其他重要账户。

密码始终是现代网民的心头大患,毕竟密码弱了不放心,强了记不住,一处密码到处用又容易变成一处泄露多处翻车。你永远也不知道哪个二五仔网站明文存密码。更何况,每天输密码和回忆密码还容易导致脱发和腱鞘炎。

这么复杂的密码,记不住又难输入?好的密码管理软件还能自动填充账号密码,连输入都不用,老司机就是又快又稳。

选型

但是现有的常用解决方案或多或少有一些缺憾,如iCloud钥匙串对PC用户不友好,Edge和Chrome等浏览器密码管理使用场景受限,1Password好用,但要钱。

a85abfc4731469e269115d4246ace8d9

开源,免费,跨平台,安全,好管理,好用,能自动填充密码的密码管理解决方案。LastPass和Bitwarden就是开源方案的代表,但是LastPass的跨平台体验较差,使我最终选择Bitwarden。

30251b1be59f3e034f066f4434ba49df

Bitwarden是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。Bitwarden提供云端托管服务,并支持自行部署解决方案。

Bitwarden 是保存您的登录密码最简易安全的方法,它可以在您的所有设备之间同步。

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

Bitwarden使用方式

使用Bitwarden的最快捷办法就是:

  • 上Bitwarden官网下客户端并注册账号,并在你常用的浏览器上安装Bitwarden插件
  • 在常用设备上安装App。

通过几个简单的场景,我们就能够了解Bitwarden的便利性。

使用客户端进行密码管理

在客户端中能够对密码库进行管理,例如,可以将知乎的账号密码记录在此,以供日后查看,或是检测账号密码是否泄露,或者用密码生成器生成各种强度的密码。此外,还能为各个条目添加笔记,或添加其他自定义字段,如密保问题等。

49d67a55dc1bd8763b289a4bddd98433

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

在浏览器使用Bitwarden

通过安装插件,可以方便的在各个主流浏览器中使用Bitwarden,并使用其进行自动填充

ff9ddcdd81884e0b18cf4b34a9febfff

Bitwarden插件同样具备密码库管理的全部功能。更重要的是,当所浏览的网页同密码库中的条目相匹配时,可以用它进行自动填充!

c3d7e6b62304b98696d9a1b502247cab
在iOS上使用Bitwarden并自动填充

Bitwarden的App同样具备管理密码库的全部功能。为了使得自动填充真正发挥威力,进行如下设置

  • 在Bitwarden设置中允许用Touch ID(或FaceID)访问。
  • iOS设置-密码与账户-自动填充密码中勾选Bitwarden。
c80c67ca7e89da1c79f5f2f311e6683c

生成并管理密码

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


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

数据的导出与导入

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

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

694af023d287105d80b7251c036da165
10767eec0a0ab4360a6142ad7814f002
密码安全报告

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

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

5621b79091760464e2f14637620e91ac

账户保护

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

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


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

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

密码生成器

可自动生成不同程度强度的密码

be72009b61940264df89e77f384b5174

自建

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

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

建议使用 Nginx 代理。

安装 Docker 与 Docker-compse

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

CentOS

如果你的服务器上已经安装了 Docker 和 Docker Compose,这一步就可以跳过了。Docker 要求 CentOS 系统的内核版本高于 3.10,可以运行 uname -r 查看版本。

执行如下命令来安装docker:

# 1、(可选)更新系统的软件包 
yum update -y 

# 2、安装 docker 依赖的软件包 
yum install -y yum-utils device-mapper-persistent-data lvm2 

# 3、添加 docker 的 yum 源 
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

# 4、通过 yum 安装 docker 
sudo yum install docker-ce docker-ce-cli containerd.io 
# 如上述命令出错,可能是系统上已有旧版本 Docker,需要先卸载旧版本 
# 卸载命令:yum remove docker docker-common docker-selinux docker-engine docer-io 

# 5、启动 Docker 服务并设置开机启动 
sudo systemctl start docker 
sudo systemctl enable docker 

# 6、测试 docker 是否安装成功 (查看版本号) 
docker version 
# 有 client 和 service 两部分表示 docker 安装并启动成功了(有部分错误不用管)
安装Docker-Compose

执行如下命令来安装docker-compose

# 1、首先前往 https://github.com/docker/compose/releases/latest 查看最新的 docker-compose 版本号,比如截稿时最新版本为 2.4.0。 

# 2、下载最新版本的 docker-compose,你需要将下面的 2.1.1 替换成最新的版本号 
sudo curl -L "https://github.com/docker/compose/releases/download/2.4.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 

# 3、授予可执行权限 
sudo chmod +x /usr/local/bin/docker-compose 

# 4、测试是否安装成功(可能需要重启系统) 
docker-compose -v 
# 安装成功会显示 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,记好这两串字符串。

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

# 1、下载 Bitwarden 的安装脚本 
curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh && chmod 700 bitwarden.sh 

# 2、执行安装程序 
./bitwarden.sh install 
# 由于 docker 镜像的体积比较大,国内网络可能遇到中途卡住不动的情况,可按下 Ctrl+C 终止再重试,多次不行的话,可以参考网上的其他教程为 Docker 配置代里。

接着,安装脚本会一步步提示你输入,下面是部分重点选项:

  • Enter the domain name for your Bitwarden instance
    输入你要给 Bitwarden 分配的域名,这里例子为 bitwarden.domain.com
  • Do you want to use Let’s Encrypt to generate a free SSL certificate? (y/n)
    是否使用 Let’s Encrypt 自动生成免费的 SSL 证书,一般选 y (你有自己的证书也可以选 n,后面需要配置证书的路径)
  • Enter the database name for your Bitwarden instance
    输入用于 Bitwarden 的数据库名称
  • Enter your installation id / Enter your installation key
    你需要访问 https://bitwarden.com/host 获取一组安装 ID 和安装密钥 Key (官网被 xx 无法访问的话,只能各显神通了)

修改配置文件 (端口号、SSL 证书等)

  • 如果你需要使用自己的 SSL 证书、修改默认的端口号等需求,可以编辑配置文件
    ./bwdata/config.yml。比如你的服务器本身就有网站占用了 80、443 端口,那么可以修改配置里的 http_port 和 https_port 端口号来避免冲突。比如我改成 8080 和 8888,这样日后我访问时的域名就是 https://bitwarden.domain.com:8888 了。
  • 要注意的是,腾讯云、阿里云等机器默认的「安全组规则」会阻止非常用端口的访问,如使用非 80/443 端口,需要登录后台修改安全组规则允许你设置的端口才行。
  • 另外,如果你使用「宝塔面板」,或者懂得修改 Nginx 的配置,也可以对你的 bitwarden 服务进行“反代”,有建站经验的朋友,可以查查相关的资料,搞定应该不难。
  • 修改完后,必须执行一下 ./bitwarden.sh rebuild 命令才能让新配置生效。

修改环境配置文件(可选)

安装程序 bitwarden.sh 未配置 Bitwarden 的某些功能。通过编辑位于 ./bwdata/env/global.override.env 的环境文件来配置这些设置。

  • 在环境配置文件 ./bwdata/env/global.override.env 里有诸如 SMTP、启用Yubico、启用系统管理员门户、是否禁止用户注册等设置。
  • 其中,如果你的 Bitwarden 打算是私人使用,建议在注册完自己账号之后,改成 “禁止用户注册”,对应的项为:globalSettings__disableUserRegistration=false
  • 修改此文件后,需要重启 Bitwarden 容器才能生效,重启命令为:./bitwarden.sh restart

最后运行 ./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=<[email protected]> \
-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 自动配置,非常方便。

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

后续维护命令:

bitwarden.sh 脚本可以使用的命令

命令 描述
install 启动安装程序
start 启动所有容器
restart 重新启动所有容器(与启动相同)
stop 停止所有容器
update 更新 Bitwarden 版本
updatedb 更新/初始化数据库
updateself 更新 bitwarden.sh 文件本身
updateconf 更新所有容器,而无需重新启动正在运行的实例
renewcert 续订证书
rebuild 重建 config.yml 的配置
help 列出所有命令

备份 Bitwarden 密码数据 (可选)

Bitwarden 的全部数据都保存在 ./bwdata 目录下,建议你定期备份这个目录的全部内容到其他地方以防意外。其中的内容包括:

  • ./bwdata/env – 实例的环境变量,包括数据库和证书密码
  • ./bwdata/core/attachments – 实例的密码库项目的附件
  • ./bwdata/mssql/data – 实例的数据库数据

每天 Bitwarden 也会自动对 MySQL 容器 中的数据库进行备份。备份文件默认保存在./bwdata/mssql/backups 目录中,保留 30 天。

Related Post

发表回复