防止其他g​​it作者

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

Solutions Collecting From Web of "防止其他g​​it作者"

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

为了防止模仿,你可以简单地要求所有的通信都是gpg签名的( git commit -S ... ),并且你pre-receive hook来验证签名对服务器上的gpg keyring。

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

更新1

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

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

然后在pre-receive钩子中,可以使用该环境变量来查找某个表的有效提交者名称/电子邮件。 您可以阅读githooks(5)手册页中的pre-receive钩子,他们会在标准输入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="ALLOWED_EMAIL=bob@example.com" 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环境变量,其中包含已验证的远程用户的名称。 您可能需要使用某种表查找来获取批准的名称和电子邮件地址的值。