2015-02-09 159 views
1

我已经设置了我自己的私人git服务器,并且有一个由5个成员组成的团队。我有他们的用户帐户所有设置,但我如何防止由随机怪异帐户完成对远程提交。因为我的一些团队也使用github,不希望他们的用户名出现在日志中,而是他们的用户名我分配。防止其他g​​it作者

+0

相关:http:// stackoverflow。com/q/117006/251311 – zerkms 2015-02-09 02:31:39

+0

不一样...我基本上想要某种认证方法..所以我的团队不能像其他团队成员一样通过git --config.name =“Test” – 2015-02-09 03:38:59

+0

@MaraisRossouw在这种情况下,您将不得不使用gerrit或gitlab或其他此类工具。 – 2015-02-09 03:49:17

回答

3

为了防止人们使用“随机怪异账号”进行提交,您可以设置一个git pre-receive挂钩,以针对有效名称列表验证传入提交中的提交者/作者姓名。但是这不提供认证组件。

为了防止模仿,您可以简单地要求所有的通信都使用gpg签名(git commit -S ...),并让您的pre-receive挂钩根据服务器上的gpg密钥环验证签名。

根据人们连接到远程服务器的方式,如果有权访问该连接,还可以将提交者/作者姓名与用于连接的用户名进行显式匹配。

更新1

如果你的提交者正在推动服务器通过ssh,那么上面的第三个选择可能是最容易的。

environment="SSH_USER=lars" ssh-rsa ... 

,然后在pre-receive挂钩,您可以使用环境变量来查找有效的提交名称/电子邮件对一些表:在你的.ssh/authorized_keys文件中,每个标识用户密钥设置环境变量。您可以阅读githooks(5)手册页约pre-receive挂钩,他们收到读取标准格式的行:

<oldrev> <newrev> <refname> 

您可以从<newrev>得到提交的名称是这样的:

commiter_name=$(git show -s --format='format:%cn' <newrev>) 

和邮件使用%ce而不是%cn

更新2

或者心里很不舒服,就忘表查找。在您的.ssh/authorized_keys文件:

environment="ALLOWED_NAME=Bob Jones",environment="[email protected]" ssh-rsa ... 

,然后在预先收到钩:

#!/bin/sh 

while read oldrev newrev refname; do 
    cn=$(git show -s --format='format:%cn' $newrev) 
    ce=$(git show -s --format='format:%ce' $newrev) 

    [ "$cn" = "$ALLOWED_NAME" ] || { 
    echo "*** Inalid committer name" 
    exit 1 
    } 

    [ "$ce" = "$ALLOWED_EMAIL" ] || { 
    echo "*** Inalid committer email" 
    exit 1 
    } 

done 

而且我认为你有你想要的东西。

你也许可以做到使用http 认证,类似的东西,因为在您pre-receive脚本更新你会 可以访问REMOTE_USER环境变量,它包含 的的身份验证的远程用户的名称。您可能需要 与某种表查找获取批准的名称和 电子邮件地址的值。

+0

好的。是的,我为每个提交者设置了一个linux帐户设置,我如何验证gpg签名与他们的登录?预先接收的样子是怎样的?而且,由于我有相当多的回购,我会为每个回购处理这个问题吗? – 2015-02-09 03:57:16

+1

我已经更新了答案。如果你决定使用'gpg'路由,它可能会涉及'grep'类似'git show -s --format = format:''--show-signature '的输出。 – larsks 2015-02-09 04:14:37

+0

我再次更新它。我想我更喜欢这个解决方案。至少,实施起来很简单。 – larsks 2015-02-09 04:27:31