「玩轉騰訊雲」有獎徵文活動正在如火如荼進行當中,不時有優秀的做品出現,本文是對其中一篇的摘錄。你是否由於總記不住一大堆帳號密碼而煩惱?是否對第三方記錄密碼服務心存戒心?雲+社區專欄熱門做者,騰訊高級工程師張戈教你們基於騰訊雲服務,低成本打造私有密碼管理服務的方案!
在咱們的生活和工做當中,會用到很是多的網絡應用,由於並非每一個應用都能用相似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(非長期提供,請勿正式使用),方便你們嚐鮮、對比:
因屬於公開、臨時服務,請你們千萬不要記錄真實密碼,避免帶來沒必要要的損失!!