Linux 阻止其他git作者
我已经设置了自己的私有git服务器,并且有一个由5名成员组成的团队。我已经设置了他们的用户帐户,但是我如何防止由随机的奇怪帐户提交到远程。因为我的一些团队也使用github,不希望他们的用户名出现在日志中,而是希望他们的用户名被我分配给他们。为了防止人们使用“随机怪异帐户”进行提交,您可以设置一个gitLinux 阻止其他git作者,linux,git,Linux,Git,我已经设置了自己的私有git服务器,并且有一个由5名成员组成的团队。我已经设置了他们的用户帐户,但是我如何防止由随机的奇怪帐户提交到远程。因为我的一些团队也使用github,不希望他们的用户名出现在日志中,而是希望他们的用户名被我分配给他们。为了防止人们使用“随机怪异帐户”进行提交,您可以设置一个git预接收钩子,根据有效名称列表验证传入提交时的提交人/作者姓名。但这并没有提供身份验证组件 为了防止模拟,您可以简单地要求所有通信都是gpg签名的(git commit-S…),并让您pre-rec
预接收
钩子,根据有效名称列表验证传入提交时的提交人/作者姓名。但这并没有提供身份验证组件
为了防止模拟,您可以简单地要求所有通信都是gpg签名的(git commit-S…
),并让您pre-receive
hook根据服务器上的gpg密钥环验证签名
根据人们连接到远程服务器的方式,如果您有访问权限,还可以显式地将提交者/作者名称与用于连接的用户名进行匹配
更新1
如果您的提交者通过ssh推送到您的服务器,那么上面的第三个选项可能是最简单的。在.ssh/authorized_keys
文件中,为每个标识用户的密钥设置一个环境变量:
environment="SSH_USER=lars" ssh-rsa ...
然后在您的pre-receive
hook中,您可以使用该环境变量根据某个表查找有效的提交者姓名/电子邮件。您可以在githooks(5)
手册页中阅读关于pre-receive
钩子的内容,它们在stdin上接收的格式为:
<oldrev> <newrev> <refname>
然后在预接收挂钩中:
#!/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实现类似的功能
身份验证,因为在预接收
脚本中
可以访问REMOTE\u USER
环境变量,该变量包含
经过身份验证的远程用户的名称。你可能需要
进行某种形式的表格查找,以获取已批准名称的值和
电子邮件地址。相关:不一样。。。我基本上想要某种身份验证方法。。因此,我的团队不能像其他团队成员那样简单地通过git--config.name=“Test”@marairsossouw进行承诺。在这种情况下,您必须使用gerrit或gitlab或其他类似工具。好的。是的,我为每个提交者设置了一个linux帐户,如何通过他们的登录验证gpg签名?预接收是什么样子的?由于我有相当多的回购协议,我会为每一个回购协议都这样做吗?我已经更新了一些答案。如果您决定使用
gpg
路径,可能会涉及grep
输出类似于git show-s--format=format:“”--show signature
的内容,以获得良好的签名
。我再次更新了它。我想我更喜欢这个解决方案。至少实现起来比较简单。好吧,但是现在。。如果我的团队只使用普通密码,而不是ssl密钥身份验证,该怎么办。你能做类似的事情吗?或者更重要的是,您能告诉我如何设置ssl类型身份验证吗?不是ssl
,而是SSH
。有很多关于使用ssh设置基于密钥的身份验证的指南。对于基于密码的身份验证,您不能做同样的事情,因为在这种情况下,没有机制让服务器设置每个用户的环境变量。
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