阻止用户承诺将git作为错误用户

时间:2011-11-23 12:14:23

标签: security git authentication

我正在为项目使用git和Codebase

我刚做了一个测试,我能够使用不同的电子邮件地址和名称集来提交git存储库,这会导致它将提交标记为由不同的用户。我将它推送到存储库,它显示为该用户已经提交,即使它是我。

有没有办法阻止用户提交或推送其他人的用户详细信息(实际上他们不能“伪造”提交来自不同的用户)?

修改

我认为这种身份验证需要在将提交提交到服务器的阶段进行,因为在本地工作副本中它只是一个用户可以完全访问的存储库,可以随心所欲地执行任何操作。因此,我应该问Codebase关于可能吗?

编辑2:

根据要求进行Git配置:

(回购/的.git /配置)

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@codebasehq.com:<redacted company name>/<redacted project name>/test.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

2 个答案:

答案 0 :(得分:3)

Ooops :虽然这是一种有效的技术,但它假设您可以有效地完全控制服务器。如果您正在使用托管解决方案,则所有投注均已关闭。

您可以在存储库的update挂钩中验证作者姓名和电子邮件。你可以得到这样的两个值:

#!/bin/sh
set -- refname sha1_old sha1_new
author_name=$(git log --pretty=format:%an $sha1_new)
author_email=$(git log --pretty=format:%ae $sha1_new)

当然,诀窍在于弄清楚这些是否有效。这是一招:

您可以使用ssh配置中的command=""选项创建一个包围git-receive-pack的包装器,将ssh键映射到作者信息。例如,像这样:

#!/bin/sh

GV_AUTHOR_NAME="$1"
GV_AUTHOR_EMAIL="$2"

export GV_AUTHOR_EMAIL GV_AUTHOR_NAME
eval exec $SSH_ORIGINAL_COMMAND

你会使用这样的authorized_keys行:

command="~/bin/gitvalidator 'Lars Kellogg-Stedman' 'lars@seas.harvard.edu'" ssh-rsa ...

所有这一切的结果是您的update脚本将具有可用的环境变量GV_AUTHOR_NAMEGV_AUTHOR_EMAIL,并且可以针对提交检查这些并且如果它们没有错误则退出不匹配。

答案 1 :(得分:-3)

很抱歉,在我提交最新更新之前,我的帖子已被删除:

当您拥有凭据时,您可以像其他人一样提交。

为了澄清,您要问的情况如下:

用户Foo和Bar可以提交回购。您希望阻止用户Foo以用户Bar的身份提交到repo。

在这种情况下,用户Bar必须保护他们的私有SSH密钥,就像他们保护密码一样。因为它用于验证您的提交。