.git 디렉토리 웹에 액세스 할 수 없도록 설정


129

변경 내용을 추적하고 사이트를 업데이트하기 위해 github (폐쇄 소스)를 사용하는 웹 사이트가 있습니다. 유일한 문제는 웹을 통해 .git 디렉토리에 액세스 할 수 있다는 것입니다. 이것을 멈추고 여전히 자식을 사용할 수 있습니까?

.htaccess를 사용해야합니까? .git의 권한을 변경해야합니까?


저기 serverfault에 있어야합니다
tback

8
serverfault에 있습니다 : serverfault.com/questions/128069/…
scribu

답변:


39

폴더에 .htaccess파일을 작성 .git하고이 파일에 다음을 입력하십시오.

Order allow,deny
Deny from all

그러나 저장소를 다시 복제하면 손실 될 수 있습니다.


38
그러나 .git/저장소를 다시 복제하면 디렉토리가 손실되므로 디렉토리 자체 에 넣지 않는 것이 좋습니다 .
Jake Wharton

하나 이상의 .git 디렉토리가 있으면 고통스럽고 디렉토리를 다시 복제 한 경우 다시 수행해야합니다.
Bennett McElwee

1
나는 이것을 시도하고 그것이 효과가 있다는 것을 알았지만이 설정을 .git / 안에 넣는 모든 솔루션은 위에서 언급 한 두 가지 단점이 있으며, 첫 번째는 최악의 것으로 보이며 세 번째는 최악의 것으로 보입니다 : quote (Make .git directory web 접근 할 수 없음) (누가 언제 누구에 의해 수행 되었는가) 데이터의 핵심 요소 (올바르게 수행되지 않을 때와 수행하기 전에 분석을 포함하여 보안을 위해 특히 중요 함)를 포함하여 .git / 그러나 실제로는 데이터의 일부가 아닙니다 ( 버전 및 공유 및 잘 보존 됨)을 포함하여 복원되지 않습니다.
Destiny Architect

3
이것이 Bennett의 답변이 아닌 왜 대답입니까? 그는 이것을 해결하기위한 간단하고 효과적인 기술입니다.
Josh Frankel

1
OP가 다른 하나가 게시되기 2 년 전에이 항목을 수락했기 때문일 것입니다.)
ThiefMaster

379

이것을 웹 서버 .htaccess루트 에있는 파일에 넣으십시오 .

RedirectMatch 404 /\.git

이 솔루션은 강력 하고 안전합니다 .

  • .git사이트의 모든 디렉토리에 대해 작동합니다 ( 하나 이상이 있어도)
  • 또한 숨 깁니다 같은 다른 망할 놈의 파일 .gitignore.gitmodules
  • 새로 추가 된 .git디렉토리 에서도 작동합니다.
  • 디렉토리가 존재한다는 사실조차 알려주지 않습니다.

1
그것은에 근무 .git폴더,하지만 난 여전히 얻을 수있는 .gitignore파일을 올려 수 있습니다.
Kurt Emch

정규식은 테스트에서 작동 하며 정규식은 전체 URL이 아닌 URL의 일부와 만 일치 해야 하므로 RedirectMatch 설명서 에 따라 작동 해야 합니다 . 연결된 AliasMatch 설명서 의 "미묘한 차이"참고 사항을 참조하십시오 . 아직도, 문서는 하나이고, 실제 세계는 또 다른 것입니다. @artlogic 정규식은 전체 URL과 일치하므로 Apache에 약간의 버전 차이가 있거나 잘못 읽었습니다.
Bennett McElwee

2
@ BennettMcElwee-설명서를 자세히 살펴보고 몇 가지 테스트를 실행 한 후에는 와일드 카드가 필요하지 않은 것처럼 보입니다. 솔루션 주셔서 감사합니다. 잘 작동합니다!
artlogic

apache2 문서 에 따르면 다른 구성 컨텍스트에 넣을 수도 있습니다.server config, virtual host, directory, .htaccess
bennos

표현식의 끝에 ". *"를 추가하여 .git / 아래의 파일 / 폴더에 액세스 할 수 없도록 제안 할 수도 있습니다.->RedirectMatch 404 /\.git.*
Dimitri Hautot

33

폴더 .htaccess에 대한 권한이 모두 .git/작동합니다. 나는 전자를 추천한다 :

<Directory .git>
    order allow,deny
    deny from all
</Directory>

서버 설정으로 인해 <Directory> 지시문을 사용할 수 없으므로 아파치와 관련된 다른 방법이 있습니까?
Chris Muench

2
모든 종류의 일치 방법이 있습니다 (예 : <Files>, <FilesMatch>).
Jake Wharton

4
이 답변은 완전히 잘못되었습니다. .htaccess 파일에서는 디렉토리를 사용할 수 없습니다. 서버 설정에 의존하지 않습니다.
17:43에

2
NI8VDY = 내가 시도한 1 회 중 1 회 실패 : Dreamhost 공유 호스팅에서 이것을 웹 사이트의 루트 .htaccess에 넣은 다음 http :를 웹 사이트 루트에 서버 로그 오류 따옴표 (.. <디렉토리는 여기에 허용되지 않음)에 넣었습니다. 2 명의 의견자가 이미이 문제에 대해 경고하고 마지막으로 인용문 (디렉토리는 .htaccess 파일에서는 허용되지 않습니다) 및 공식 디렉토리 문서 참조 httpd.apache.org/docs/current/mod/core.html#directory say quote (Context : server config, virtual host) 및 .htaccess가 아닙니다. 그러나 이것은 26 표를 얻었으므로 .htaccess에서 이것을 해결하는 방법을 찾는 사람들은 PLS 업데이트 솔루션을 설명합니다.
Destiny Architect

@DestinyArchitect에 동의하십시오-downvote에 대해 죄송하지만 오해의 소지가 있습니다.
kael

7

.git디렉토리 에서 혼란스럽게하고 싶지 않았고 Bennett의 솔루션 을 Apache 2.2에서 작동 시킬 수 없었지만 <VirtualHost>구성에 다음을 추가하면 효과가 있습니다.

RewriteRule ^.*\.git.* - [R=404]

5

내 .git 폴더에 대한 액세스를 개별적으로 제어하는 ​​것이 불편하고 .htaccess 대신 apache config를 통해 폴더를 덮어 쓰거나 새 설치 등을 잊어 버리지 않도록 선택합니다.

다음은 도움이되기를 바랍니다. 우분투 16.10을 사용하고 있습니다.

  1. 먼저 브라우저에서 .git 폴더로 이동하면 어떻게되는지 확인하십시오. 제 경우에는 디렉토리 목록이 제공되었습니다. 보지 말아야 할 것을보고 있다면 (즉, 404를 얻지 못하고있는 경우) 다음을 수행하십시오.
  2. apache2ctl -V를 사용하여 HTTPD_ROOT 및 SERVER_CONFIG_FILE을 가져 오십시오.
  3. 내 경우 $ sudo nano /etc/apache2/apache2.conf에서 아파치 구성을 편집하려면 이것을 사용하십시오.
  4. 구성 파일 어딘가에 다음을 추가하십시오. RedirectMatch 404 /.git
  5. 아파치 다시 시작 : $ sudo service apache2 restart
  6. 폴더로 다시 이동하면 404가 표시됩니다.
  7. 나는 이것을 .gitignore로 시도하고 404도 얻었습니다.

4

보다 강력하고 간단한 옵션은 .git디렉토리 의 읽기 및 실행 권한을 비활성화하는 것 입니다.

예를 들어 Apache (httpd)는 대부분 특수 사용자 계정으로 실행되므로 apacheCentOS에서는 사용자로 실행되지만 .git디렉토리는 실제 사용자 계정으로 만들어야하므로 권한을 변경하여 액세스를 간단히 차단할 수 있습니다. 또한이 접근법은 새로운 파일을 도입하지 않으며 git 명령에 영향을 미치지 않습니다.

명령은 다음과 같습니다.

chmod -R o-rx .git

SA가 .htaccess 사용을 원하지 않고 httpd.conf 유형 파일을 망칠 필요가없는 컴퓨터에서 이것은 최상의 솔루션으로 보입니다.
외국인 생활 양식

1
명백한 단점은 다시 복제하는 경우 다시 실행 chmod해야 한다는 점 입니다.
Lauri Nurmi

3

mod_rewrite는 원하는 효과를줍니다 :

RewriteEngine on
RewriteRule .*\.git/.* - [F]

9
이것은 정보 유출 취약점으로, .git디렉토리를 찾을 수없는 대신 금지 된 코드를 반환하기 때문에 사람들이 디렉토리 의 존재를 쉽게 확인할 수 있습니다.
베넷 맥 엘위

2
git를 사용하는 것은 취약점이 아닙니다
Adam

1

.htaccess대부분의 답변이 제안 하는 규칙 을 어지럽히는 대신 단순히 웹 .git/루트 위에 디렉토리 를 두지 않는 이유 는 무엇입니까?

내 설정에서 내 .git디렉토리는 일반적으로 다음과 같습니다.

/home/web/project_name/.git/

내 실제 코드는

/home/web/project_name/www_root/

내 웹 루트 (Apache 또는 Nginx에 정의 된대로). 후자 는 웹 루트보다 "높은"디렉토리에 있기 때문에 웹에서 디렉토리에 액세스 할 수있는 /home/web/project_name/www_root/방법이 없습니다..git


그래서 public_html은 repo working dir의 하위 디렉토리입니다. 흥미로운 소리
헤이든 던지기

아니요, 하위 디렉토리가 아닙니다. 그것들은 모두 메인 프로젝트 디렉토리 내에서 "형제"입니다. 내 project_name디렉토리에는 www_root방문자가 내 사이트를 탐색 할 때 파일이 실제로 제공되는 .git위치와 저장소가있는 두 개의 하위 디렉토리 가 있습니다 . 리포지토리 업데이트 www_root및 내용 에서 가져 오기 문제는 .git디렉토리가 프론트 컨트롤러의 "위"에 계층 적으로 있기 때문에 웹을 통해 액세스 할 수 없다는 것입니다 .
Javier Larroulet

이것이 내가 의미하는
바라고

와우는 정말 쉽고 간단한 솔루션입니다 (아파치 security.conf에서 서버 전체 블록을 만드는 것이 어렵지는 않습니다) 호스팅해야 할 유일한 것은 호스팅이 publlic_html에서 이상한 소유권 / 권한 설정을 가지고 있는지입니다. 변경 될 수 있습니다.
Hayden Thring

1
매우 사실 ... 웹에서 액세스 할 수없는 다른 목적을 위해 다른 "형제 디렉토리"가 실제로 있습니다. 밤에 조금 더 잘 수 있습니다 :)
Javier Larroulet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.