linux - 阻止其他 git 作者

标签 linux git

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

最佳答案

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

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

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

更新1

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

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

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

<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="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c2838e8e8d9587869d878f838b8effa0ada082a7baa3afb2aea7eca1adaf" rel="noreferrer noopener nofollow">[email protected]</a>" ssh-rsa ...

然后在你的预接收 Hook 中:

#!/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 - 阻止其他 git 作者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28401926/

相关文章:

windows - 使用 git-bash 保护 .git 文件

linux - Bash 脚本无法运行 : command not found

linux 找不到这样的文件或目录但存在

php - 更改虚拟目录权限时,CentOS/Linux apache Web 服务器出现权限错误

git - 尝试批量推送大量提交

linux - 在两个不同的 git repos 中的文件之间获取差异并应用于第一个 repo

windows - 使用 windows 通过 ssh 连接到 github

Git 克隆无法创建文件

Linux bash shell 脚本输出不同于 cronjob vs 手动运行脚本

linux - 使用 +Farsi 编译 vim 以获得 Farsi 映射