113 votes

Comment empêcher Apache de servir le répertoire .git ?

J'ai commencé à utiliser git pour le déploiement de sites Web à des fins de test. Comment puis-je empêcher Apache de servir le contenu du répertoire .git ?

J'ai essayé

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

sans succès.

Je sais que je peux créer un fichier .htaccess dans chaque répertoire .git et refuser l'accès, mais je voulais quelque chose que je puisse mettre dans le fichier de configuration principal pour que cela soit global pour tous les sites Web.

3 votes

Une fois que vous avez empêché Apache de servir le répertoire, vous pouvez également avoir besoin de cacher le répertoire .git avec "IndexIgnore .git" si les index sont activés sur votre répertoire.

6voto

est Points 321

Pour protéger à la fois le répertoire .git et d'autres fichiers tels que .gitignore et .gitmodules en utilisant .htaccess, utilisez :

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

4 votes

Cela fonctionne pour moi, mais la fin de ErrorDocument n'a aucun impact. Du point de vue de la sécurité, je préférerais un faux 404 à un 403 informatif pour l'attaquant...

2 votes

C'est une mauvaise idée, car cela divulgue des informations aux pirates informatiques. Un 403 signifie que c'est là, un 404 signifie que ça ne l'est pas. Chaque fait sur la configuration d'un serveur est utile à un pirate. J'envisagerais de réviser ceci.

4voto

ALex_hha Points 6885

J'ajoute toujours la ligne suivante dans le modèle de serveur virtuel (vhost)

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

Juste pour être sûr que personne ne peut accéder aux données spécifiques de VCS. Cela fonctionne parfaitement.

2voto

Martijn Points 336

En supposant que votre serveur Web utilise un utilisateur différent de celui que vous utilisez pour accéder au dépôt .git, vous pourriez désactiver le bit d'exécution pour les autres sur le répertoire .git.

Cette méthode devrait fonctionner avec d'autres serveurs Web et ne repose pas sur des fichiers .htaccess qui consomment beaucoup d'énergie.

2voto

ldennison Points 143

Pour ceux qui cherchent à refuser simplement tous les fichiers et répertoires "cachés" sur une distribution Linux (généralement tous les fichiers commençant par un "."), voici ce qui fonctionne sur Apache 2.4 lorsqu'il est placé dans le contexte de la configuration du serveur :

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

Et voici l'ancien style Apache 2.2 (même regex, juste des directives d'authentification différentes) :

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

Alors vous n'avez pas à vous soucier .git o .svn spécifiquement. Cela correspondrait également à des choses comme .htaccess y .htpasswd par nature.

Personnellement, je préfère émettre des 403 pour de telles demandes plutôt que des 404, mais vous pourriez facilement utiliser une RewriteRule au lieu d'un refus d'authentification, comme ceci :

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

1voto

mzz Points 738

C'est un peu tard, mais ma réponse est légèrement différente, alors j'ai pensé l'ajouter. Ceci doit être placé dans le fichier httpd.conf. L'adresse <Files "*"> imbriqué dans le <Directory> bloquera tous les fichiers du répertoire.

# 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>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X