【问题标题】:Prevent other git authors阻止其他 git 作者
【发布时间】:2015-02-09 02:26:46
【问题描述】:

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

【问题讨论】:

  • 不一样...我基本上想要某种身份验证方法。所以我的团队不能像其他团队成员一样简单地通过 git --config.name = "Test"
  • @MaraisRossouw 在这种情况下,您将不得不使用 gerrit 或 gitlab 或其他类似工具。

标签: linux git


【解决方案1】:

为了防止人们使用“随机奇怪的帐户”进行提交,您可以设置一个 git pre-receive 挂钩来根据有效名称列表验证传入提交的提交者/作者姓名。但这不提供身份验证组件。

为防止冒充,您可以简单地要求所有提交都经过 gpg 签名 (git commit -S ...),并让您通过 pre-receive 挂钩根据服务器上的 gpg 密钥环验证签名。

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

更新 1

如果您的提交者通过 ssh 推送到您的服务器,那么上面的第三个选项可能是最简单的。在您的.ssh/authorized_keys 文件中,为标识用户的每个键设置一个环境变量:

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

然后在您的pre-receive 挂钩中,您可以使用该环境变量针对某个表查找有效的提交者名称/电子邮件。您可以在 githooks(5) 手册页中阅读有关 pre-receive 钩子的信息,它们在标准输入中收到以下形式的行:

<oldrev> <newrev> <refname>

您可以像这样从&lt;newrev&gt; 获取提交名称:

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

邮件使用%ce而不是%cn

更新 2

或者见鬼,只是忘记表查找。在您的.ssh/authorized_keys 文件中:

environment="ALLOWED_NAME=Bob Jones",environment="ALLOWED_EMAIL=bob@example.com" ssh-rsa ...

然后在你的 pre-receive 钩子中:

#!/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

我认为你有你想要的。

更新 3

您可能可以使用 http 完成类似的操作 身份验证,因为在您的 pre-receive 脚本中,您会 可以访问REMOTE_USER 环境变量,其中包含 经过身份验证的远程用户的名称。你可能需要 进行某种表查找以获取已批准名称的值和 电子邮件地址。

【讨论】:

  • 好的。是的,我为每个提交者设置了一个 linux 帐户,我如何通过他们的登录验证 gpg 签名?预收会是什么样子?而且由于我有很多回购,我是否必须为每个回购都这样做?
  • 我已经稍微更新了答案。如果您决定采用gpg 路线,则可能涉及grepgit show -s --format=format:'' --show-signature &lt;rev&gt; 之类的输出用于Good signature
  • 我又更新了。我想我更喜欢这个解决方案。至少实现起来更简单。
  • 好的,但是现在......你能做类似的事情吗?或者更多,你能指导我如何设置 ssl 类型身份验证。
  • 不是SSL,只是SSH。有很多关于使用 ssh 设置基于密钥的身份验证的指南。您不能对基于密码的身份验证做同样的事情,因为在这种情况下没有机制让服务器为每个用户设置环境变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多