1 前言
作為一個計算機愛好者,選擇統一的密碼還是每個軟件一個單獨的密碼,永遠是個困境;
一個人要記住太多的密碼是不太現實的,保持密碼以書面形式又是非常不安全的;
對於數量越來越多的賬號密碼,一直以來,我都在尋找一個安全、快速、方便的密碼長期保存方式;
從手寫筆記到手機備忘錄,
從txt文檔到word文檔,
從自己手動備份到onedrive自動同步...
現如今比較流行的方式是使用密碼管理工具進行密碼的統一管理,這類軟件一般擁有多平台客戶端、瀏覽器插件等,密碼一般加密保存到本地或者雲端;
密碼管理工具很多,有人說最好的密碼管理工具是 1Password,但是他實在是賣的太貴了,暫時不考慮;
再對比各大軟件,其實各有特色。有的傾向於將密碼庫儲存到雲端,有的可將密碼庫儲存到本地進行自己保存,有的開源,有的是私有化,有的還提供私有化部署
最終我選擇使用Bitwarden來搭建私人密碼庫,比較全的客戶端覆蓋,提供開源免費版,還提供私有化部署,滿足了我對密碼庫的所有要求;
2 Bitwarden Server
Bitwarden 官方提供私有化部署,有一鍵部署腳本和手動部署兩種方式,不過官方由於使用的是 MSSQL 數據庫,整體部署下來對機器配置要求較高
官方推薦服務器配置
只部署一個私人密碼庫,使用這么重量級的應用是不符合我的習慣的(錢包頂不住)
經過我的一番查找,終於在Github發現了有dalao使用 Ruby 開發了一個兼容的 Bitwarden 服務器:bitwarden_rs,並且提供了 Docker 鏡像部署;
Github傳送門:https://github.com/dani-garcia/bitwarden_rs
該服務器端系統配置要求很低,Docker鏡像體積也很小,部署非常方便,使用 SQLite 服務器來存儲數據,對於個人來說已經足夠;
最終就選擇使用它來作為我的密碼庫的服務器端。
3 准備
首先需要你有一個域名,一台安裝了Docker環境的服務器;
可參考Docker官方文檔:https://docs.docker.com/get-docker/ 來進行Docker的安裝
為方便部署和更新,本文使用 docker-compose 來管理服務
在linux下可使用如下命令進行 docker-compose 的安裝和更新
sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
如果要進行更新,替換1.27.4為最新的版本號即可。
查看最新版本:https://github.com/docker/compose/releases
4 安裝Bitwarden
4.1 創建Bitwarden數據存放目錄
mkdir -p /data/bitwarden && cd /data/bitwarden
4.2 創建docker-compose配置文件
cat >> docker-compose.yml <<EOF version: '3' services: # 服務名稱 bitwarden: # 指定使用 Docker Hub 中的最新鏡像 image: bitwardenrs/server:latest # 容器名稱 container_name: bitwarden # 開機自動啟動 restart: always # 指定容器內的 /data 目錄掛載到宿主機的當前目錄下的 /data/bitwarden/data 目錄,這樣你可以在宿主機上執行數據庫的備份操作 volumes: - /data/docker/bitwarden/data:/data # bitwarden配置 environment: # 開啟網頁訪問 WEB_VAULT_ENABLED: 'true' # 開啟新用戶注冊,我們注冊后關閉即可 SIGNUPS_ALLOWED: 'true' # 開啟長連接 WEBSOCKET_ENABLED: 'true' # 日志文件 LOG_FILE: /data/bitwarden.log # 將容器內的80/3012端口映射到宿主機的7006/7007端口;其中80端口為 HTTP 服務,3012 端口是 websockets 服務 ports: - 7006:80 - 7007:3012 EOF
4.3 Nginx反向代理配置
#bitwarden location / { proxy_pass http://127.0.0.1:7006; 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:7007; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /notifications/hub/negotiate { proxy_pass http://127.0.0.1:7006; }
以上配置為最基礎的配置,你還可以加入 HSTS / 壓縮 / XSS 防護等配置;
詳細配置請參考官方文檔:https://github.com/dani-garcia/bitwarden_rs/wiki/Proxy-examples
現在已經是 2020 年,請為域名配置 HTTPS 證書,並將 HTTP 流量阻擋或重定向到 HTTPS,以保障數據傳輸的安全。
4.4 啟動docker服務
docker-compose up -d
4.5 內存占用
5 用戶注冊和數據導入
注冊登錄后可在上方的工具中進行數據導入,支持多種格式的數據導入
6 關閉新用戶注冊
現在你的bitwarden服務器允許任何人訪問和注冊,如果你只需要自己使用,可以關閉用戶注冊功能。
調整docker-compose配置文件
SIGNUPS_ALLOWED: 'false'
改動配置后需要運行以下命令來刪除並重新創建容器以使配置生效,無需擔心你的數據,我們的數據均保存在我們第4.1中創建的目錄中
docker-compose down && docker-compose up -d
這樣就關閉了用戶注冊功能,並禁用了 web 的訪問。密碼數據我們還是可以在客戶端中進行編輯的。
7 登錄客戶端
服務器端安裝完畢后,我們需要登錄到客戶端來進行密碼的管理和自動填充,Bitwarden的客戶端都大同小異,這里以Chrome擴展為例:
首先我們在登錄頁面點擊小齒輪
之后使用我們剛剛注冊的賬號進行登錄即可,其他客戶端的配置和這里是一樣的。
8 備份
我們在使用過程中的所有數據都保存在我們創建的目錄:/data/bitwarden 中
為保證數據安全我們最好定期將該目錄的數據進行備份
你可以自己手動備份也可以使用我們的自動備份腳本:WebServerAutoBackup
Github: https://github.com/ehaut/WebServerAutoBackup
配置文件中填寫備份目錄為:/data/bitwarden
然后在crontab定時任務中添加定時任務,即可每日進行備份到你指定的地方。
#每日凌晨 2:15 備份bitwarden 15 2 * * * cd /root/WebServerAutoBackup && ./backup.sh config-bitwarden.ini > /data/backup/log/bitwarden-cron.log 2>&1 & 1
9 更新
由於使用的是非官方的服務器端,所以作者們會經常同步更新到官方的更新中,以保證與客戶端的兼容性
更新也是直接運行如下命令即可
cd /data/bitwarden //停止運行的bitwarden容器 docker-compose stop //拉取最新鏡像 docker-compose pull //重新構建並啟動 docker-compose up -d --build
10 安全提醒
對於使用任何密碼管理工具的人來說,主密碼的重要性不言而喻。一旦主密碼泄漏,相當於將所有帳號密碼拱手相讓;一旦主密碼丟失,所有數據也都化作隨機噪音,變得一文不值。所以,請時常審視、改進你的安全策略,定期對帳號做安全審查,不定期修改並牢記主密碼。