我们开始使用git作为VCS,之前使用的是SVN,发现在git中你可以很容易地辨别出修改和提交背后的真正的人。现在我们想知道为什么选择这个设计,是否有什么我们忽略了的。
让我们假设以下几点:
1.每个人都在gitlab注册了一个ssh密钥
1.提交未与gpg签署
1.每个人都可以使用注册的ssh键来使用git bash
我们都知道author
和committer
只是git的元数据,很容易被欺骗,比如:
- git config --global --add user.email Incognito@fake.com
- git config --global --add user.name "Incognito User"
- git commit-m "你不知道我到底是谁"--author ="Max Mustermann"
- git推送
提交的元数据将如下所示:
Author: Max Mustermann <max.mustermann@company.com>
AuthorDate: Mon Jun 4 13:12:47 2018 +0200
Commit: Incognito User <Incognito@fake.com>
CommitDate: Mon Jun 4 13:13:26 2018 +0200
现在我认为必须有一种方法来找到提交所用的ssh键或真人,因为终端和系统知道键,因此知道提交和推送背后的真人。
- 问题:**不使用gpg签名,就没有办法找到真实的人吗?
PS:不,我们并不是不信任对方利用这一点,但我们相当好奇,想了解。
3条答案
按热度按时间ddrv8njm1#
首先,你需要把 git 和 gitlab 分开,就 git 而言,ssh只是你连接服务器时可能使用的协议之一,你的ssh密钥或者它的有效性对git来说并不重要;这是你和你的服务器之间的一种连接,服务器会对你进行身份验证,以便决定你是否被授权通过ssh进行连接。
(The服务器可能会执行更细粒度的授权检查,特别是对于 gitlab 这样的主机,它们的全部功能都是与git集成的,尽管如此,这是主机的事情,而不是git的。
像gitlab这样的托管服务可能会选择根据ssh键记录活动,也可能不会,即使它们这样做了,也只能告诉你是谁把提交推送到了服务器上,这可能与提交者或提交者不是同一个人,例如:
假设是爱丽丝写的代码她是作者,她把她的作品副本发给了Bob,Bob把代码放到本地的git repo中,Bob是提交者,Bob创建了一个bundle文件,并把它发给Cindy,现在Cindy把Bob的包含Alice代码的提交加载到她的本地repo中,然后用 * 她的ssh键 * 推送到gitlab,现在git本身并不关心Cindy在其中的角色;她不是提交者,也不是提交者,但是如果gitlab选择记录基于ssh key的提交行为,gitlab可能会记录Cindy将提交引入到服务器。
在git中创建可验证提交的方法是使用签名[1]。所以,“不使用[git记录真实提交人的机制],根本无法找到真实的提交人"。
[1]虽然我不知道他们的观点是否已经改变,但至少有一些git开发者在早期就表示相信,签署 tags --而不是直接签署commits --是正确的方式。
ggazkfy82#
我认为集中式和分布式之间的一个主要区别来自于这样一个事实,即在集中式中,您必须经历一个身份验证过程,以验证“您是您所说的那个人”,以便能够被信任,然后提交或做其他事情。
但是在分布式上,每个人都是他们自己 Realm 的国王/王后。我不需要在我的电脑上对我自己的repo进行认证,对吧?然后记住,即使在分布式VCS上可以做“推”,它实际上是为“拉”而设计的,所以没有人会弄乱我的repo。我从谁那里拉呢?我信任的人,对吧?所以仍然有一些信任,但它是在不同的地方,最终,你是你自己的回购协议的所有者。没有人可以强迫你接受你不喜欢的改变。Linus关于2007年git for google的演讲解释了所有的基础知识。https://www.youtube.com/watch?v=4XpnKHJAok8
uubf1zoe3#
首先:自Git 2.19(Q3 2018)起,新的配置变量
gpg.format
(可以设置为“openpgp
“或“x509
“)和gpg.<format>.program
(用于指定使用什么程序来处理格式)意味着:您可以通过“gpgsm
“将x.509证书与CMS一起使用,而不是通过“gnupg
“使用openpgp
。而gpgsm是一个类似于gpg的工具,用于在X. 509证书和**CMS protocol**上提供数字加密和签名服务。
它主要用作S/MIME邮件处理的后端
(The Cryptographic Message Syntax (CMS)是IETF的加密保护消息标准。
它可以被密码方案和协议用来对任何形式的数字数据进行数字签名、摘要、认证或加密。)
所以是的,有一种方法(使用Git)可以找到真实的的人 *,而不使用gpg签名 *。
其次,GitLab 12.8(2020年2月)现在支持“S/MIME提交签名验证”
Git仓库中的每一个提交都有一个作者,但这不会被Git验证,这意味着很容易创建看起来像是其他人编写的提交。
提交签名允许您证明您是提交的作者。这对于敏感项目和某些商业环境非常重要。
在Git 2.19中,OpenGPG签名和验证支持被扩展为支持使用X.509证书的S/MIME,因为管理这些证书对于大型组织来说更友好。
GitLab现在也支持提交的S/MIME签名验证,感谢西门子的Roger Meier!更感谢**Henning Schild**,也是西门子的contributing this feature to Git!
请参见documentation和issue 29782。
所以,是的,有一种方法(现在与GitLab集成)可以找到真实的的人 *,而不需要使用gpg签名 *。
自2022年8月起,GitHub also supports SSH commit verification
自2022年12月起,GitLab 15.7,提交signing with SSH is supported。