安全地将秘密存储在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许可发布的。请参阅许可证文件。