我想阻止假冒用户git commit
。 这意味着,一个用户必须不能改变他/她的电子邮件别人。 我用gitolite。 我怎样才能实现这个功能? 因为我有用户的公钥,可我自己的电子邮件/名称绑定到公钥?
Answer 1:
因为我有用户的公钥,我可以绑定邮箱/姓名与公钥?
本身不:Gitolite仅与该用户ID的工作方式(如从http或SSH会话中提取,并在变量设置GL_USER
)
所以,你需要在其他地方有信息。
我用的是由用户给定的,并存储在公共密钥gitolite/keys
的的DIR gitolite-admin
回购。
公共SSH密钥是由3个部分组成:
ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx WhateverYouWant
最后一部分,公共密钥后,是可以代表你想要的字符串。
我从用户在它自己的电子邮件地址键(末)的需求。
我然后设置一个VREF
(在gitolite更新钩)对于所有回购,这将验证user.email
与从所提取的电子邮件中的提交看出~gitolite/.ssh/authorized_keys
文件。
这个文件是由gitolite管理,并同时包含user.name
和电子邮件(因为这样,我希望用户给我自己的公钥)
command=="..../gitolite-shell user-id" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx WhateverYouWant
如果有任何电子邮件的不匹配正确的用户名,VREF钩将拒绝推。
我自己的VREF CHECKID
(一个略有不同)的目的,是在声明gitolite.conf
为:
repo @all
RW+ = gitoliteadm
- VREF/CHECKID = @all
Answer 2:
我写了一个钩子,花费的时间比以前的答案稍微不同的方法。 你把一个EMAILDOMAIN顶部,它可以确保在提交日志的电子邮件地址等于[犯了用户的SSH密钥文件名] @ [EMAILDOMAIN。
我扔到这个gitolite管理员/共挂钩,因此在推运行服务器端。
#!/bin/bash
EMAILDOMAIN="company.com"
if [[ $2 = 0000000000000000000000000000000000000000 ]] || [[ $3 = 0000000000000000000000000000000000000000 ]]
then
exit 0
fi
# get name and email from git log
EMAILCMD="git log --format="%ce" $3 -1"
EMAIL=$($EMAILCMD)
NAMECMD="git log --format="%cn" $3 -1"
NAME=$($NAMECMD)
# environment variable for the gitolite user (the SSH key)
# echo $GL_USER
# compare email with gitolite user
EXPEMAIL="$GL_USER@$EMAILDOMAIN"
if [ "{$EXPEMAIL,,}" != "{$EMAIL,,}" ]
then
echo "You're committing with the SSH key for '$GL_USER'. That key belongs to $EXPEMAIL."
echo " (You've configured your email as $EMAIL)"
exit 1
fi
# TODO: maybe, if we ever bother installing mail on this box, send an email to some admins if someone is trying to key share
# check the name...
IFS=' ' read -ra NAMEPARTS <<< "${NAME,,}"
PARTCOUNT=0
for PART in "${NAMEPARTS[@]}"
do
PARTCOUNT=$((PARTCOUNT+1))
done
# make sure it's a full name
if (( "$PARTCOUNT" < 2 ))
then
echo "You should put in your full name, $NAME."
echo "If you've really only got one name (like Sting or Madonna), email an admin and we can make an exception for you."
exit 1
fi
exit 0
文章来源: Block and/or Identify Fake author name/email in GIT