如何使用多个密钥的 git-crypt

问题描述 投票:0回答:1

根据手册页

git-crypt 支持每个存储库多个密钥,允许您与不同的协作者组共享不同的文件。

这就是我正在努力实现的目标。我只希望某些协作者能够访问我代码的某些部分。

这就是我所做的:

git-crypt init
git-crypt init --key-name key1
git-crypt init --key-name key2

这是我的

.gitattributes
文件:

src/secretfile1.txt filter=git-crypt diff=git-crypt key-name=key1
src/secretfile2.txt filter=git-crypt diff=git-crypt key-name=key2

但是当我克隆存储库并尝试在另一台计算机上执行

git-crypt unlock
时,
key1
key2
不会解锁任何一个文件。但默认钥匙将同时解锁
src/secretfile1.txt
src/secretfile2.txt

我希望能够控制谁可以访问哪个文件。每个人都使用公用密钥对我来说并不好,因为我希望有人能够访问文件#1,但不能访问文件#2,并且我希望其他人能够访问文件#2,但不能访问文件#1。

我做错了什么?

git security git-crypt
1个回答
0
投票

我找到了答案在这里

除了隐式默认密钥之外,git-crypt还支持替代密钥,可用于加密特定文件并可与特定GPG用户共享。如果您想授予不同的协作者访问不同文件集的权限,这非常有用。

要生成名为 KEYNAME 的备用密钥,请将

-k KEYNAME
选项传递给
git-crypt init
,如下所示:

git-crypt init -k KEYNAME

要使用备用密钥加密文件,请使用

git-crypt-KEYNAME filter
中的
.gitattributes
,如下所示:

secretfile filter=git-crypt-KEYNAME diff=git-crypt-KEYNAME

要导出备用密钥或与 GPG 用户共享,请将

-k KEYNAME
选项传递给
git-crypt export-key
git-crypt add-gpg-user
,如下所示:

git-crypt export-key -k KEYNAME /path/to/keyfile
git-crypt add-gpg-user -k KEYNAME GPG_USER_ID

要使用备用密钥解锁存储库,请通常使用

git-crypt unlock
。 git-crypt 将自动确定正在使用哪个密钥。

一些注意事项:

使用

-k
选项,
--key-name
选项。我知道手册页说它们是相同的,但事实并非如此。有时(我不明白为什么)
--key-name
选项会被忽略,最终您将使用默认键而不会出现任何错误消息。

此外,我发现通过添加 GPG 用户来设置访问权限比共享对称密钥更容易。这是因为每当你输入一个它不太理解的命令时 git-crypt 都会使用默认密钥,并且你无法知道你刚刚使用哪个密钥加密了数据,除非你推送更改,将密钥传输到另一台计算机,并测试看看哪个键有效。

但是如果您通过 GPG 添加协作者的公钥,您可以使用此命令轻松查看谁已添加到哪个密钥:

pushd .git-crypt/keys/KEYNAME/0; for file in *.gpg; do echo "${file} : " && git log -- ${file} | sed -n 9p; done; popd

这将打印出已添加到 KEYNAME 的协作者列表。如果只有 git-crypt 会显示成功/失败消息,我就能更快地解决这个问题。但是,一旦我弄清楚如何查看哪个用户被添加到哪个密钥,我终于开始了解 git-crypt 的工作原理,并且能够以正确的方式设置一切。

© www.soinside.com 2019 - 2024. All rights reserved.