.gitディレクトリをWebにアクセスできないようにする


129

変更の追跡とサイトの更新にgithub(クローズドソース)を使用するWebサイトがあります。唯一の問題は、.gitディレクトリにWeb経由でアクセスできるように見えることです。これを停止してgitを使用できるようにするにはどうすればよいですか?

.htaccessを使用する必要がありますか?.gitの権限を変更する必要がありますか?



8
serverfaultの上にある:serverfault.com/questions/128069/...
scribuは

回答:


39

フォルダーに.htaccessファイルを作成し、.gitこのファイルに以下を配置します。

Order allow,deny
Deny from all

ただし、リポジトリを再クローンすると失われることに注意してください。


38
本当ですが.git/、リポジトリを再クローンすると失われるため、ディレクトリ自体には配置しないことをお勧めします。
Jake Wharton、

これは、複数の.gitディレクトリがある場合は面倒です。ディレクトリを再クローンする場合は、再実行する必要があります。
Bennett McElwee 2013

1
私はこれを試してみましたが、これは機能しますが、これを.git /内に配置するソリューションには、上記の2つの欠点があります。アクセスできません)、いつどのようにして誰がどのように行ったかを含むが、それでもデータの鍵です(適切に行われない場合とその前の分析を含む、そのセキュリティのためのesp)。 versioned&shared&well-preservedを含む)なので、復元もされません... .gitignoreにデータを適切に保存し、.git /には含めないでください。
Destiny Architect

3
なぜこれがベネットの答えではなく受け入れられた答えなのですか?彼はこれを解決するためのシンプルで効果的なテクニックです。
Josh Frankel、2015

1
最も可能性が高いのは、OPが他の1つが投稿される2年前にこれを受け入れたためです;)
ThiefMaster

379

これをWebサーバーのルートにある.htaccessファイルに入れます。

RedirectMatch 404 /\.git

このソリューションは堅牢安全です。

  • .gitサイト内のすべてのディレクトリで機能します。複数ある場合でも、
  • .gitignoreやなどの他のGitファイルも非表示にします.gitmodules
  • 新しく追加された.gitディレクトリでも機能し、
  • ディレクトリが存在するという事実さえ明らかにしません。

1
それは.gitフォルダーで機能しましたが、.gitignoreファイルを取得することができました。
カートエンチ2014

私の正規表現は私のテストで機能し、正規表現はURLの完全なURLではなくURLの一部とのみ一致する必要があるため、RedirectMatchのドキュメントに従って機能するはずです。リンクされたAliasMatchドキュメントの「微妙な違い」のメモを参照してください。それでも、ドキュメントは1つですが、現実の世界は別のものです。@artlogic regexは完全なURLと一致するため、Apacheにバージョンの違いがあるか、誤解しているだけかもしれません。
Bennett McElwee

2
@BennettMcElwee-ドキュメントをよく見て、いくつかのテストを実行した後、ワイルドカードは私にとって結局必要ないようです。解決策をありがとう。よく働く!
artlogic 2015

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>ディレクティブを使用できないため、Apacheを使用する別の方法はありますか?
Chris Muench、

2
マッチングにはさまざまな方法があります(例:<Files><FilesMatch>)。
ジェイクウォートン、

4
この答えはまったく正しくありません-.htaccessファイルではディレクトリは許可されていません。サーバーの設定には依存しません。
2013年

2
NI8VDY =私が試した1回のうちの1回で失敗しました:Dreamhost共有ホスティングでは、これをWebサイトのルートの.htaccessに置いてから、http:Webサイトのルートにサーバーログエラーの引用符(.. <ここではディレクトリは許可されていません)を与えました。2人のコメント投稿者はすでにこの問題を警告していて、最後にquote(Directoryは.htaccessファイルでは許可されていません)と公式のDirectory文書httpd.apache.org/docs/current/mod/core.html#directory say quote(Context:server構成、仮想ホスト)および.htaccessではありません。しかし、これは26票を獲得しているため、.htaccessからこれを機能させる方法を見つけた人は、PLS UPDATE THE SOLUTIONで説明しています。
Destiny Architect

@DestinyArchitectに同意します-投票に失礼しますが、これは誤解を招くものです。
kael


5

私は自分の.gitフォルダーへのアクセスを個別に制御することに抵抗があり、.htaccessの代わりにapache configを介してそれを実行することを選択して、それらを上書きしたり、新しいインストールを忘れたりしないようにします。

ここにいくつかの詳細な説明があります。Ubuntu 16.10を使用しています。

  1. まず、ブラウザーで.gitフォルダーに移動するとどうなるかを確認します。私の場合、ディレクトリリストが表示されました。表示してはならないものを表示している(つまり、404が表示されない)場合は、次の手順を実行します。
  2. apache2ctl -Vを使用して、HTTPD_ROOTおよびSERVER_CONFIG_FILEを取得します
  3. これを使用して、Apache構成を編集します。私の場合は、$ sudo nano /etc/apache2/apache2.conf
  4. 以下を設定ファイルのどこかに追加します:RedirectMatch 404 /.git
  5. Apacheを再起動します:$ sudo service apache2 restart
  6. もう一度フォルダに移動すると、404が表示されるはずです。
  7. 私はこれを.gitignoreで試しましたが、404も得ました

4

より堅牢でシンプルなオプションは、.gitディレクトリのREADおよび実行権限を無効にすることです。

たとえば、ほとんどの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。NotFoundではなくForbiddenコードが返されるため、ディレクトリの存在を簡単に特定できます。
Bennett McElwee 2013

2
gitを使用することは脆弱性ではありません
Adam

1

.htaccessほとんどの回答が示唆するようなルールをいじる代わりに、単に.git/ディレクトリをウェブルートの上に置いてみませんか?

私の設定では、私の.gitディレクトリは通常次のような場所にあります:

/home/web/project_name/.git/

私の実際のコードは住んでいます

/home/web/project_name/www_root/

私のWebルート(ApacheまたはNginxで定義されているように..私は後者を好みます)なので/home/web/project_name/www_root/.gitディレクトリはWebルートよりも「高い」ため、Webからディレクトリにアクセスできません。


public_htmlは、repo作業ディレクトリのサブディレクトリですか?面白そうですね
Hayden Thring

いいえ、サブディレクトリではありません。どちらも私のメインプロジェクトディレクトリ内の「兄弟」です。私のproject_nameディレクトリには2つのサブディレクトリwww_rootがあります。訪問者が私のサイトを閲覧したときに実際に提供されるファイルと.git、リポジトリの場所です。リポジトリの更新www_rootとその内容からのプル。重要なのは、.gitディレクトリが階層的に私のフロントコントローラの「上」にあるため、Web経由でアクセスできないことです。
Javier Larroulet

これが私が意図したことだと思うので、/ home / user / public_html /と/home/user/.gitがあります
Hayden Thring

すごい、その天才であるこのような簡単でシンプルなソリューションです(Apache security.confでサーバー全体のブロックを作成するのは難しいことではありません)。変更される可能性があります。
Hayden Thring

1
非常に真の...私は実際に私は夜に少し良く眠ることを可能にするウェブからアクセスできないまま、他の目的のために、他の「兄弟のディレクトリ」、:)持っている
ハビエルLarroulet
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.