块和/或识别GIT假作者姓名/电子邮件(Block and/or Identify Fake aut

2019-08-16 16:16发布

我想阻止假冒用户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