使用bitwarden代替lastpass

2022-08-07更新:用了一年半了,只能说非常好用!极力推荐大家使用bitwarden!

另,bitwarden_rs已经更名为vaultwarden,毕竟是开源实现,换个不一样的名字表示身份不同,可以理解


前几天收到一封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

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

将下面的内容粘贴进去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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可以参考官方文档 自行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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
}
}

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

启动镜像

使用如下命令启动

1
docker-compose up -d

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

1
SIGNUPS_ALLOWED='true'

从lastpass导入密码

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

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

安装建议

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