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