安全地將秘密存儲在VCS回購中(即git,mercurial,subversion或Perforce)。這些命令使您可以輕鬆地在存儲庫中加密特定文件,因此您可以在存儲庫中“加密靜止”。但是,這些腳本使您可以輕鬆地在需要查看或編輯它們時解密它們,並解密它們用於生產。 Blackbox最初是為木偶寫的,現在可以使用任何git或mercurial存儲庫。
警告:該項目的目的是成為圍繞gpg
簡單包裝紙,以便您和您的同事不必記住它所有這些令人難以置信且令人困惑的旗幟。它並不是要成為解決所有問題或支持大量文件的複雜加密系統。理想的用例是將秘密保存在安全服務中,例如Conjur,AWS KMS,Azure Key Vault或GCP KMS;然後使用BlackBox安全存儲訪問該系統所需的API鍵。這樣,您正在加密單個小文件。其他任何東西都將被拒絕;不要期望甚至請求“企業功能”。如果這讓您失望,請考慮一個競爭項目,例如https://www.agwa.name/projects/git-crypt
幻燈片顯示(大約較舊的發行版)在SlideShare上。
加入我們的郵件列表:https://groups.google.com/d/forum/blackbox-project
假設您有一個VCS存儲庫(即Git或Mercurial Repo),並且某些文件包含諸如密碼或SSL私鑰之類的秘密。人們通常只是存儲這樣的文件“並希望沒有人在存儲庫中找到它們”。那不安全。
使用BlackBox,這些文件將使用GPG加密存儲。訪問VCS存儲庫也沒有正確的GPG密鑰,因此擁有文件毫無價值。只要您確保GPG鍵安全,就不必擔心將VCS存儲庫存儲在不受信任的服務器上。哎呀,即使您信任服務器,現在您也不必信任該服務器備份的人或處理備份磁帶的人員!
每個人都有訪問的人都有自己的GPG密鑰,而不是所有文件的一個GPG密碼。任何文件都可以由使用GPG密鑰的任何人解密。這樣,如果一個人離開公司,您就不必向訪問權限的每個人傳達一個新密碼。只需禁用不再可以訪問的一個密鑰即可。這樣做的過程與運行2個命令一樣容易(1個禁用其密鑰,1個重新加密所有文件。)
自動化過程通常需要訪問所有解密文件。這也很容易。例如,假設git用於木偶文件。主需要訪問所有文件的解密版本。只需為Puppet Master設置GPG密鑰(或將新文件推向Puppet Master的角色帳戶),然後在更新任何文件後將用戶運行blackbox_postdeploy
。
如果您沒有GPG密鑰,請使用以下說明進行設置,例如:設置GPG密鑰。
現在你準備好了。
cd
進入git,mercurial,subversion或Perforce存儲庫中,並運行blackbox_initialize
。
如果要加密文件,請運行blackbox_register_new_file
,您就完成了。
使用blackbox_addadmin
和blackbox_removeadmin
添加並刪除鍵。
要查看和/或編輯文件,請運行blackbox_edit
;這將解密文件並使用您的$編輯器環境變量指定的任何內容打開。
當您關閉編輯器時,文件將自動再次加密,臨時明文文件將被切碎。
如果您需要在更新時將文件解密,則可以使用blackbox_edit_start
解密文件和blackbox_edit_end
當您想“將其放回框中”時。
顯然,我們不希望洩漏SSL私鑰和密碼之類的秘密內容。
顯然,當我們將“秘密”存儲在git或mercurial的VCS回購中時,突然間,我們與其他人分享我們的代碼差。組織的子團體之間的溝通受到傷害。您也不能合作。您要么發現自己在附近的單個文件(Yuck!)中發送電子郵件,要與合作者(youck !!)所需的文件進行特殊的回購,或者只是決定合作不值得(Yuck !!!)。
除了一些特定的文件外,對我們的代碼的開放和透明的能力是DevOps和現代IT從業人員需要做的那種協作的關鍵。
make copy-install
將將bin文件複製到$ prefix/bin,默認值為/usr/local(使用make copy-uninstall
卸載)。make symlinks-install
將將bin文件的符號鏈接到$前綴/bin中,默認值為/usr/local(使用make copy-uninstall
卸載)(在執行開發時有用)sudo port install vcs_blackbox
brew install blackbox
make packages-rpm
製作RPM;現在,您可以通過本地方法分發RPM。 (需要FPM。)make packages-deb
製作DEB;現在,您可以通過本地方法分發DEB。 (需要FPM。)antigen bundle StackExchange/blackbox
zgenom load StackExchange/blackbox
添加到.zshrc加載其他插件的位置。nix-shell -p blackbox
pkgin in scm-blackbox
姓名: | 描述: |
---|---|
blackbox_edit <file> | 解密,運行$編輯器,重新加入文件 |
blackbox_edit_start <file> | 解密文件,以便可以更新 |
blackbox_edit_end <file> | 使用BlackBox_edit_start之後加密文件 |
blackbox_cat <file> | 解密並查看文件的內容 |
blackbox_view <file> | 像blackbox_cat一樣,但管道達到less 或$ pager |
blackbox_diff | DIFF根據其原始密碼版本解密文件 |
blackbox_initialize | 啟用BlackBox進行git或hg repo |
blackbox_register_new_file <file> | 第一次加密文件 |
blackbox_deregister_file <file> | 從Blackbox中刪除文件 |
blackbox_list_files | 列出BlackBox維護的文件 |
blackbox_list_admins | 列出當前授權Blackbox的管理員 |
blackbox_decrypt_file <file> | 解密文件 |
blackbox_decrypt_all_files | 解密所有託管文件(交互式) |
blackbox_postdeploy | 解密所有託管文件(批次) |
blackbox_addadmin <gpg-key> | 將某人添加到可以加密/解密秘密的人列表中 |
blackbox_removeadmin <gpg-key> | 從可以加密/解密秘密的人列表中刪除某人 |
blackbox_shred_all_files | 安全刪除所有解密的文件 |
blackbox_update_all_files | 然後解密然後重新加密所有文件。更改鑰匙後有用 |
blackbox_whatsnew <file> | 顯示給定文件的最後一個提交中發生的變化 |
BlackBox自動確定您正在使用的VC並做正確的事情。它具有插件體系結構,可輕鬆擴展到其他系統。已經測試了與許多操作系統一起使用的。
git
hg
墨西哥svn
顛覆(謝謝Ben Drasin!)p4
穿孔.blackbox
目錄完好無損,則可以將文件解密要添加或修復VCS系統的支持,請在bin/_blackbox_common.sh
的末尾查找代碼
要添加或修復對新操作系統的支持,請在bin/_blackbox_common.sh
和bin/_stack_lib.sh
中查找案例語句,以及tools/confidence_test.sh
BlackBox可以與Cygwin,Mingw或WSL2一起使用。
BlackBox假設blackbox-admins.txt
和blackbox-files.txt
將具有LF線路結束。 Windows用戶應小心地配置Git或其他系統,以不轉換或“修復”這些文件。
如果使用git,請在.gitattributes
文件中添加以下行:
**/blackbox-admins.txt text eol=lf
**/blackbox-files.txt text eol=lf
blackbox_initialize
的最新版本將為您創建一個.gitattributes
文件(通常.blackbox
$BLACKBOXDATA
。
Cygwin支持需要以下包:
正常操作:
開發(如果您要添加代碼並想運行置信度測試)
mingw(帶有Windows的Git)支持需要以下內容:
正常操作:
MINTTY
而不是Windows控制台。您將從GIT BASH提示中執行BlackBox。download.bat
完成運行install.bat
,然後將這些工具的路徑添加到您的路徑(ex: PATH=%PATH%;c:GnuWin32bin
)發展:
make test
)如果您在WSL2中獲得以下錯誤,則可以嘗試通過以下說明設置環境(在WSL2上使用Ubuntu 22.04測試):
~/.gnupg/gpg-agent.conf
,然後添加以下行: pinentry-program "/mnt/c/Program Files (x86)/GnuPG/bin/pinentry-basic.exe"
gpg-connect-agent reloadagent /bye
GPG有許多不同的方法來加密文件。 BlackBox使用的模式可以使您指定可以解密消息的密鑰列表。
如果您有5個人(“ Admins”)應該能夠訪問秘密,則每個人都會創建一個GPG密鑰,並將其公共密鑰添加到鑰匙扣中。 GPG命令用於加密文件列表所有5個密鑰名稱,因此任何1個鍵都可以解密文件。
要刪除某人的訪問權限,請從管理員列表中刪除該管理員的密鑰名稱(即電子郵件地址),然後重新加入所有文件。他們仍然可以讀取.GPG文件(假設他們可以訪問存儲庫),但是他們不能再解密它了。
如果他們在刪除訪問權限之前保留舊存儲庫的副本怎麼辦?是的,他們可以解密文件的舊版本。這就是為什麼當管理員離開團隊時,您應該更改所有密碼,SSL證書等。您應該在Blackbox之前一直這樣做,對嗎?
為什麼不使用對稱鍵?換句話說,為什麼要弄亂所有這些GPG關鍵內容,而為什麼我們不只是用一個密碼加密所有文件。是的,GPG支持了這一點,但是隨後我們正在管理一個共享密碼,該密碼充滿了問題。如果有人“離開團隊”,我們將不得不向所有人通信新密碼。現在,我們只需要刪除他們的鑰匙。這會更好。
自動化流程如何在不要求密碼的情況下解密? GPG需要在私鑰上使用密碼。但是,它允許創建沒有密碼的子鍵。對於自動化流程,創建僅存儲在需要解密文件的機器上的子鑰匙。例如,在Stack Exchange中,當我們的連續集成(CI)系統將代碼更改為我們的木偶大師時,它們運行blackbox_postdeploy
以解密所有文件。運行此代碼的用戶具有不需要密碼的子鍵。由於我們有很多大師,每個人都有自己的鑰匙。而且,是的,這意味著我們的木偶大師必須非常安全。但是,它們已經很安全,因為就像花花公子一樣……如果您可以闖入某人的木偶大師,那麼您就擁有他們的網絡。
如果您使用木偶,為什麼不使用hiera-eyaml?有4個原因:
eval $(gpg-agent --daemon)
blackbox_edit_start FILENAME
vim FILENAME
blackbox_edit_end FILENAME
git commit -a
或hg commit
等等...甚至比這更容易!運行blackbox_edit FILENAME
,它將在臨時文件中解密該文件並在其上調用$EDITOR
,並在編輯器關閉後再次重新加密。
Ansible Vault提供了加密文件中存儲的整個文件和字符串的功能;但是,跟踪該模塊未處理解密所需的密碼。
取而代之的是,運行劇本時必須指定密碼文件。
密碼文件的示例: my_secret_password.txt.gpg
ansible-playbook --vault-password-file my_secret_password.txt site.yml
另外,可以在ANSIBLE_VAULT_PASSWORD_FILE
環境變量中指定這一點。
整個文件,例如SSL證書和私鑰,都像常規文件一樣對待。您只要將新版本推向Puppet Master,就可以解密它們。
加密文件的木偶示例: secret_file.key.gpg
file { '/etc/my_little_secret.key':
ensure => 'file',
owner => 'root',
group => 'puppet',
mode => '0760',
source => "puppet:///modules/${module_name}/secret_file.key",
}
小字符串(例如密碼和API鍵)存儲在hiera yaml文件中,您將其加密使用blackbox_register_new_file
。例如,我們使用一個名為blackbox.yaml
的文件。您可以使用hiera()函數訪問它們。
設置:通過在搜索層次結構中添加“ BlackBox”來配置hiera.yaml
:
:hierarchy:
- ...
- blackbox
- ...
在blackbox.yaml指定:
---
module::test_password: "my secret password"
在您的木偶代碼中,按照任何HIERA數據訪問密碼:
$the_password = hiera('module::test_password', 'fail')
file {'/tmp/debug-blackbox.txt':
content => $the_password,
owner => 'root',
group => 'root',
mode => '0600',
}
變量$the_password
將包含“我的秘密密碼”,並且可以在使用字符串的任何地方使用。
eval $(gpg-agent --daemon)
blackbox_register_new_file path/to/file.name.key
可以在命令行上指定多個文件名:
示例1:註冊2文件:
blackbox_register_new_file file1.txt file2.txt
示例2:註冊$DIR
中的所有文件:
find $DIR -type f -not -name '*.gpg' -print0 | xargs -0 blackbox_register_new_file
這很少發生,但是我們已經涵蓋了:
blackbox_deregister_file path/to/file.name.key
僅供參考:您的存儲庫可以使用keyrings/live
而不是.blackbox
。請參閱“配置存儲在哪裡?”
.blackbox/blackbox-admins.txt
是一個文件,列出了用戶可以解密文件的文件。 (更精緻的是,它是該文件要加密的gnupg密鑰名稱的列表。)
要加入可以編輯文件的人員列表,需要三個步驟;您創建一個GPG鍵並將其添加到鍵環。然後,已經擁有訪問權限的人將您添加到系統中。最後,您應該測試訪問權限。
如果您還沒有GPG密鑰,則是生成一個密鑰:
gpg --gen-key
警告:GPG的新版本會生成鍵,而GPG的舊版本無法理解。如果您生成具有新版本GPG的鍵,這將為舊版本的GPG用戶帶來問題。因此,建議您確保使用BlackBox的每個人都具有GPG完全相同的版本,或者使用GPG版本與使用BlackBox的所有人使用的GPG一樣古老的GPG生成GPG密鑰。
選擇加密設置的默認設置,0到期。選擇一個非常好的密碼。存儲私有鑰匙的備份。例如,將備份副本保留在安全保險箱中的USB驅動器上。或者,至少將其放在很少或沒有Internet訪問,全盤加密等的安全機器上。您的雇主可能有關於如何存儲此類內容的規則。
僅供參考:如果生成鑰匙很慢,則通常是因為系統不會生成足夠的熵。提示:打開該機器上的另一個窗口並運行此命令: ls -R /
現在您有了GPG密鑰,將自己添加為管理員:
blackbox_addadmin KEYNAME
...其中“ keyname”是您先前創建的GPG密鑰中列出的電子郵件地址。例如:
blackbox_addadmin [email protected]
當命令成功完成時,將輸出有關如何提交這些更改的說明。運行給出的命令以提交更改。看起來像這樣:
git commit -m'NEW ADMIN: [email protected]' .blackbox/pubring.gpg .blackbox/trustdb.gpg .blackbox/blackbox-admins.txt
然後將其推到倉庫:
git push
or
ht push
(or whatever is appropriate)
注意:創建一個角色帳戶?如果要添加角色帳戶的pubring.gpg,則可以指定可以在其中找到pubring.gpg文件的目錄,以找到第二個參數: blackbox_addadmin [email protected] /path/to/the/dir
詢問已經可以重新加入數據文件的人。這使您可以訪問。他們只是簡單地解密並重新加密數據而無需進行任何更改。
預檢查:驗證新鍵看起來不錯。
git pull # Or whatever is required for your system
gpg --homedir=.blackbox --list-keys
例如,檢查關鍵名稱(電子郵件地址),以確保其符合公司標準。
將鑰匙扣導入您的個人鑰匙扣和重新連接:
gpg --import .blackbox/pubring.gpg
blackbox_update_all_files
按重新加密文件:
git commit -a
git push
or
hg commit
hg push
確保您可以解密文件。 (建議:將虛擬文件保留在VC中,只是供新朋友練習。)
只需使用其keyname運行blackbox_removeadmin
,然後重新加入:
例子:
blackbox_removeadmin [email protected]
blackbox_update_all_files
命令完成後,您將提醒您檢查更改並將其推開。
請注意,他們的鑰匙仍將在鑰匙圈中,但他們會毫無使用。如果您想清理鑰匙扣,請使用普通的GPG命令並在文件中檢查。
僅供參考:您的存儲庫可以使用keyrings/live
而不是.blackbox
。請參閱“配置存儲在哪裡?”
gpg --homedir=.blackbox --list-keys
gpg --homedir=.blackbox --delete-key [email protected]
git commit -m'Cleaned [email protected] from keyring' .blackbox/*
僅供參考:您的存儲庫可以使用keyrings/live
而不是.blackbox
。請參閱“配置存儲在哪裡?”
鑰匙圈只有公共鑰匙。沒有秘密的關鍵要刪除。
請記住,這個人確實可以一次訪問所有秘密。他們本可以副本。因此,要完全安全,您應該更改所有密碼,生成新的SSL鍵,依此類推,就像有特權訪問權限的任何人離開組織一樣。
驗證密鑰的可信度是BlackBox無法完成的任務。這是一個完全外部主題,必須手動處理(例如,與生成/管理密鑰的方式相同)或通過專用機制(具有相應工作流程的公司CA)。除了信任網絡的“常見”好處(例如,請參見此處或此處),它還可以防止幾個錯誤。
從歷史上看,Blackbox正在使用並強制執行“每個關鍵”模型,但這已經改變了!現在,是否以及如何使用PGP/GPG信任模型的決定是通過配置(或PGP/GPG默認值)保留給用戶的。
當更新黑框時,如果尚未處理他們使用的密鑰的可信度,他們可能會遇到功能問題。現在是正確的時候,現在建立了您的信任網!
如果您有一個外部工作流程,可以確保鍵Blackbox使用的完整性,則可能需要禁用PGP/GPG信任模型並依靠此工作流程。
這可以通過宣布“信任模型”來實現,要么通過使用BlackBox時(通過定義別名或使用環境變量)將命令行參數--trust-model=always
傳遞給您的pgp/gpg二進制(例如GPG="gpg2 --trust-model=always"
)或兩者的組合)或始終在gpg.conf
中設置trust-model always
(請注意,這將禁用無處不在的信任網絡,而不僅僅是用於BlackBox)。
警告:根本不使用任何關鍵驗證是強烈不利的!這打開了繞過加密秘密機密性的各種方式!
BlackBox將其配置數據存儲在.blackbox
子目錄中。較舊的存儲庫使用keyrings/live
。對於向後兼容性,這兩個都可以工作。
所有文檔都涉及.blackbox
。
您可以通過簡單地重命名目錄來轉換舊存儲庫:
mv keyrings/live .blackbox
rmdir keyrings
沒有技術原因可以轉換舊存儲庫,只是它不那麼令人困惑。
此更改是在commit 60E782A0,版本v1.20180615中進行的。
詳細信息:
$BLACKBOXDATA
。如果設置了此環境變量,則將使用該目錄。如果列出了不存在的目錄,BlackBox將打印錯誤並退出。$BLACKBOXDATA
:(這是典型的用例)keyrings/live
使用,並使用它,如果存在。.blackbox
。如果不存在.blackbox
,則BlackBox將打印錯誤並退出。概述:
要將“ BlackBox”添加到Git或Mercurial Repo中,您需要執行以下操作:
僅供參考:您的存儲庫可以使用keyrings/live
而不是.blackbox
。請參閱“配置存儲在哪裡?”
您需要將BlackBox的“垃圾箱”目錄包含在您的路徑中:
export PATH=$PATH:/the/path/to/blackbox/bin
blackbox_initialize
如果您使用的是抗原,請在.zshrc中添加antigen bundle StackExchange/blackbox
,將下載此存儲庫,並將其添加到您的$路徑中。
請按照“如何將新用戶灌輸到系統中?”的說明。僅執行步驟1。
完成此操作後,通過確保可以將文件添加到系統中來測試系統是一個好主意(請參閱“如何將新文件註冊到系統中?”),其他用戶可以解密文件。
製作新文件並進行註冊:
rm -f foo.txt.gpg foo.txt
echo This is a test. >foo.txt
blackbox_register_new_file foo.txt
解密它:
blackbox_edit_start foo.txt.gpg
cat foo.txt
echo This is the new file contents. >foo.txt
重新加入它:
blackbox_edit_end foo.txt.gpg
ls -l foo.txt*
您應該只看到foo.txt.gpg
,因為foo.txt
應該消失。
下一步是提交foo.txt.gpg
,並確保其他用戶可以查看,查看和更改文件的內容。這是讀者的練習。如果您想冒險,請不要提交foo.txt.gpg
並刪除它。
即,這是木偶大師如何可以訪問未加密的數據的方式。
僅供參考:您的存儲庫可以使用keyrings/live
而不是.blackbox
。請參閱“配置存儲在哪裡?”
自動化用戶(“角色帳戶”)是必須能夠在沒有密碼的情況下解密的一個。通常,您需要為將文件從存儲庫拉到主人的用戶。這可以使用Jenkins CI或其他CI系統自動化。
GPG鍵必須具有密碼。但是,密碼酶是子鍵的可選。因此,我們將使用密碼創建一個鍵,然後在沒有密碼的情況下創建一個子鑰匙。由於子鑰匙非常強大,因此應在非常安全的機器上創建它。
還有另一個接球。該角色帳戶可能無法將文件檢查到git/mercurial中。它可能只能讀取存儲庫。這是一個很好的安全政策。這意味著角色帳戶不能用於將subkey公共位上傳到存儲庫中。
因此,我們將像您自己一樣在安全機器上創建密鑰/鑰匙。從那裡我們可以將公共部分投入回購。同樣,從此帳戶中,我們將導出角色帳戶所需的零件,將其複製到角色帳戶可以訪問它們的位置,並將其導入到角色帳戶中。
PROTIP:如果要求生成熵,請考慮在另一個窗口中的同一台計算機上運行此操作: sudo dd if=/dev/sda of=/dev/null
對於本文檔的其餘部分,您需要進行以下替代:
注意:這應該是更自動/腳本的。歡迎補丁。
在Securethost上,創建Puppet Master的鑰匙:
$ mkdir /tmp/NEWMASTER
$ cd /tmp/NEWMASTER
$ gpg --homedir . --gen-key
Your selection?
(1) RSA and RSA (default)
What keysize do you want? (2048) DEFAULT
Key is valid for? (0) DEFAULT
# Real name: Puppet CI Deploy Account
# Email address: [email protected]
注意:使用主機的用戶名@fqdn而不是真實的電子郵件地址,將使用鍵。如果您在許多機器上使用此角色帳戶,則每個人都應擁有自己的鑰匙。通過使用主機的FQDN,您將能夠知道哪個鍵是哪個。在此文檔中,我們將用戶名@fqdn稱為$ KEYNAME
保存在安全的地方!
創建一個沒有密碼的子鍵:
$ gpg --homedir . --edit-key svc_deployacct
gpg> addkey
(enter passphrase)
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
Your selection? 6
What keysize do you want? (2048)
Key is valid for? (0)
Command> key 2
(the new subkey has a "*" next to it)
Command> passwd
(enter the main key's passphrase)
(enter an empty passphrase for the subkey... confirm you want to do this)
Command> save
現在,將此目錄牢固地導出到Newmaster:
gpg --homedir . --export -a svc_sadeploy >/tmp/NEWMASTER/pubkey.txt
tar cvf /tmp/keys.tar .
rsync -avP /tmp/keys.tar NEWMASTER:/tmp/.
在Newmaster上,接收新的GNUPG配置:
sudo -u svc_deployacct bash
mkdir -m 0700 -p ~/.gnupg
cd ~/.gnupg && tar xpvf /tmp/keys.tar
返回SecureHost,將新的電子郵件地址添加到.blackbox/blackbox-admins.txt:
cd /path/to/the/repo
blackbox_addadmin $KEYNAME /tmp/NEWMASTER
驗證secring.gpg是一個零長度文件。如果不是這樣,您將以某種方式向鑰匙扣添加了一個私鑰。重新開始。
cd .blackbox
ls -l secring.gpg
提出最近的更改:
cd .blackbox
git commit -m"Adding key for KEYNAME" pubring.gpg trustdb.gpg blackbox-admins.txt
用新密鑰重新生成所有加密文件:
blackbox_update_all_files
git status
git commit -m"updated encryption" -a
git push
在Newmaster上,導入密鑰並解密文件:
sudo -u svc_sadeploy bash # Become the role account.
gpg --import /etc/puppet/.blackbox/pubring.gpg
export PATH=$PATH:/path/to/blackbox/bin
blackbox_postdeploy
sudo -u puppet cat /etc/puppet/hieradata/blackbox.yaml # or any encrypted file.
PROTIP:如果您獲得“ GPG:解密失敗:沒有秘密鍵”,那麼您忘了將BlackBox.YAML重新加入使用新鍵。
在SecureHost上,安全地刪除您的文件:
cd /tmp/NEWMASTER
# On machines with the "shred" command:
shred -u /tmp/keys.tar
find . -type f -print0 | xargs -0 shred -u
# All else:
rm -rf /tmp/NEWMASTER
還切碎了您可能製作的任何其他臨時文件。
如果某人的鑰匙已經過期,則BlackBox將停止加密。您會看到此錯誤:
$ blackbox_edit_end modified_file.txt
--> Error: can't re-encrypt because a key has expired.
僅供參考:您的存儲庫可以使用keyrings/live
而不是.blackbox
。請參閱“配置存儲在哪裡?”
您還可以通過發出此命令來檢測即將到期的密鑰,並手動查看“過期:”日期:
gpg --homedir=.blackbox --list-keys
或...列表UID將在今天起1個月內到期:(警告:這也列出了無效日期的鑰匙)
gpg --homedir=.blackbox --list-keys --with-colons --fixed-list-mode | grep ^uid | awk -F: '$6 < '$(( $(date +%s) + 2592000))
這是替換密鑰的方法:
警告:此過程將刪除您在編輯過程中的任何未加密文件。將它們複製到其他地方,並在完成時還原更改。
blackbox_removeadmin [email protected]
# This next command overwrites any changed unencrypted files. See warning above.
blackbox_update_all_files
git commit -m "Re-encrypt all files"
gpg --homedir=.blackbox --delete-key [email protected]
git commit -m 'Cleaned [email protected] from keyring' .blackbox/*
git push
git pull
blackbox_addadmin [email protected]
git commit -m'NEW ADMIN: [email protected] .blackbox/pubring.gpg .blackbox/trustdb.gpg .blackbox/blackbox-admins.txt
git push
git pull
gpg --import .blackbox/pubring.gpg
blackbox_update_all_files
git commit -m "Re-encrypt all files"
git push
現在,在第一步中暫時復制的任何文件現在都可以復制並重新加入blackbox_edit_end
命令。
(感謝@chishaku找到解決此問題的解決方案!)
可以告訴git在通過git diff
或git log
運行文件之前,將其解密版本。要實現這一目標:
.gitattributes
: *.gpg diff=blackbox
.git/config
: [diff "blackbox"]
textconv = gpg --use-agent -q --batch --decrypt
現在,諸如git log -p file.gpg
之類的命令將顯示加密文件中更改的不錯日誌。
gpg: filename: skipped: No public key
- 通常這意味著.blackbox/blackbox-admins.txt
中的項目不是密鑰的名稱。要么插入了無效的東西(例如文件名而不是用戶名),要么用戶離開了組織,並將其鑰匙從鑰匙扣中刪除,但它們的名稱並未從BlackBox-Admins.txt文件中刪除。
gpg: decryption failed: No secret key
- 通常意味著您忘記使用新密鑰重新加密文件。
Error: can't re-encrypt because a key has expired.
- 用戶的密鑰已過期,無法再加密。按照替換過期的鍵提示。
僅供參考:您的存儲庫可以使用keyrings/live
而不是.blackbox
。請參閱“配置存儲在哪裡?”
如果文件是從存儲庫中復制的,它們仍然可以被解密和編輯。顯然,編輯,鑰匙的更改以及如果將其製成倉庫之外,則會丟失。另請注意,命令最有可能僅在從基本目錄運行時(即.blackbox目錄的父)運行。
以下命令在存儲庫外進行了測試:
blackbox_postdeploy
blackbox_edit_start
blackbox_edit_end
當前的實現將將BlackBox存儲在/keyrings
中,以整個存儲庫的根。這將在具有不同根部的環境之間產生一個問題(即在生產中查看/
在開發/releases/foo
上進行檢查 /簽名)。為了解決這個問題,您可以export BLACKBOX_REPOBASE=/path/to/repo
並為您的存儲庫設置特定的基礎。
這最初是為git編寫的,並支持了兩階提案,其中commit
是本地提交,當某些內容被註冊或用系統註冊時,“推動”將更改發送到版本控制服務器上游。當您執行blackbox_*
命令時,當前實現將立即commit
文件(上游顛覆服務器)。
在某些情況下,團隊成員或自動角色需要與系統GPG 1.x一起安裝GPG 2.X,以趕上團隊的GPG版本。在Ubuntu 16上,您可以apt-get install gnupg2
。如果要使用此GPG2二進製文件,請使用GPG = GPG2運行每個BlackBox命令。
例如:
GPG=gpg2 blackbox_postdeploy
我們歡迎問題,錯誤報告和反饋!
最好的起點是加入BlackBox-Project郵件列表並在此詢問。
在Github,在此處跟踪錯誤。請隨時自行報告錯誤。
代碼提交很高興歡迎!代碼很容易閱讀。
獲取代碼:
git clone [email protected]:StackExchange/blackbox.git
測試您的更改:
make confidence
這通過許多系統測試進行。它創建一個倉庫,加密文件,解密文件等。您可以運行這些測試以驗證您所做的更改並沒有破壞任何內容。您還可以使用這些測試來驗證該系統是否與新操作系統一起使用。
請提交具有代碼更改的測試:
更改黑框的最佳方法是通過測試驅動的開發。首先將測試添加到tools/confidence.sh
。該測試應失敗,並證明需要進行您將要進行的更改。然後修復錯誤或添加所需的功能。完成後, make confidence
應通過所有測試。您提交的公關應包括您的代碼以及新測試。這樣,隨著系統的增長,置信度測試會積累,因為我們知道未來的變化不會破壞舊功能。
注意:這些測試當前假設“ GIT”,並且僅在CentOS,Mac OS X和Cygwin上進行了測試。歡迎補丁!
這是其他開源軟件包,它們可以做類似於BlackBox的事情。如果您比Blackbox更喜歡它們,請使用它們。
Git-Crypt具有最佳的GIT整合。設置後,它幾乎對用戶透明。但是,它只能與git一起使用。
此內容是根據MIT許可發布的。請參閱許可證文件。