2011-11-23 2 views
15

프로젝트에 자식과 Codebase을 사용하고 있습니다.잘못된 사용자로 자식을 위탁하는 것을 막으십시오.

방금 ​​테스트를했는데 다른 전자 메일 주소와 이름 집합을 가진 자식 저장소에 커밋 할 수있어 다른 사용자가 커밋을 태그하도록합니다. 나는 이것을 저장소로 밀어 넣었고 그것이 나인데도 커밋 한 사용자로 나타났다.

사용자가 다른 사람의 사용자 정보를 커밋하거나 밀지 못하게하는 방법 (효과적으로 다른 사용자의 커밋을 위조 할 수 없음)이 있습니까?

편집 : 나는이 인증이해야 할, 단순히 사용자가 전체 액세스 할 수있는 저장소의 복사 로컬 작업에 있기 때문에 서버에 커밋을 밀어의 단계에서 일어날 필요가 가정

어떤 그들은 함께 원합니다. 이것 때문에 내가 물어 봐야 할 무언가입니까 Codebase 어쩌면?

편집 2 :이

가 요청으로

힘내 설정 :

(REPO/.git/설정)

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    ignorecase = true 
[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = [email protected]:<redacted company name>/<redacted project name>/test.git 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
+0

.git/config의 내용을 게시 할 수 있습니까? –

+0

서버에 무엇을 사용하고 있습니까? 평범한 자식, gitosis, gitolite, ...? – CodesInChaos

+1

OP는 GitHub와 비슷한 Codebase를 사용하고 있습니다. 그것은 질문의 맨 위에 있습니다. –

답변

3

어머 :이 유효한 기술이지만, 그것은 가정 서버를 효과적으로 제어 할 수 있습니다. 호스팅 솔루션을 사용하는 경우 모든 배팅이 해제됩니다.

작성자 이름과 이메일의 유효성을 저장소의 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) 

트릭 물론, 이러한 유효 여부를 파악한다.

ssh 구성에서 command="" 옵션을 사용하여 ssh 키를 작성자 정보에 매핑하는 git-receive-pack 주위의 래퍼를 만들 수 있습니다. 이 같은 예를 들어 뭔가 :

#!/bin/sh 

GV_AUTHOR_NAME="$1" 
GV_AUTHOR_EMAIL="$2" 

export GV_AUTHOR_EMAIL GV_AUTHOR_NAME 
eval exec $SSH_ORIGINAL_COMMAND 

그리고는이 같은 authorized_keys 라인 뭔가를 사용합니다 :

command="~/bin/gitvalidator 'Lars Kellogg-Stedman' '[email protected]'" ssh-rsa ... 

이 모든 결과는 update 스크립트가 환경 변수를 GV_AUTHOR_NAMEGV_AUTHOR_EMAIL 것입니다 사용할 수 있으며, 일치하지 않는 경우 커밋과 종료를 오류로 종료 할 수 있습니다. 당신은 자신의 자격 증명이있을 때 당신은 다른 사람으로 커밋 할 수

: 내 최신 업데이트를 제출하기 전에

+0

다른 사람의 대답을 downvote하면 코멘트를 남기는 것이 관례입니다. 그건 사람들이 시간이 지남에 따라 답변의 질을 향상시키는 데 도움이됩니다. 이 답변에 문제가 있으면 알려 주시면 고칠 수 있습니다. 감사! – larsks

+0

(... 나는 이것이 단순히 보복이라고 생각한다.) – larsks

+0

나는 코드베이스의 사람들에게 이것에 대한 그들의 입장을 고맙게 생각할 것입니다. :) – Richard

-3

미안 내 게시물이 삭제되었다.

사용자 푸과 바는의 repo에 커밋 할 수

그냥 다음과 같이 당신에 대해 요구하는 시나리오가 명확합니다. 사용자 Foo가 사용자 Bar로 repo에 커밋하지 못하게하려고합니다.

이 경우 사용자 Bar는 암호를 보호하는 것처럼 개인 SSH 키를 보호해야합니다. 그것은 커밋을 인증하는 데 사용됩니다.

+0

이름과 이메일을 원하는대로 설정할 수 있습니다. 어떤 ssh 키를 사용하고 있는지 (또는 ssh를 사용하고 있는지 여부와 상관없이) 상관 없습니다. SSH 키는 git에 의해 기록 된 이름과 이메일 주소와 아무런 관련이 없습니다. – larsks

+0

커밋은 사용 된 전송과 완전히 독립적으로 git에 의해 로컬로 수행됩니다. 기존 설정에서 ssh를 전송으로 사용하는 경우 푸시를 수행하는 사용자를 인증하는 데 사용되는 자격 증명은 푸시 된 커밋의 내용과 아무 관계가 없습니다. –

+0

그는 GitHub와 비슷한 Codebase와 관련하여 묻습니다. 실제로 어떤 질문과 관련하여 문제를 보는 것이 답을 평가할 때 도움이 될 것입니다! –

관련 문제