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.

204voto

Maslow Points 7268

Cela a le même effet que beaucoup d'autres réponses, mais c'est beaucoup plus simple :

RedirectMatch 404 /\.git

Cela peut aller dans .htaccess ou le fichier de configuration de votre serveur. Il cache tout fichier ou répertoire dont le nom commence par .git (par exemple, un .git ou .gitignore ) en retournant un 404. Ainsi, non seulement le contenu de votre dépôt Git est caché, mais son existence même l'est également.

5 votes

J'aime beaucoup cette solution. Elle est simple et élégante.

5 votes

Placer ce document dans le répertoire racine htdocs fait aussi un travail global.

0 votes

Cette réponse est géniale. Simple. Propre. Et fonctionne même quand DirectoryMatch ne fonctionne pas.

82voto

phatblat Points 2046

Cela ne fonctionne pas parce que vous avez mis "svn" au lieu de "git" dans la règle. Tout ce que vous avez à faire est de remplacer "svn" par "git".

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

2 votes

Lorsque je crée un .htaccess contenant uniquement votre code, j'obtiens l'erreur suivante : "<DirectoryMatch non autorisé ici"

2 votes

Il doit être dans la conf d'Apache. Voir : httpd.apache.org/docs/1.3/mod/core.html#directorymatch

4 votes

La plus simple des regex est <DirectoryMatch /\.git/>

18voto

Jamie C. Points 41

Si vous êtes sur un service d'hébergement mutualisé et que vous n'avez pas accès à l'option apache.conf vous pouvez toujours le faire dans votre fichier .htaccess, comme ceci :

RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]

0 votes

Merci, cela a fonctionné pour moi dans une situation d'hébergement partagé où la première réponse n'a pas fonctionné.

16voto

noleti Points 3943

Si vous n'utilisez pas de fichiers .htaccess mais souhaitez plutôt utiliser /etc/apache2/httpd.conf (ou le fichier de configuration principal de votre serveur) pour masquer les répertoires .git et les fichiers .gitignore, vous pouvez utiliser ce qui suit. J'ai trouvé que la réponse ci-dessus pour la configuration du fichier de configuration principal ne masquait pas le fichier 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>

2 votes

Ne bloque pas le www.example.com/.git/config dans Apache httpd 2.4.27.

8voto

Frank Nocke Points 560
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]

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

Cela fonctionne dans .htaccess non http.conf accès requis. Incluez ceci comme la première des règles de réécriture. Préparez Rewrite On si nécessaire.

Du point de vue de la sécurité, je préfère un faux 404 à un 403, plus informatif pour l'attaquant. Commentez l'un des deux, pour vous assurer que l'autre fonctionne aussi pour vous.

Btw, de bons changements sont, votre test lithmus pour les deux sont :

http://localhost/.gitignore
http://localhost/.git/HEAD

0 votes

Pourquoi avoir les deux règles ? La règle RedirectMatch, plus simple, suffit à elle seule. (Aussi, les regex ne semblent pas tout à fait justes -- pourquoi le plus à la fin ?)

0 votes

Paranoïa personnelle / sécurité doublée. S'il arrive que RewriteEngine soit désactivé (changement de configuration centrale, mauvaise communication au sein de l'équipe, "mise à jour" malencontreuse du serveur,... vous l'avez dit :-) Le + est obsolète ou devrait être un $, bon point ! (pas le temps de faire des tests, désolé).

0 votes

Si vous craignez que RewriteEngine soit désactivé, mettez simplement RewriteEngine On avant votre RewriteRule. Mais de toute façon c'est tautologique et redondant parce que le plus simple RedirectMatch suffit à lui seul. Bien que même cela puisse être simplifié. Fondamentalement, je recommande ma réponse à la place. :)

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