在GIT中阻止和/或识别假作者姓名/电子邮件

时间:2013-01-30 13:16:00

标签: git security commit gitolite spoofing

我想阻止git commit中的虚假用户。这意味着一个用户必须无法与其他人更改他/她的电子邮件。我用的是gitolite。我该如何实现此功能?由于我有用户的公钥,我可以将他们的电子邮件/名称绑定到该公钥吗?

2 个答案:

答案 0 :(得分:2)

  

由于我有用户的公钥,我可以使用该公钥绑定电子邮件/名称吗?

非本机:Gitolite仅适用于用户ID(从http或ssh会话中提取并在变量GL_USER中设置)

所以你需要在其他地方获得这些信息。

我使用的是公钥,由用户提供并存储在gitolite/keys回购的gitolite-admin目录中。

公共ssh密钥由3部分组成:

 ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx WhateverYouWant

公钥后面的最后一部分是一个可以代表你想要的字符串。

我向用户要求一个带有电子邮件地址的密钥(最后) 然后,我为所有回购设置VREF (an update hook in gitolite),这将使用从user.email文件中提取的电子邮件验证提交中显示的~gitolite/.ssh/authorized_keys。 该文件由gitolite管理,包含user.name及其电子邮件(因为我希望用户给我公钥的方式)

 command=="..../gitolite-shell user-id" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx WhateverYouWant

如果任何电子邮件与正确的用户名不匹配,则VREF挂钩将拒绝推送。


我自己VREF CHECKID(略有不同)的目的,在gitolite.conf声明为:

repo    @all
  RW+                            = gitoliteadm
  -     VREF/CHECKID             = @all

答案 1 :(得分:1)

我写了一个钩子,它采用了与前一个答案略有不同的方法。您在顶部放置了一个EMAILDOMAIN,它确保提交日志中的电子邮件地址等于[提交用户的SSH密钥文件名] @ [EMAILDOMAIN]。

我把它扔进了gitolite-admin / common-hooks所以它在推送时运行服务器端。

url=('http://quant-econ.net/_downloads/graph1.txt')
response= urllib2.urlopen(url)
txt= response.read()
nodes=txt.split("\n")