2009-08-28 3 views
12

작은 프로젝트를 관리하기 위해 git을 사용하고 있습니다. SSH를 통해 모든 트랜잭션 (복제, 푸시, 풀링 등)을 수행했지만, http를 통해 git-clone을 실행하고 실험하기 때문에 git-update-server-info를 실행했습니다. 그것은 훌륭하게 작동했습니다. 시원한. 이제 누군가는 http를 통해 내 자격 증명없이 내 저장소를 복제 할 수 있다고 생각합니다. 나는 gitosis를 통해 http 인증을 설정하는 것을 모호하게 알고 있지만 실제로는 원하는 것이 아닙니다. 나는 HTTP 복제를 완전히 비활성화하는 것을 선호한다.http를 통해 git-clone을 "비활성화"할 수 있습니까?

git에게 ssh를 통한 트랜잭션 만 허용 할 수있는 방법이 있습니까? 아니면 처음부터 http를 통한 복제를 가능하게하기 위해 git-update-server-info를 실행했을 때했던 것을 되돌릴 수 있습니까?

+0

Git 2.12 (Q1 2017)를 사용하면'git config protocol. .allow ...'. [내 대답은 아래 참조] (http://stackoverflow.com/a/41369667/6309) – VonC

답변

14

자식 저장소는 HTTP 전송을 통해 사용할 수 있으려면 .git/info/refs, 그것은 (어떤) 웹 서버에서 "수출"할 필요가있다. 저장소 (정확하게는 .git 디렉토리)가 웹 브라우저에서 외부에서 볼 수 있으면 HTTP 프로토콜을 통해 익명으로 복제되거나 가져올 수 있습니다. git update-server-info은 사용 가능한 항목을 알기 위해 복제 (또는 페치)를위한 추가 보조 도우미 정보 (.git/objects/info/packs.git/info/refs)를 생성하는 데 사용됩니다. 하나 같은 방법으로 변경 권한에 의해 아마도 그 두 개의 파일 (.git/objects/info/packs.git/info/refs)를 제거하거나 그냥 그렇게 저장소가 웹을 통해 사용할 수 없습니다 수 있도록

그래서 당신이해야 할 것입니다 사용자 것을 웹 서버는 (보통 '아무도 없음'또는 'www'또는 'apache')로 실행되어 .git 저장소에 액세스 할 수 없습니다. 또는 웹 서버을 구성하여 저장소를 내보내는 (보이지 않게).

HTTP 프로토콜은 (현재) "덤 (dumb)"프로토콜이라고 불리우며 파일을있는 그대로 제공하고 액세스 제어는 [덤] 서버 (이 경우에는 사용하는 웹 서버 또는 파일 시스템).

웹 서버에서 저장소를 내 보내지 않으므로 걱정할 필요가 없습니다. 저장소가 HTTP을 통해 사용할 수 없습니다. 단지

+0

.git/objects/info 디렉토리가 이미 비어 있는데, 여전히 같은 문제가 있습니다. –

1
삭제 .git/objects/info/packs

+0

내 .git/objects/info 디렉토리가 이미 비어 있으며 여전히 동일한 문제가 발생합니다. –

2

(적어도 오픈 소스 프로젝트를) 밀어 즉 리포지토리에 기록 인용 Git 저장소 익명 인증되지 않은 읽기 전용 액세스 및 인증을 필요로하기에 보통이다

참고인가 거기 내가 git에게 ssh를 통한 트랜잭션 만 허용하도록 말할 수있는 방법은?

6~8 년 이상 힘내 2.12 (Q1 2017) 힘내가 사용하는 프로토콜을 허용하거나 해제하는 구성을 제안한다.

git config protocol.http.allow never 
git config protocol.https.allow never 
git config protocol.git.allow never 
git config protocol.file.allow never 

git config protocol.ssh.allow always 

Jeff King (peff)에 의해 commit abcbdc0 (2016년 12월 14일)를 참조하십시오.
commit aeae4dbcommit f962ddfcommit 85e4205 (2014 년 12 월 14 일) Brandon Williams (mbrandonw)을 참조하십시오.
(commit 9d540e9Junio C Hamano -- gitster --에 의해 합병, 2016 12월 27일)

이 프로토콜은 복제/가져 오기/푸시 동안 전송을 위해 허용되는의 세분화 된 제어 할 수는 새 구성 메커니즘을 통해 활성화되고있다.

git config 이제 포함

protocol.allow 

세트의 경우, 명시 적 정책 (protocol.<name>.allow)가 없습니다 모든 프로토콜에 대한 사용자 정의 기본 정책을 제공합니다. 경우 해제 기본적으로
,

  • 알려진 안전 프로토콜 (HTTP, HTTPS, 자식, SSH, 파일) 기본 정책이 always의 기본 정책,
  • 알려진 위험 프로토콜 (내선)가 never
  • 다른 모든 프로토콜의 기본값 정책은 user입니다.

지원 정책 :

  • always - 프로토콜은 항상 할 수있다 사용할 수 있습니다.
  • never - 프로토콜을 절대로 사용할 수 없습니다.
  • user - 프로토콜은 GIT_PROTOCOL_FROM_USER이 중 하나를 해제 또는 1
    이 정책은 당신이 프로토콜은 사용자가 직접 사용할 수하고자 할 때 사용되어야한다 의 값이 때 사용되는에만 수 있지만, 사용하지 않을 사용자 입력없이 clone/fetch/push 명령을 실행하는 명령, 예. 재귀 서브 모듈 초기화.
+0

나는 대답을 바꾸지 않겠지 만,이 정보를 추가해 주셔서 감사합니다! 알아 둘만한. –

+0

@GeorgeMandis 문제 없습니다. 어쨌든 아직 발표되지 않았습니다. – VonC