使用bitwarden代替lastpass

前几天收到一封lastpass的邮件,说3月16日以后,lastpass将改变免费账户的策略,只能选择移动端或者桌面端一种作为常用设备类型,其他端只能查看不能修改和添加密码,作为经常使用lastpass并且桌面端和移动端都经常使用的人,这个改动让我难以接受。所以,我今天将密码管理软件从lastpass转移到了备受好评的bitwarden。

收到的邮件截图

选择bitwarden的原因

先说主要原因:bitwarden开源并且免费。能够让我掌握所有的密码,并且易用性也比较高。

目前市面上主要的密码管理软件主要用1password、lastpass、bitwarden、keepass。

1password收费并且安卓端做的一般,后两者免费开源但是bitwarden明显生态更好,客户端也更加完善。

安装bitwarden

版本选择

我的常用vps内存只有512M,但是原版的bitwarden使用.net编写,数据库也是用的MySQL,二这两个都是内存消耗大户,我的vps也不是只安装这一个服务,所以在一番搜索之后,发现了 bitwarden_rs 。它使用rust实现了bitwarden的api,并且支持多种数据库(MySQL、postgresql、sqlite),对低配置vps非常友好。所以我准备使用它来进行今天的安装。还有隐藏福利,这个版本可以免费使用高级功能。

使用docker安装

docker软件的安装我就不赘述了,网上有非常多的内容。如果是国内的机器记得换源。

选择docker还是docker-compose?

我建议选择docker-compose,首先是docker的启动命令可以保存在文件中,转移非常方便,其次更改设置也可以保留,更改非常方便。而docker的对比起来只有启动方便(一行命令)这个优点了。

使用docker-compose安装bitwarden_rs

mkdir /var/www/bitwarden
cd /var/www/bitwarden
nano docker-compose.yml

将下面的内容粘贴进去

# docker-compose.yml
version: "3"

services:
  bitwarden:
    image: bitwardenrs/server
    container_name: bitwardenrs
    restart: always
    ports:
        - "127.0.0.1:8081:80" # 将docker的80端口映射到宿主机8081端口
        - "127.0.0.1:3012:3012"
    volumes:
      - ./bw-data:/data
    environment:
      # Timezone settings, important for Fail2ban to work
      - TZ=Asia/Shanghai
      # Logging connection attemps
      - LOG_FILE=./log/bitwarden.log
      - EXTENDED_LOGGING='true'
      - LOG_LEVEL=warn
      # Beef up a bit
      - ROCKET_WORKERS=20
      - WEBSOCKET_ENABLED='true'
      # Hardening a bit
      - SIGNUPS_ALLOWED='true'
      #- DISABLE_ADMIN_TOKEN='true'
      #- ADMIN_TOKEN=YouRandomTokenHere
      - SHOW_PASSWORD_HINT='false'
      - DISABLE_ICON_DOWNLOAD='true'
      #- SMTP_HOST=smtphost
      #- SMTP_PORT=port
      #- SMTP_SSL='true'
      #- [email protected]
      #- SMTP_USERNAME=smtp_user_name
      #- SMTP_PASSWORD=smtp_password

设置caddy

我使用的是caddy1,如果是caddy2或者nginx可以参考官方文档 自行修改

domain.com {
    tls [email protected]
    
    header / {
        # Enable HTTP Strict Transport Security (HSTS)
        Strict-Transport-Security "max-age=31536000;"
        # Enable cross-site filter (XSS) and tell browser to block detected attacks
        X-XSS-Protection "1; mode=block"
        # Disallow the site to be rendered within a frame (clickjacking protection)
        X-Frame-Options "DENY"
        # Prevent search engines from indexing (optional)
        #X-Robots-Tag "none"
    }

    # The negotiation endpoint is also proxied to Rocket
    proxy /notifications/hub/negotiate localhost:8081 {
        transparent
    }

    # Notifications redirected to the websockets server
    proxy /notifications/hub localhost:3012 {
        websocket
    }

    # Proxy the Root directory to Rocket
    proxy / localhost:8081 {
        transparent
    }
}

记得修改域名、邮箱地址以及映射的端口(如果修改了)。

启动镜像

使用如下命令启动

docker-compose up -d

注意docker-compose.yml文件中第25行,在注册之后记得将true改为false来关闭注册,提高安全性。

SIGNUPS_ALLOWED='true'

从lastpass导入密码

跟着官方文档一步一步操作即可

注意: 如果chrome浏览器中安装了chrono下载管理扩展,lastpass导出的可能是txt文件,直接将后缀改为csv即可。

安装建议

建议添加两步验证增加安全性,并且不要使用记住密码功能。这样既不会忘也不会有泄露主密码的风险。