Ric*_*ard 15 git security authentication
我正在为项目使用git和Codebase.
我刚做了一个测试,我能够使用不同的电子邮件地址和名称集来提交git存储库,这会导致它将提交标记为由不同的用户.我将其推送到存储库,它显示为该用户已经提交,即使它是我.
有没有办法阻止用户提交或推送别人的用户详细信息(实际上他们不能"伪造"提交来自不同的用户)?
编辑:
我认为这种身份验证需要在将提交提交到服务器的阶段进行,因为在本地工作副本中它只是一个用户可以完全访问的存储库,可以随心所欲地执行任何操作.因此,我应该问Codebase可能吗?
编辑2:
根据要求进行Git配置:
(回购/的.git /配置)
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@codebasehq.com:<redacted company name>/<redacted project name>/test.git
[branch "master"]
remote = origin
merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud)
糟糕:虽然这是一种有效的技术,但它假设您对服务器具有有效的完全控制权。如果您使用的是托管解决方案,那么一切皆有可能。
您可以在存储库的挂钩中验证作者姓名和电子邮件update。您可以像这样获取这两个值:
#!/bin/sh
set -- refname sha1_old sha1_new
author_name=$(git log --pretty=format:%an $sha1_new)
author_email=$(git log --pretty=format:%ae $sha1_new)
Run Code Online (Sandbox Code Playgroud)
当然,诀窍在于弄清楚这些是否有效。这里有一个技巧:
您可以使用command=""ssh 配置中的选项来制作git-receive-pack将 ssh 密钥映射到作者信息的包装器。例如,这样的事情:
#!/bin/sh
GV_AUTHOR_NAME="$1"
GV_AUTHOR_EMAIL="$2"
export GV_AUTHOR_EMAIL GV_AUTHOR_NAME
eval exec $SSH_ORIGINAL_COMMAND
Run Code Online (Sandbox Code Playgroud)
你会使用authorized_keys这样的一行:
command="~/bin/gitvalidator 'Lars Kellogg-Stedman' 'lars@seas.harvard.edu'" ssh-rsa ...
Run Code Online (Sandbox Code Playgroud)
所有这一切的结果是您的update脚本将具有环境变量GV_AUTHOR_NAME并且GV_AUTHOR_EMAIL可用,并且可以根据提交检查这些变量,如果它们不匹配,则退出并显示错误。