使用 blackbox 加密 git 裡的檔案 — Part2
前一篇文章介紹了如何在 CentOS/Redhat 7 環境下安裝 blackbox,以及如何在 git repository 裡初始化 blackbox,這篇文章將簡單介紹一些 blackbox 的使用經驗。
以下都假設 username 為 xxx,用來產生 gpg key 的 email 為 xxx@ooo.com,請讀者自己轉換成自己的 username 及 email。
把自己加入 blackbox 管理者名單
切換到 git repository 的目錄底下,以 blackbox_addadmin 將自己加入 blackbox 的管理者名單
$ blackbox_addadmin xxx@ooo.com
gpg: `/home/xxx/work/crawler/keyrings/live/secring.gpg' 鑰匙圈已建立
gpg: `/home/xxx/work/crawler/keyrings/live/pubring.gpg' 鑰匙圈已建立
(略)
NEXT STEP: You need to manually check these in:
git commit -m'NEW ADMIN: myemail@mycompany.com' keyrings/live/pubring.gpg keyrings/live/trustdb.gpg keyrings/live/blackbox-admins.txt依照最後一行的指示做 git commit 的動作:
$ git commit -m'NEW ADMIN: xxx@ooo.com' keyrings/live/pubring.gpg keyrings/live/trustdb.gpg keyrings/live/blackbox-admins.txt這樣就完成了,很簡單吧,接下來就可以試試看加密檔案的功能是否有作用了。
但這邊有些人也許會遇到一個的狀況,就是你不小心在 blackbox_admin 時輸入了不對的 email,這將導致後面加密檔案的動作失敗,這時候你必須先把這個錯誤的 email (假設為 xxx@xxx.xxx) 移除:
$ blackbox_removeadmin xxx@xxx.xxx你可以查看 keyrings/live/blackbox-admins.txt 的內容來確認目前的管理者名單是否正確:
$ cat keyrings/live/blackbox-admins.txt
xxx@ooo.com如果這個名單的 email 對應的 gpg key 都存在,那麼加解密的動作應該就能正常運作。
加密檔案
要將檔案加密,就要將它加到 blackbox 的加密名單之中。我們按照官方的範例,新增一個檔案 foo.txt:
$ rm -f foo.txt.gpg foo.txt$ echo This is a test. >foo.txt$ blackbox_register_new_file foo.txt
========== PLAINFILE foo.txt
========== ENCRYPTED foo.txt.gpg
========== Importing keychain: START
(略)
[master 1976d98] registered in blackbox: foo.txt
2 files changed, 1 insertion(+)
create mode 100644 foo.txt.gpg
========== UPDATING VCS: DONE
Local repo updated. Please push when ready.
git push
這樣就完成加密檔案的動作了,接下來你可以按照指示做 git push 將變更同步到 remote 端。
但實際上到底發生了什麼事?我們如果下 git log -p 指令,就可以發現 blackbox_register_new_file foo.txt 這個指令自動幫我們做了三件事情:
- 將 foo.txt 加密成新檔案 foo.txt.gpg
- 將 foo.txt 加至 keyrings/live/blackbox-files.txt 名單
- 把上述兩個變更提交成一個 commit
此外,還有第四件事情是 git log -p 看不到的:如果你觀察 .gitignore 檔案會發現 foo.txt 也被加到裡面了,這樣就可以避免檔案被解密後忘記砍掉,又不小心被 commit 成 new file 的狀況,這樣檔案內容就又都跑上雲端了。
編輯加密過的檔案
假設被加密過的檔案名為 foo.txt.gpg,欲編輯可下指令:
$ blackbox_edit foo.txt.gpg這個指令會自動把檔案解密成 foo.txt,然後如果沒有特別設定 $EDITOR 環境變數的話預設會以 vi 開啟 foo.txt,當你編輯完成離開編輯器之後,會再自動將 foo.txt 加密回 foo.txt.gpg,然後砍掉 foo.txt。
我覺得一般情況下,使用 blackbox_edit 應該就夠了,但如果你需要將加解密的動作寫成腳本,或有其他需要看到未加密內容的需求,可以改以 blackbox_edit_start 及 blackbox_edit_end 指令來處理。
新增帳號至 blackbox 管理者名單
若要新增一個帳號到管理者名單之中,需要兩個人共同合作,以下分成兩個 part 來解說。
Part A
第一個是「要被加入的人」這個人必需要先用 email 產生自己的 gpg key (方法可參考前一篇文章)。
假設這個人的 username 為 zzz,用來生成 gpg key 的 email 是 zzz@ooo.com,那麼就請他切換到 repository 目錄底下,執行指令:
$ blackbox_addadmin zzz@ooo.com
(略)
NEXT STEP: You need to manually check these in:
git commit -m'NEW ADMIN: zzz@ooo.com' keyrings/live/pubring.gpg keyrings/live/trustdb.gpg keyrings/live/blackbox-admins.txt接下按照指示下指令做 git commit 的動作,然後 git push 到 remote 端即可。
Part B
第二個必需要是「已在管理者名單裡的人」,隨便一個都可以。這位仁兄第一件事是要先做 git pull,把 Part A 的更新先同步下來。
接著就按照官方文件,下指令:
$ gpg --homedir=keyrings/live --list-keys
gpg: WARNING: unsafe permissions on homedir `keyrings/live'
gpg: keyring `keyrings/live/pubring.gpg' created
gpg: keyrings/live/trustdb.gpg: trustdb created這裡會看到一個警告訊息,告訴你 keyrings/live 這個資料夾是不安全的。我們可以試著變更這個目錄的權限:
$ chmod 700 keyrings/live如果以後再下指令 gpg --homedir=keyrings/live --list-keys 就不會看到這個警告訊息了。因為這個資料夾是在 .gitignore 名單之中的,所以每個管理者都必需自己做一次這個動作。
接下來再繼續下指令:
$ gpg --import keyrings/live/pubring.gpg
(略)$ blackbox_update_all_files
========== blackbox administrators are:
(略)
[master ed5cb3a] Re-encrypted keys
3 files changed, 1 insertion(+)
rewrite foo.txt.gpg (100%)
========== DONE.
Likely next step:
git push
接著依照指示 git push,Part B 的工作就完成了。
最後,剛被加入管理者名單的人先執行 git pull 做更新之後,理論上就可以使用 blackbox_edit foo.txt.gpg 來編輯被加密過的檔案了。
至此,基本的 blackbox 使用方法大致上都記錄到了,其餘的功能例如將檔案從 blackbox 名單中移除,以及方便佈署的相關指令如 blackbox_shred_all_files 或 blackbox_postdeploy 等等,就留給讀者自行研究囉。

