web-dev-qa-db-ja.com

Apacheが.gitディレクトリを提供しないようにするにはどうすればよいですか?

テスト用のウェブサイトのデプロイにgitを使い始めました。 Apacheが.gitディレクトリのコンテンツを提供しないようにするにはどうすればよいですか?

私は試した

<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>

成功しませんでした。

各.gitディレクトリに.htaccessファイルを作成してアクセスを拒否できることはわかっていますが、すべてのWebサイトでこれをグローバルにするメインの構成ファイルに追加できるものが欲しかったです。

78
Shoan

ルールに「git」ではなく「svn」があるため、機能しません。 'svn'を 'git'に置き換えるだけです。

<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>
57
sinping

これは他の多くの回答と同じ効果がありますが、はるかに簡単です。

RedirectMatch 404 /\.git

これは.htaccessまたはサーバーの構成ファイルに入れることができます。名前が.gitで始まるファイルまたはディレクトリ(例:.gitディレクトリまたは.gitignoreファイル)を非表示にするには、404を返します。Gitリポジトリの内容が非表示になるだけでなく、その存在そのものも隠されています。

143
Bennett McElwee

.htaccessファイルを使用せず、代わりに/etc/Apache2/httpd.conf(またはサーバーのマスターconfファイル)を使用して.gitディレクトリと.gitignoreファイルの両方を非表示にする場合は、以下を使用できます。上記のmaster conf設定の回答ではgitignoreファイルが非表示になっていないことがわかりました。

# do not allow .git version control files to be issued
<Directorymatch "^/.*/\.git+/">
  Order deny,allow
  Deny from all
</Directorymatch>
<Files ~ "^\.git">
    Order allow,deny
    Deny from all 
</Files>
14
Kyle Sloan

共有ホスティングサービスを利用していてApache.confにアクセスできない場合でも、次のように.htaccessファイルでアクセスできます。

RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]
12
danorton
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]

# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+

これは.htaccess、 番号 http.confアクセスが必要です。これを最初の書き換えルールとして含めます。先頭にRewrite On 必要に応じて。

セキュリティの観点から、私は403よりも偽の404を好んでおり、攻撃者にとってより有益です。 2つのうち1つをコメントアウトして、他のユーザーも機能するようにします。

ところで、良い変更は、2つのあなたのlithmusテストです:

http://localhost/.gitignore
http://localhost/.git/HEAD
6
Frank Nocke

.htaccessを使用して、.gitディレクトリと.gitignoreや.gitmodulesなどの他のファイルの両方を保護するには、次のコマンドを使用します。

RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"
5
scribu

私は常に次の行をvhostテンプレートに追加します

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

VCS固有のデータに誰もアクセスできないようにしてください。完璧に動作します。

4
ALex_hha

Linuxディストリビューションのすべての「非表示」ファイルとディレクトリ(通常、「。」で始まるすべてのファイル)を単に拒否することを望むユーザーのために、サーバーのconfコンテキストに配置した場合のApache 2.4での動作を次に示します。

<FilesMatch "^\.(.*)$">
    Require all denied
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Require all denied
</DirectoryMatch>

そして、これは古いApache 2.2スタイルです(同じ正規表現、異なるauthディレクティブ)。

<FilesMatch "^\.(.*)$">
    Order deny,allow
    Deny from all
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Order deny,allow
    Deny from all
</DirectoryMatch>

そうすれば、特に.gitまたは.svnについて心配する必要はありません。これは.htaccess.htpasswdのようなものにも本質的に一致します。

個人的には、このようなリクエストに対して404ではなく403を発行するのが好きですが、次のように、auth deialの代わりにRewriteRuleを簡単に使用できます。

<FilesMatch "^\.(.*)$">
    RewriteRule "^(.*)$" - [R=404,L]
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    RewriteRule "^(.*)$" - [R=404,L]
</DirectoryMatch>
1
ldennison

Webサーバーが.gitリポジトリへのアクセスに使用するユーザーとは別のユーザーを使用している場合、.gitディレクトリの他のユーザーの実行ビットを無効にすることができます。

これは他のWebサーバーで動作し、パフォーマンスを消費する.htaccessファイルに依存しません。

1
Martijn

これは少し遅いですが、私の答えは少し異なりますので、追加したいと思いました。これは、httpd.confファイルに含める必要があります。 <Files "*">タグ内にネストされた<Directory>は、ディレクトリ内のすべてのファイルをブロックします。

# GitHub Directory
<Directory /var/www/html/yoursite/.git>
   Order Deny,Allow
   Deny from all
   <Files "*">
     Order Deny,Allow
     Deny from all
   </Files>
</Directory>
# GitHub files
<Files .gitignore>
  order Deny,Allow
  Deny from all
</Files>
1
jonnyjandles

あなたはおそらくサービングを拒否したい.gitignore 同様に。

ドットで始まるファイルはLinuxでは非表示になっています。

したがって、ドットで始まる404だけです。

RedirectMatch 404 /\.

0
Vladimir Kornea