「玩转腾讯云」有奖征文活动正在如火如荼进行当中,不时有优秀的做品出现,本文是对其中一篇的摘录。你是否由于总记不住一大堆帐号密码而烦恼?是否对第三方记录密码服务心存戒心?云+社区专栏热门做者,腾讯高级工程师张戈教你们基于腾讯云服务,低成本打造私有密码管理服务的方案!
在咱们的生活和工做当中,会用到很是多的网络应用,由于并非每一个应用都能用相似QQ/微信一键登陆的方式来绑定帐号,因此也就有了很是多的帐号密码,记密码成为了让咱们很是头疼的事情。太简单或者过于单一的密码容易被撞库或“脱裤”,而太复杂的密码又难以记忆。css
所以,市面上就有了多款帮助咱们记录密码的软件服务,好比1password、Lastpass等。这些软件可以自动抓取咱们提交的帐号密码保存到云端,实现多终端同步、自动填充密码等功能。虽然说这类服务通常仍是比较靠谱的,并且还有一些付费套餐。可是密码存在别人的服务器上你老是会有些不放心,谁知道哪天会不会出现数据泄露之类的问题?html
鉴于此,本文分享一个基于腾讯云服务,低成本打造我的专属密码管理服务的方案,妈妈不再用担忧我记不住密码啦!python
本文完整的方案会用到DNSPod、腾讯云CDN、CVM以及COS 4个云服务,所以咱们先登陆腾讯云控制台购买或激活服务:mysql
Ps:对于新人,推荐使用【新人免费产品专区】的免费体验产品来落地方案,等决定正式启用也能够付费转为正式服务;对于已经有服务器的老鸟,就能够直接复用已有服务器啦,固然也不只限于腾讯云CVM;对于有自建NAS或树莓派的朋友,一样也能够参考部署,不过必定要注意数据备份哦!nginx
这里简单说下腾讯云免费证书的申请步骤:git
一、首先打开腾讯云的免费证书申请页面,如图填写信息:github
腾讯云免费SSL证书申请web
二、而后,在DNSPod管理的域名直接选自动验证便可,其余根据实际状况选择:sql
腾讯云免费SSL证书申请docker
三、最后,等待自动颁发便可:
腾讯云免费SSL证书申请
如下步骤在全新的腾讯云CVM完成。
这里采用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
没错!本次私有密码管理方案正是基于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必须启用HTTPS访问管理界面才能正常注册,因此若是不打算套一层腾讯云CDN来作安全加固的话,还须要在本地部署一个Nginx来代理Bitwarden,以便开启HTTPS。
若是用腾讯云CDN的话,腾讯云CDN支持自定义源站端口,直接启用HTTPS,因此这步能够跳过。
Nginx代理配置步骤以下:
上文咱们已经提交了腾讯云免费证书申请,等成功颁发后,能够下载到证书文件包:
腾讯云免费SSL证书
而后将解压后Nginx目录下的crt和key文件上传到服务器,放到 /data/bitwarden/cert 目录便可:
腾讯云免费SSL证书
server { listen 443 ssl http2; server_name mm.zhangge.net; # 根据实际状况修改!!! ssl_certificate /data/bitwarden/cert/1_mm.zhangge.net_bundle.crt; # 根据实际状况修改!!! ssl_certificate_key /data/bitwarden/cert/2_mm.zhangge.net.key>;# 根据实际状况修改!!! ssl_session_cache shared:le_nginx_SSL:1m; ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; # Allow large attachments client_max_body_size 128M; location / { proxy_pass http://127.0.0.1:8080; 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://127.0.0.1:3012; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /notifications/hub/negotiate { proxy_pass http://127.0.0.1:8080; } }
docker run -d \ --name nginx \ --restart=always \ --net=host \ -v /data/bitwarden/cert:/data/bitwarden/cert \ -v /data/bitwarden/nginx/vhost.conf:/etc/nginx/conf.d/default.conf \ nginx:latest
若无心外,咱们只须要在DNSPod将 mm.zhangge.net 这个域名解析到CVM服务器的公网IP就能正常打开Bitwarden的管理后台了:
Bitwarden后台登陆界面
其余反向代理配置能够参考:https://github.com/dani-garci..._rs/wiki/Proxy-examples
这里用到CDN主要起到3个做用:
由于腾讯云CDN支持自定义端口的源站,因此上一步反向代理在使用腾讯云CDN的方案下是能够忽略不作的。
CDN配置步骤以下:
https://console.cloud.tencent...
CDN基本配置
CDN缓存过时配置
在基本配置界面CDN给分配的CNAME地址:
CDN分配的CNAME地址
复制这个地址,前往DNS解析面板,如图新增一个CNAME解析:
新增DNS解析记录
在等DNS解析生效期间,咱们回到腾讯云CDN配置面板,找到【高级配置】,启用HTTPS和HTTP2.0:
配置HTTPS和 HTTP2.0
在证书选择界面,选择腾讯云托管证书便可自动加载到咱们在上文申请到的免费证书了:
选择腾讯云托管证书
提交后,咱们回到域名配置,开启强制HTTPS和HTTP2.0:
开启HTTPS和HTTP2.0
作完以上配置,咱们就能够正常访问Bitwarden的后台管理了:https://mm.zhangge.net/,刚部署的服务尚未帐号,此时咱们点击【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密码管理服务。下面简单介绍下常见使用场景。
不少朋友确定用过一些市面上的密码管理,好比Lastpas、1Password等 ,若是在这些第三方密码管理平台上已经存在历史密码数据,咱们能够经过导出导入的方式将密码数据迁移到咱们本身部署的Bitwarden上来 。
Bitwarden支持Web、Chrome,Firefox、Opera 以及 Edge 浏览器插件,拥有 iOS、Android 客户端,所以咱们能够根据须要选择安装Bitwarden的客户端便可。下面我主要介绍下Bitwarden的谷歌浏览器插件的使用。
安装后点击浏览器上的Bitwarden小盾牌图标,弹出如图界面,而后点击弹出层左上角的选项按钮,进入插件设置:
插件设置
在设置界面,咱们只须要填写【服务器URL】为上文本身部署的Bitwarden服务地址而后保存,这里也就是 https://mm.zhangge.net/:
填写Bitwarden服务器URL
保存后,咱们就能够登陆上文建立的帐号了:
Bitwarden插件登陆
登陆后,咱们切换到右下角设置-->选项:
Bitwarden设置
勾选自动填充选项,开启网页密码帐号自动填充功能:
开启自动填充
如今咱们随便找个须要登陆的网页,填写帐号密码点击登陆后,Bitwarden插件就会弹出是否要保存的提示了:
Bitwarden密码保存提示
只要咱们点击保存,下次再打开这个页面Bitwarden就能自动填充帐号密码信息,若是是有多个帐号,则须要点击小盾牌图标从列表里面选择一个帐号来填充:
多个帐号能够选择切换
Bitwarden插件一样还支持密码生成,咱们在注册新的帐号时,强烈推荐使用Bitwarden来生成随机密码,而不要使用咱们常常好记的密码,这样安全性就能获得极大的提高。反正是这个随机密码由Bitwarden来记忆便可。
密码生成器
本身的密码有多重要这事确定不须要张戈来强调了,你们确定都会谨慎对待。所以咱们还须要对Bitwarden进行一些必要的安全加固。
前文已经介绍,再也不赘述。
Bitwarden支持开启两步登录,也就是在咱们设定的静态主密码的基础上进一步开启了动态验证码二次验证登陆。支持以下渠道:
Bitwarden两步登陆
这里推荐使用谷歌的Authenticator动态验证码APP,启动速度超快,IOS上直接搜索Authenticator就能够下载安装了。如图只须要3步就能完成动态验证器的关联:
开启两步登陆验证
完成操做后,咱们再登陆Bitwarden就须要在手机上打开动态验证码来进行两步验证了:
两步登陆,咱们能够勾选“记住我”,来记住当前客户端。
谷歌验证码APP界面
如此一来,咱们登陆Bitwarden,就须要使用动态验证码了,麻是麻烦点,可是更安全了!
数据备份自己就是一个老生常谈、不能忽视的关键节点,更别提是咱们的密码数据了!所以,对于Bitwarden咱们还须要设置下定时的数据备份。这里依然使用张戈博客常常提到的7天循环数据备份方案,并保存一份副本到腾讯云的COS。
教程地址:https://zhang.ge/5117.html,先参考教程开通、设置下COS。
文章中的备份脚本在这里一样适用,这里再次贴一下脚本内容:
#!/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() { 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
将代码保存到 /data/bitwarden/opt/backup.sh,而后手工执行一次数据备份看看效果:
bash /data/bitwarden/opt/backup.sh file mm.zhangge.net /data/bitwarden/data /data/bitwarden/backup
若备份成功,咱们在crontab新增一个定时任务,实现按期备份数据:
# 编辑crontab crontab -e # 插入一条定时任务: 0 3 * * * bash /data/bitwarden/opt/backup.sh file mm.zhangge.net /data/bitwarden/data /data/bitwarden/backup >/dev/null 2>&1
本文结合腾讯云CDN、CVM、COS、DNSPod及免费SSL证书等服务,基于Bitwarden开源密码管理软件打造了我的私有密码管理服务。并在常见使用场景及安全加固方面作了较为详细的介绍。想本身部署私有密码管理服务的朋友能够参考完成。
最后,附上本文部署的Bitwarden Demo(非长期提供,请勿正式使用),方便你们尝鲜、对比:
因属于公开、临时服务,请你们千万不要记录真实密码,避免带来没必要要的损失!!