Git 🌙
Chapters â–Ÿ 2nd Edition

4.6 Git sur le serveur - HTTP intelligent

HTTP intelligent

Nous avons Ă  prĂ©sent un accĂšs authentifiĂ© par SSH et un accĂšs non authentifiĂ© par git://, mais il existe aussi un protocole qui peut faire les deux Ă  la fois. La configuration d’un HTTP intelligent revient simplement Ă  activer sur le serveur un script CGI livrĂ© avec Git qui s’appelle git-http-backend. Ce CGI va lire le chemin et les entĂȘtes envoyĂ©s par un git fetch ou un git push Ă  une URL donnĂ©e et dĂ©terminer si le client peut communiquer sur HTTP (ce qui est vrai pour tout client depuis la version 1.6.6). Si le CGI dĂ©tecte que le client est intelligent, il va commencer Ă  communiquer par protocole intelligent, sinon il repassera au comportement du protocole idiot (ce qui le rend de ce fait compatible avec les vieux clients).

DĂ©taillons une installation de base. Nous la rĂ©aliserons sur un serveur web Apache comme serveur CGI. Si Apache n’est pas installĂ© sur votre PC, vous pouvez y remĂ©dier avec une commande :

$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env

Cela a aussi pour effet d’activer les modules mod_cgi, mod_alias, et mod_env qui sont nĂ©cessaires au fonctionnement du serveur.

Vous allez aussi avoir besoin de paramĂ©trer le groupe Unix des rĂ©pertoire /srv/git Ă  www-data pour que votre serveur web puisse lire et Ă©crire dans les dĂ©pĂŽts, parce que l’instance Apache lançant le script CGI aura (par dĂ©faut) cet utilisateur :

$ chgrp -R www-data /srv/git

Ensuite, nous devons ajouter quelques lignes à la configuration d’Apache pour qu’il lance git-http-backend comme gestionnaire de tous les chemins du serveur web sous /git.

SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

Si vous ne dĂ©finissez pas la variable d’environnement GIT_HTTP_EXPORT_ALL, Git ne servira aux utilisateurs non authentifiĂ©s que les dĂ©pĂŽts comprenant le fichier git-daemon-export-ok, de la mĂȘme maniĂšre que le daemon Git.

Puis, nous allons indiquer Ă  Apache qu’il doit accepter les requĂȘtes sur ce chemin avec quelque chose comme :

<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /srv/git/.htpasswd
    Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
    Require valid-user
</Files>

Il vous sera nĂ©cessaire de crĂ©er un fichier .htpasswd contenant les mots de passe de tous les utilisateurs valides. Voici un exemple d’ajout d’un utilisateur schacon au fichier :

$ htpasswd -c /srv/git/.htpasswd schacon

Il existe des milliers de façons d’authentifier des utilisateurs avec Apache, il suffira d’en choisir une et de la mettre en place. L’exemple ci-dessus n’est que le plus simple. Vous dĂ©sirerez sĂ»rement gĂ©rer tout ceci sous SSL pour que vos donnĂ©es soient chiffrĂ©es.

Nous ne souhaitons pas nous appesantir spĂ©cifiquement sur la configuration d’Apache, car on peut utiliser un serveur diffĂ©rent ou avoir besoin d’une authentification diffĂ©rente. L’idĂ©e gĂ©nĂ©rale reste que Git est livrĂ© avec un CGI appelĂ© git-http-backend qui, aprĂšs authentification, va gĂ©rer toute la nĂ©gociation pour envoyer et recevoir les donnĂ©es sur HTTP. Il ne gĂšre pas l’authentification par lui-mĂȘme, mais peut ĂȘtre facilement contrĂŽlĂ© Ă  la couche serveur web qui l’invoque. Cela peut ĂȘtre rĂ©alisĂ© avec n’importe quel serveur web gĂ©rant le CGI, donc celui que vous connaissez le mieux.

Note

Pour plus d’informations sur la configuration de l’authentification dans Apache, rĂ©fĂ©rez-vous Ă  la documentation d’Apache : https://httpd.apache.org/docs/current/howto/auth.html

scroll-to-top