Git
Chapters ▾ 2nd Edition

4.6 Git på servern - Smart HTTP

Smart HTTP

Vi har nu autentiserad åtkomst genom SSH och icke-autentiserad åtkomst genom git:// men det fins också protokoll som kan göra båda saker samtidigt. Att konfigurera Smart HTTP är praktiskt taget bara att tillåta ett CGI-skript som tillhandahålls tillsammans med Git som heter git-http-backend på servern. Detta CGI kommer läsa sökvägen och headers som skickas av git fetch eller git push till en HTTP URL och avgöra om klienten kan kommuniocera över HTTP (vilket stämmer för alla klienter sedan version 1.6.6). Om CGI ser att klienten är smart, kommer den att kommunicera smart med den, annars kommer den falla tillbaka till det dumma beteendet (så den är bakåtkompatibel för läsning med äldre klienter).

Låt oss gå igenom en väldigt grundläggande konfiguration. Vi kommer att konfigurera detta med Apache som CGI-server. Om du inte har Apache så kan du installera det på en Linuxburk genom nåt liknande detta:

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

Detta aktiverar även modulerna mod_cgi, mod_alias, och mod_env som behövs för att detta skall fungera ordentligt.

DU kommer också behöva konfigurera Unixanvändargruppen för katalogerna /srv/git till www-data så att din webserver kan läsa och skriva till repona, eftersom Apacheinstansen som kör CGI-skriptet kommer (normalt) köras som den användaren:

$ chgrp -R www-data /srv/git

Nu behöver vi lägga till några rader i Apaches konfiguration för att köra git-http-backend som hanterare för något som inkommer till /git-sökvägen på webservern.

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

Om du utelämnar miljövariabeln GIT_HTTP_EXPORT_ALL kommer Git bara tillhandahålla repon med git-daemon-export-ok-filen till icke-autentiserade klienter, precis som Gitdaemoenen gjorde.

Slutligen behöver du tala om för Apache att tillåta anrop till git-http-backend och göra skrivningar autentiserade på något sätt, möjligtvis genom ett Auth-block som här:

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

Det kommer kräva att du skapar en .htpasswd-fil som innehåller lösenorden av alla giltiga användare. Här är ett exempel med att lägga till användaren “schacon” till filen:

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

Det finns en mängd sätt att få Apache att autentisera användare, du måste välja och implementera en av dem. Detta är det enklaste exemplet vi kom på. Du kommer också med säkerhet vilja konfigurera SSL så att all data är krypterad.

Vi dyker inte så långt ner i kaninhålet när det kommer till specifika Apachekonfigurationer, eftersom du mycket väl kan använda en annan server eller ha andra autentiseringsbehov. Iden är att Git kommer med ett CGI kallat git-http-backend som, när det anrpoas, gör all förhandling för att skicka och ta emot data över HTTP. Den implementerar inte själva autentiseringen, men det kan lätt kontrolleras av webbserverlagret som anropar den. Du kan göra detta med nästan alla CGI-kapabla webservrar, så använd den som du känner till bäst.

Notera

För mer information om konfigurering av autentisering av Apache, läs Apachedokumentationen här:http://httpd.apache.org/docs/current/howto/auth.html[]

scroll-to-top