我已经建立了自己的私有(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/