防止其他g it作者

问题描述 投票:1回答:1

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

linux git
1个回答
3
投票

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

为了防止模仿,您可以简单地要求所有提交都是gpg签名(git commit -S ...),并且让pre-receive钩子验证服务器上的gpg密钥环的签名。

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

更新1

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

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

然后在你的pre-receive钩子中,你可以使用该环境变量来查找某些表的有效提交者名称/电子邮件。你可以在pre-receive手册页中阅读有关githooks(5)钩子的信息,他们在stdin上收到以下形式的行:

<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

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

更新3

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

© www.soinside.com 2019 - 2024. All rights reserved.