Git
Chapters ▾ 2nd Edition

4.6 Git op de server - Slimme HTTP

Slimme HTTP

We hebben nu geauthenticeerde toegang via SSH en ongeauthenticeerde toegang met git://, maar er is een protocol die tot beide in staat is. Slimme HTTP opzetten is eigenlijk gewoon op de server een CGI script git-http-backend geheten activeren die met Git wordt geleverd. Deze CGI leest het pad en de headers die door een git fetch of een git push worden gestuurd aan een HTTP URL en bepaalt of de client via HTTP kan communiceren (wat elke client sinds versie 1.6.6 kan). Als de CGI ziet dat de client "slim" is, zal het op de slimme manier met deze communiceren, anders zal het terugvallen op het domme gedrag (dus het is "backward compatible" met lees acties van oudere clients).

Laten we een heel eenvoudige opzet doornemen. We zullen het gaan opzetten met Apache als de CGI server. Als je geen Apache hebt geïnstalleerd, kan je dit op een Linux machine doen met iets wat lijkt op:

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

Dit zet mod_cgi, mod_alias en mod_env modules aan, die alle nodig zijn om dit goed te laten werken.

Je zult ook nog de Unix user groep van de /srv/git directories naar www-data te zetten zodat je webserver lees- en schrijfrechten heeft op de repositories, omdat de Apache instantie die de CGI script draait (standaard) draait onder die user:

$ chgrp -R www-data /srv/git

Vervolgens moeten we een aantal dingen aan de Apache configuratie toevoegen om git-http-backend als afhandelaar te identificeren voor alles wat in het /git pad van je web server binnenkomt.

SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

Als je de GIT_HTTP_EXPORT_ALL uit je omgevingsvariabele laat, zal Git alleen de repositories met het git-daemon-export-ok bestand erin verspreiden, net zoals de Git daemon deed.

Als laatste moet je Apache vertellen om verzoeken naar paden toe te staan die er zo uit zien, optioneel met een Auth block zoals hier:

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

Dat verplicht je een .htaccess bestand aan te maken met daarin de wachtwoorden van al de geldige gebruikers. Hier is een voorbeeld van hoe een “schacon” gebruiker toe te voegen aan het bestand:

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

Er zijn tig manieren om geauthenticeerde gebruikers in Apache aan te geven, je zult een keuze moeten maken en een van deze implementeren. Dit is gewoon een van de eenvoudigste voorbeelden die we konden verzinnen. Je zult dit waarschijnlijk ook over SSL willen opzetten, zodat alle gegevens zijn versleuteld.

We willen ons niet te veel bochten wringen om de specifieke zaken van Apache configuraties uit de doeken te doen, je gebruikt misschien een andere server of andere authenticatie behoeften hebben. De clou is dat Git met een CGI geleverd wordt die git-http-backend heet die, wanneer geactiveerd, alle onderhandelingen doet teneinde bestanden te sturen en te ontvangen over HTTP. Deze implementeert het authenticeren zelf niet, maar dat kan eenvoudig worden beheerd op het niveau van de server die dit aanroept. Je kunt dit met vrijwel elke web server met CGI capaciteiten, dus pas het vooral toe op hetgeen waar je het meest bekend mee bent.

Note

Voor meer informatie over het configureren van authenticatie in Apache, verwijzen we je naar de volgende Apache documentatie: http://httpd.apache.org/docs/current/howto/auth.html