引子

2021年了,在网上冲浪十几年的我已经在各种网站APP创建了几百个密码,但是我还是用着最简陋、最不安全的方式管理密码——人脑记忆。很多平台要求用户必须设置非常复杂且难以记住的密码,比如至少 8 位,包括大写字母、小写字母、阿拉伯数字、特殊字符等。但是随着年龄增长,不可能一个网站单独设置一个密码,于是很多人和我一样重复使用一个复杂密码,或者只更改已有密码中部分字符,这就让黑客更容易通过已泄漏的密码进行破解。不幸的是,我的常用密码之一就在一次黑客攻击中被成功脱库,所以为了解决因这次密码泄露带来的安全隐患,我决定重置所有平台的密码,并搭建一个私人的密码管理服务,使得密码管理更省心更高效。

什么是好密码

说到什么是好密码,就必须知道什么是烂密码。2019 年 12 月,密码安全服务公司 SplashData 发布了第 9 个年度「最烂密码百强榜单」——[Top 50 Worst Passwords of 2019],据文章介绍,这是通过分析主要样本来自北美和欧洲的已泄漏 500 万个密码后统计得出的。根据 SplashData 估计,大约有 10% 的用户使用过至少一个 Top 25 的烂密码。3% 的用户使用过「123456」。互联网让每一个网民都接触到各式各样的密码,深知密码安全的重要性。很多同学可能都有 QQ 号被盗的经历,在吐槽腾讯的安全措施不到位之余,我们有没有反思过,自己的密码是「烂密码」吗?足够安全吗?

2019年度最烂密码
通过上面统计可知,一般烂密码总是符合以下特征:

  1. 字符长度短,通常在8位以下
  2. 仅由纯字母或者数字构成
  3. 使用自己的名字缩写或者生日
  4. 使用常见词语或字典里的单词
  5. 重复使用以前用过的密码

那么,烂密码有什么危害呢?

烂密码危害显而易见:容易被盗号,轻则用你的号发小广告,重则造成财产损失,甚至利用你的身份犯罪!

如何保证你的密码安全

避免一个密码走天下

我们应该「一把钥匙开一扇门」,而不是仅仅使用「一把万能钥匙开所有门」。

相信大部分朋友并不会使用 SplashData 公布的「最烂密码百强榜单」中的密码。但是可以肯定的是,为了便于记忆,你会多个账户共用同一个密码。也许你会认为,自己的密码相当复杂,别人不可能猜得到。但是,无论密码看上去多么安全,只要多个账户共用同一个密码,就有「撞库」的风险。

「撞库」英文名为 Credential Stuffing,它的含义如下:

撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登录其他网站后,得到一系列可以登录的用户。很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在 A 网站的账户从而尝试登录 B 网址,这就可以理解为撞库攻击。
举个栗子,支付宝比 QQ 的安全等级更高,如果你的这两个账户共用一个密码,黑客盯上了你的账户,就会首先尝试攻破 QQ 密码,一旦成功,他接下来破解支付宝账号不就手到擒来?因此,即使密码再复杂,共用同一个密码,都会使你的密码安全性大打折扣。更何况,有的人还会主动把自己的密码说出来。
撞库导致密码泄露

创造一个属于你的密码本

在信息安全问题愈演愈烈的今天,我建议尽量少使用你的个人信息去设置密码。特别是在当下国内互联网安全环境不容乐观的情况下,你的姓名,生日信息,住址,身份证号码,甚至你家人的信息,都能被人轻易获取时,你的密码带有个人信息反倒对黑客破解带来机会。我认为,每个人应当设置一个属于自己的对应法则,比如最简单的替换:把“123456”等阿拉伯字母换成“ABCDEF“这样的英文字母,比如“1996”对应“ajjs“,“1”对应”a“因为a在26个字母中也是第一位,“9”对应“j”因为汉语拼音“九”的开头字母是“j”,"6"对应“s"因为6的英语单词首字母是“s”。当然每个人因人而异,具体可以参考 人民日报 给出的建议。
图片来源于人民日报微博

设置易记的长密码

根据美国国家网络安全和通信整合中心(NCCIC/US-CERT)在 2018 年给出的设置密码的 建议 ,没有提到通常网站要求的设置阿拉伯数字、大小写字母、特殊字符的组合式密码,而强调了尽可能把密码设置到最长。所以哪怕你的密码包括了阿拉伯数字、大小写字母、特殊字符的组合,但是密码长度不够也会对破解提供便利。因此通常建议大家在设置密码时,设置不少于16位的密码,而由于从排列组合的角度看,供选择的字符种类越多,组合方式就越多,暴力破解的难度也就越大。因此,在密码足够长的基础上,可以认为密码越复杂越安全。
美国国家网络安全中心给出密码建议
你也可以使用卡巴斯基提供的一个密码暴力破解检测工具kaspersky来验证你的密码安全等级


比如我这里使用了一个16位的复杂密码做实验,网站提示暴力破解需要33个世纪。
密码强度测试

一个好密码管理工具

前文提到了一个好密码,既需要足够的长度,又需要一定的复杂程度,那么你我这样的普通人没有过目不忘的记忆力,该怎么管理密码呢?一个比较笨拙但是实用的办法是,搞一个密码本,平时锁柜子里,要用时拿出来找。但是这都2021年了,难道没有一些骚操作吗?当然有!这就是今天着重介绍的密码管理工具——Bitwarden。
所谓的密码管理工具就相当于一个保险柜,把你所有的密码认认真真地记下来,放进保险柜里锁好。你只需要记住一个密码,就是保险柜的密码,就可以找到你的所有账户的密码。只要保证保险柜的安全,那么所有的密码就都是安全的。说到密码管理工具,就不得不提密码管理行业内鼎鼎有名的1Password了,尽管1Password非常之好用,用户口碑也不错,但是年费248的订阅价格直接把我劝退。KeePass 虽然免费,但上手难度较大,而根据业内消息,著名免费密码管理工具Lastpass也将于2021年3月中旬强制收费,免费用户不再享受跨平台服务,最终我们把目光锁定在BitWarden 上。
LastPass开始强制收费
而我们本文的主角——Bitwarden,优点那可就太多了:

  • 可实现私有化部署:因为 Bitwarden 是一款开源的密码管理服务,因此我们可以将其安装并部署在自己的服务器上,相关的登录信息自然也都保存在自己手中。很大程度上降低了相关信息泄露的可能性。
  • 完整的密码管理功能:作为辅助密码管理服务,我对 Bitwarden 的实际要求并不高,只需要实现密码存储和表单充填功能即可。Bitwarden 有着功能相对完善的浏览器扩展,基本可以实现我的需求。
  • 无平台限制:虽然是开源服务,但 Bitwarden 提供了平台覆盖全面的客户端,包括桌面应用、浏览器扩展、手机客户端等等,对于私有化部署的只需要添加密码库地址就可以正常使用,当然也就没有所谓的平台限制,毕竟都是自己免费部署的。

由于 Bitwarden 没有国内服务器,免费版使用的是Azure服务器,在密码同步上肯定会有时“抽风”。所以为了使用便利性和安全考虑,部署在国内服务器上是最佳选择,我选择腾讯云轻量服务器实现部署,使用对象存储工具COSCMD定时备份,保证数据的高可靠性。

轻量服务器部署Bitwarden

在开始之前,我们需要一些准备工作,本文完整的方案会用到DNSPod、腾讯云CDN、CVM以及COS四个云服务,因此我们先登录腾讯云控制台购买或激活服务:

  • 个人域名一个(使用国内服务器最好有备案)
  • SSL证书一个(必须,可以申请腾讯云免费证书)
  • 域名解析平台账号(必须,推荐使用 DNSPod)
  • 腾讯云 轻量服务器一台
  • 腾讯云 CDN服务(可选/推荐 )
  • 腾讯云 COS服务(可选/推荐)
Ps:对于新人,推荐使用【新人免费产品专区】的免费体验产品来落地方案,等决定正式启用也可以付费转为正式服务;对于已经有服务器的老鸟,就可以直接复用已有服务器啦,当然也不仅限于腾讯云CVM;对于有自建NAS或树莓派的朋友,同样也可以参考部署,不过一定要注意数据备份哦!

安装Docker环境

这里采用Docker部署方案,因此需要先安装Dcoker,安装步骤如下(已经有Docker环境的请跳过):

#登录root,获取在线安装脚本(这里直接使用root账号,简化流程)
curl -fsSL https://get.docker.com -o get-docker.sh
#执行安装脚本
sh get-docker.sh --mirror AzureChinaCloud
#修改Docker持久化目录(可选/推荐)
test -d /var/lib/docker && \
    mv /var/lib/docker /var/lib/docker_backup && \
    mkdir -p /data/docker && \
    ln -sf /data/docker /var/lib/docker
#开启镜像加速(可选/推荐)
cat >/etc/docker/daemon.json<<EOF
{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://hub-mirror.c.163.com"
  ]
}
EOF
#启动Docker并加入开机启动项
systemctl daemon-reload
systemctl enable docker
systemctl start docker
#验证是否安装成功(有Docker信息输出即为成功):
docker info

拉取docker
设置国内源
安装成功

部署Bitwarden

这里使用Docker一键部署方式,命令如下:

docker run -d \
    --name bitwarden \
    -p 8080:80 \
    -p 3012:3012 \
    --restart=always \
    -e SIGNUPS_ALLOWED=true \
    -e WEB_VAULT_ENABLED=true \
    -e DOMAIN=https://mm.zhangge.net \
    -v /data/bitwarden/data:/data \
    bitwardenrs/server:latest

安装Bitwarden

开启CDN

由于我们使用腾讯云CDN,腾讯云CDN支持自定义源站端口,直接启用HTTPS,所以不需要在本地部署一个Nginx来代理Bitwarden,直接在CDN里启用就行。这里用到CDN主要起到3个作用:

  • 启用HTTPS:上文提到了Bitwarden必须要用HTTPS访问,这里借助腾讯云CDN可以快速开启HTTPS访问;
  • 安全加固:启用CDN可以有效的隐藏我们的服务器真实IP,而且CDN自带很多安全防护,比如WAF【相关文章
  • 访问加速:启用CDN之后,静态文件就能缓存到CDN节点实现访问加速【相关文章】。

CDN配置过程

一、打开腾讯云CDN管理界面,确认已经激活服务
二、点击添加域名:test.zhouli.online,如图
CDN配置
源站地址填写轻量服务器公网IP+上文bitwarden容器的暴露端口8080,回源协议选择 HTTP。
三、缓存配置

  • 将全部类型-所有文件的刷新时间改为0天,即不缓存
  • 新增一个文件类型,内容为:.jpg;.png;.css;.woff;.woff2;.svg,刷新时间设置为30天或更长,即静态文件缓存到CDN(文件类型是从Bitwarden分析得出)
  • 如图调整优先级,确保需要缓存的规则放到最前,「全部文件」这个兜底类型放到最后。

CDN缓存过期配置
四、域名解析
在基本配置界面CDN给分配的CNAME地址:
CDN分配的CNAME地址
复制这个地址,前往DNS解析面板,如图新增一个CNAME解析:
新增DNS解析记录
五、开启HTTPS
在等DNS解析生效期间,我们回到腾讯云CDN配置面板,找到【HTTPS配置】,启用HTTPS和HTTP2.0:
配置HTTPS和 HTTP2.0
在证书选择界面,选择腾讯云托管证书即可自动加载到我们在上文申请到的免费证书了:
选择腾讯云托管证书
提交后,我们回到HTTPS配置,开启强制HTTPS和HTTP2.0:
开启HTTPS和HTTP2.0

配置Bitwarden

做完以上配置,我们就可以正常访问Bitwarden的后台管理了:https://test.zhouli.online/,刚部署的服务还没有账号,此时我们点击【Create Account】创建我们自己的账号:
登录界面
如图填写信息并提交:
创建账号
提交后返回了登录界面,此时我们就可以用刚刚创建的账号来登录后台了:
Bitwarden后台界面
另外,喜欢中文界面的朋友可以在设置里面改为中文简体:
设置为简体中文
保存后重新登录就变成中文界面了:
Bitwarden中文管理界面
最后,因为我们部署Bitwarden是私人使用场景,因此需要修改下Bitwarden的容器启动脚本,将前面的SIGNUPS_ALLOWED=true改为SIGNUPS_ALLOWED=false,也就是禁止用户注册。
具体步骤如下:

# 删除之前启动的bitwarden容器
docker rm -f  bitwarden
# 修改为禁止注册然后重新拉起容器
docker run -d \
    --name bitwarden \
    -p 8080:80 \
    -p 3012:3012 \
    --restart=always \
    -e SIGNUPS_ALLOWED=false \
    -e WEB_VAULT_ENABLED=true \
    -e DOMAIN=https://mm.zhangge.net \
    -v /data/bitwarden/data:/data \
    bitwardenrs/server:latest

使用Bitwarden

完成上述步骤后,我们已经部署了一套私有Bitwarden密码管理服务,下面的事情就比较简单了。

导入数据

很多朋友在使用Bitwarden之前也使用过一些其他的密码管理工具,比如chrome的自动填充密码,iOS的钥匙串,或者1password和Lastpass这样专业的密码管理工具,我们需要将之前的密码迁移到Bitwarden,好在 BitWarden 有完善的迁移机制,使得我们能低成本的迁移密码文件。
下面我们以Chrome和 LastPass 转入 BitWarden 为例说明。

Chrome

第一步:从 Chrome 导出数据

  1. 打开Chrome浏览器,在右上角“三个点”找到“设置”,找到“密码”

找到Chrome密码管理

  1. 在“已保存的密码”右边找到“三个点”,单击会弹出“导出密码”,再点击按要求可导出密码。

导出密码

  1. 然后我们就能在保存的文件夹找到一个名称为“Chrome密码”的.csv文件。

导出的密码文件
第二步:在 BitWarden 导入数据
1、打开 BitWarden 网页版https://test.zhouli.online/
2、登录后,选择导航栏里的“工具-导入数据”,
3、导入文件格式选择 Chrome (csv),然后选中刚才的文件“Chrome密码.csv”,
4、点击“导入数据”,完成!
导入BitWarden

Lastpass

第一步:从 LastPass 导出数据
在浏览器端登录 LastPass,在左侧的 More option 中找到 Export,点击之后输入密码库主密码下载你的密码库文件(csv 表单)文件。
LastPass 导出数据
第二步:在 BitWarden 导入数据
同上,主要注意导入文件格式选择 LastPass (csv),然后选中刚才导出的文件“新建文本文档.csv”,点击“导入数据”,完成!
注意导入文件格式

多平台使用

Bitwarden支持Web、Chrome,Firefox、Opera 以及 Edge 浏览器插件,拥有 iOS、Android 客户端,因此我们可以根据需要选择安装Bitwarden的客户端即可。下面我主要介绍Bitwarden的谷歌浏览器插件和iOS端的使用。

浏览器插件

安装插件
在线安装:打开谷歌浏览器扩展商店,搜索Bitwarden就可以安装。
离线安装:如果网络上不方便打开谷歌浏览器扩展商店的朋友,可以使用离线下载方式。
插件配置
安装后点击浏览器上的Bitwarden小盾牌图标,弹出如图界面,然后点击弹出层左上角的选项按钮,进入插件设置。在设置界面,我们只需要填写【服务器URL】为上文自己部署的Bitwarden服务地址然后保存,这里也就是:https://test.zhouli.online/
保存后,我们就可以登录上文创建的账号了。登录后,我们切换到右下角设置-->选项,勾选自动填充选项,开启网页密码账号自动填充功能。
浏览器插件设置
插件使用
现在我们随便找个需要登录的网页,填写账号密码点击登录后,Bitwarden插件就会弹出是否要保存的提示了
Bitwarden密码保存提示
只要我们点击保存,下次再打开这个页面Bitwarden就能自动填充账号密码信息,如果是有多个账号,则需要点击小盾牌图标从列表里面选择一个账号来填充
多个账号可以选择切换
密码生成
Bitwarden插件同样还支持密码生成,我们在注册新的账号时,强烈推荐使用Bitwarden来生成随机密码,而不要使用我们经常好记的密码,这样安全性就能得到极大的提升。反正是这个随机密码由Bitwarden来记忆即可。
密码生成器

ios端使用

BitWarden 界面设计简洁,为的是需要在多个平台上使用统一的操作逻辑,所以不管是在电脑端,还是手机端的界面都是一样的。
我们以iPhone为例,在AppStore搜索Bitwarden并下载,点击左上角“小齿轮”进入设置页面,输入刚搭建好的网址,保存后回到登录页面输入账号密码即可登录。
Bitwarden手机端登录
BitWarden还支持 PIN 码登录,在手机端上甚至还支持指纹识别登录,使用起来相当的方便!开启指纹识别只需要:打开“设置 密码和帐户 自动填充密码”,勾选“BitWarden”,同时取消勾选默认自带的“钥匙串”,安卓上的操作方法也类似。
Bitwarden开启自动填充密码

更多发现

Bitwarden 其实也提供了和很多密码管理器类似的服务,比如说公开密码报告,重复使用的密码报告,弱密码报告等等,并且也可以根据一定的规则生成复杂密码。
密码生成器

开启两步验证

Bitwarden支持开启两步登陆,也就是在我们设定的静态主密码的基础上进一步开启了动态验证码二次验证登录。支持如下渠道
Bitwarden两步登录
这里推荐使用微软的Authenticator动态验证码APP,启动速度超快,每次启动前需要验证Touch ID,iOS上直接搜索Authenticator就可以下载安装了。如图只需要3步就能完成动态验证器的关联:
开启两步登录验证
完成操作后,我们再登录Bitwarden就需要每次启动时在手机上打开动态验证码来进行两步验证了
手机两步验证器

数据备份

数据备份本身就是一个老生常谈、不能忽视的关键节点,更别提是我们的密码数据了!因此,对于Bitwarden我们还需要设置下定时的数据备份。这里使用腾讯云的CMDCOS工具实现7天循环数据备份,定期自动保存一份副本到腾讯云的COS。

准备工作

创建存储桶
首先我们需要访问腾讯云COS开通对象存储服务,然后如下图创建Bucket,由于我们只用于备份,且为私密资料,所以选择私有读写。
存储桶设置
获取API密匙
接着,我们点击左侧的密钥管理,按照要求前往「云API密匙」进行操作
密匙管理
进入云API密匙界面如图创建密钥,如果先前已经有密钥了,则可以直接使用:
创建API密匙
这里我们需要记住3个信息:AppID,SecretID和SecretKey,待会要用。

安装备份工具

这里我们使用腾讯云官方提供的一个数据备份工具,使用 COSCMD 工具,用户可通过简单的命令行指令实现对对象(Object)的批量上传、下载、删除等操作。


环境准备
Linux下执行如下3条命令即可安装 coscmd

yum install python-pip
pip install --upgrade pip
pip install coscmd
如果出现和我一样的错误代码,可以参考我的解决方案,如果不是,请按照腾讯云官方文档是用其他方式安装。
解决报错
我在安装时候出现以下报错,可能是与之前宝塔面板自带的pip发生冲突
pip报错
然后我卸载了pip并重新安装了最新版本的pip
卸载pip
重新安装pip
然后我们再执行pip install coscmd就能完美安装了
安装COSCMD
安装完成后,我们使用coscmd -v检查是否安装完成
检查coscmd安装情况
像这样输出版本号就没问题了
配置COSCMD
Linux下直接执行如下命令即可(请先根据实际情况修改 secret_id、secret_key、bucket和region):
cat >~/.cos.conf<<EOF
[common]
secret_id = AChT4ThiXAbpBDEFGhT4ThiXAbp****
secret_key = WE54wreefvds3462refgwewe****
bucket = 请根据实际情况修改,填写存储桶名称
region = 请根据实际情况修改,比如广州区域是 ap-guangzhou
max_thread = 5
part_size = 1
schema = https
EOF

如果直接配置不成功,那么可以按我这种暴力方法来:

#直接创建一个config文件
vi .cos.conf
#然后修改配置文件
coscmd config -a AChT4ThiXAbpBDEFGhT4ThiXAbp**** -s WE54wreefvds3462refgwewe**** -b test-1234567812 -r ap-guangzhou

上传测试
工具配置好了之后,我们手工执行上传看看验证下结果,Linux执行如下命令行即可:

echo `date` > /tmp/test_upload.txt
coscmd upload /tmp/test_upload.txt test_upload.txt

上传测试
执行后正常输出如下:

root@localhost:/# echo `date` > /tmp/test_upload.txt
root@localhost:/# coscmd upload /tmp/test_upload.txt test_upload.txt
Upload /tmp/test_upload.txt   =>   cos://jager/test_upload.txt

如果没有报错,我们登陆腾讯云COS就可以看到刚刚上传的文件了:
cos检查上传文件

设置定时备份

我们首先使用ssh工具连接服务器,进入Bitwarden文件夹

#进入Bitwarden/opt文件夹
cd /data/bitwarden/opt
#使用vi工具创建一个自动备份文件
vi backup.sh

进入vi命令页面后,然后我们把自动备份脚本复制到这里

#!/bin/sh
###################################################################
#  Web Backup version 1.0.0 Author: Jager <im@zhang.ge>        #
# For more information please visit https://zhang.ge/5117.html #
#-----------------------------------------------------------------#
#  Copyright ©2016 zhang.ge. All rights reserved.              #
###################################################################
 
isDel=n
args=$#
isDel=${!args}
# 设置压缩包解压密码
mypassword=123456(这里可以自己改)
 
test -f /etc/profile && . /etc/profile >/dev/null 2>&1
baseDir=$(cd $(dirname $0) && pwd)
zip --version >/dev/null || yum install -y zip
ZIP=$(which zip)
TODAY=`date +%u`
PYTHON=$(which python)
MYSQLDUMP=$(which mysqldump)
 
# coscmd工具上传函数
uploadToCOS()
 {
     $PYTHON $baseDir/cos.upload.py 12345678912 A1B2C3D4E5F6G7H8I9JnKvLpMou MigxctUYGmGXshHSBiH56tRl test-12345678912 $1 $2
     file=$2
     domain=$1
     file_name=$(basename $2)
     coscmd upload $file $domain/$file_name
     if [[ $? -eq 0 ]] &&  [[ "$isDel" == "y" ]]
     then
         test -f $2 && rm -f $2
     fi
 }
 
printHelp()
{
clear
printf '
=====================================Help infomation=========================================
1. Use For Backup database:
The $1 must be [db]
    $2: [domain]
    $3: [dbname]
    $4: [mysqluser]
    $5: [mysqlpassword]
    $6: [back_path]
    $7: [isDel]
 
For example:./backup.sh db zhang.ge zhangge_db zhangge 123456 /home/wwwbackup/zhang.ge
 
2. Use For Backup webfile:
The $1 must be {file}:
    $2: [domain]
    $3: [site_path]
    $4: [back_path]
    $5: [isDel]
 
For example:./backup.sh file zhang.ge /home/wwwroot/zhang.ge /home/wwwbackup/zhang.ge
=====================================End of Hlep==============================================
 
'
exit 0
}
 
backupDB()
{
    domain=$1
    dbname=$2
    mysqluser=$3
    mysqlpd=$4
    back_path=$5
    test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhang.ge..." && exit 2)
    cd $back_path
    #如果是要备份远程MySQL,则修改如下语句中localhost为远程MySQL地址
    $MYSQLDUMP -hlocalhost -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables --default-character-set=utf8 >$back_path/$domain\_db_$TODAY\.sql
    test -f $back_path/$domain\_db_$TODAY\.sql || (echo "MysqlDump failed! Please CheckOut Or feedback to zhang.ge..." && exit 2)
    $ZIP -P$mypassword -m $back_path/$domain\_db_$TODAY\.zip $domain\_db_$TODAY\.sql && \
    uploadToCOS $domain $back_path/$domain\_db_$TODAY\.zip
}
 
backupFile()
{
    domain=$1
    site_path=$2
    back_path=$3
    test -d $site_path || (echo "$site_path not found! Please CheckOut Or feedback to zhang.ge..." && exit 2)
    test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhang.ge..." && exit 2)
    test -f $back_path/$domain\_$TODAY\.zip && rm -f $back_path/$domain\_$TODAY\.zip
    $ZIP -P$mypassword -9r $back_path/$domain\_$TODAY\.zip $site_path && \
    uploadToCOS $domain $back_path/$domain\_$TODAY\.zip    
}
 
while [ $1 ]; do
    case $1 in
        '--db' | 'db' )
        backupDB $2 $3 $4 $5 $6
        exit
        ;;
        '--file' | 'file' )
        backupFile $2 $3 $4
        exit  
        ;;
        * )
        printHelp
        exit
        ;;
    esac
done
printHelp

上面代码中只需要改两个地方就行:

#第13行,mypassword后面自定义密码
mypassword=123456
#第26行,这里需要改四点
$PYTHON $baseDir/cos.upload.py 12345678912 A1B2C3D4E5F6G7H8I9JnKvLpMou MigxctUYGmGXshHSBiH56tRl test-12345678912 $1 $2
#12345678912 这个是你cos后缀,比如你的存储桶名称是test-123456,那么这里就写“—”后的数字123456
#A1B2C3D4E5F6G7H8I9JnKvLpMou 这个是secret_id
#MigxctUYGmGXshHSBiH56tRl 这个是secret_key
#test-12345678912 这个是存储桶名称

然后手工执行一次数据备份看看效果:

bash /data/bitwarden/opt/backup.sh file test.zhouli.online /data/bitwarden/data /data/bitwarden/backup 

像我这样这场传输文件就行:
手动备份
若备份成功,我们在crontab新增一个定时任务,实现定期备份数据:

0 3 * * * bash /data/bitwarden/opt/backup.sh file test.zhouli.online /data/bitwarden/data /data/bitwarden/backup >/dev/null 2>&1

总结

本文简要介绍了当代密码安全问题,并通过结合腾讯云CDN、CVM、COS、DNSPod及免费SSL证书等服务,基于Bitwarden开源密码管理软件打造了个人私有密码管理服务。并在常见使用场景及安全加固方面做了较为详细的介绍。想自己部署私有密码管理服务的朋友可以参考完成。如果觉得阅读本文后任何疑问都可以在本文后面留言说明,博主会定期回复。

更新问题

3月1日 发现网站打不开,检查后排除了cdn的问题,用端口测试工具检查8080端口发现端口关闭,检查轻量服务器防火墙和宝塔面板发现端口正常开启,于是重装docker,重装中报错WARNING: IPv4 forwarding is disabled. Networking will not work.,查询得到以下解决办法:

vi /etc/sysctl.conf
net.ipv4.ip_forward=1  #添加这段代码
#重启network服务
systemctl restart network && systemctl restart docker
#查看是否修改成功 (备注:返回1,就是成功)
[root@VM-8-5-centos ~]] sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

4月2日 发现网站打不开,重装docker后第一次打开正常,后面就无法正常启动了,端口和CDN都正常。没有办法,只能删除重装并清理镜像了,清理镜像后再重装发现正常,应该是3月底增加send这个更新改了某些关键代码使得无法正常启动,重新拉取镜像后测试正常,但是关闭注册后又异常,现在只能开放注册。下面是删除docker容器和镜像的方法:

docker ps -a   ##docker查询容器
docker rm -f  bitwarden ##docker删除名为bitwarden的容器
docker images   ##docker查询镜像
docker rmi  ID   ##docker删除镜像,ID为镜像IMAGE ID 

参考文章

张戈-基于Bitwarden打造个人专属密码管理服务
张戈-利用腾讯云COS云对象存储定时远程备份网站
腾讯云官方文档-对象存储COSCMD工具
TomBen-你的密码安全吗?用这些方法来检查一下吧!
化学心情下2-登录信息就该自己掌握:基于私有云的 Bitwarden 迁移指南
蜗牛渣渣-LastPass最佳替代工具 BitWarden
努力哥-docker启动WARNING报错解决办法

最后修改:2025 年 02 月 10 日
如果觉得我的文章对你有用,请随意赞赏