我已经设置了自己的私人git服务器,并拥有一个由5名成员组成的团队。我有他们的用户帐户所有设置,但我如何防止随机奇怪的帐户提交遥控器。因为我的一些团队也使用github并且不希望他们的用户名出现在日志中,而是他们的用户名我分配它们。
答案 0 :(得分: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="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
环境变量
经过身份验证的远程用户的名称。你可能需要
使用某种表查找来获取已批准名称的值
电子邮件地址。