Git
Chapters ▾ 2nd Edition

4.6 Git on the Server - Pametan HTTP

Pametan HTTP

Sada imamo autentifikovan pristup preko SSH-a i neautentifikovan pristup preko git://, ali postoji i protokol koji može raditi oba istovremeno. Podešavanje Pametnog HTTP-a se u principu svodi na dozvolu izvršenja CGI skripte koja je dostupna uz git u folderu git-hzzp-backend na serveru.

Ovaj CHI će pročitati putanju i zaglavalja koje pošalju git fetch ili git push na HTTP URL i odrediti da li klijent može da komunicira preko HTTP-a (što je tačno za svakog klijenta počev od verzije 1.6.6). Ako CGI vidi da je klijent pametan, komuniciraće s njim na pametan način, inače će mu pristupiti priglupo (kako bi bio kompatibilan sa za čitanje sa starijim verzijama klijenata).

Pogledajmo kako se vrše postavke ovoga. Korisićemo Apache kao CHI server. Ako nemate Apache podešen, ovo možete uraditi i preko Linuks boksa na sledeći način:

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

Ovo takođe omogućuje module mod_cgi, mod_alias, mod_env, and mod_rewrite, koji su svi neophodni za neometani rad.

Moraćete i da podesite Linuks grupu korisnika direktorijuma srv/git na www-data kako bi vaš veb-server mogao da ima pristup za čitanje i pisanje ka repozitorijumima, jer će instance Apache-a koja pokerće CGI skriptu (po podrazumevanim podešavanjima) biti pokrenuta kao taj korisnik:

$ chgrp -R www-data /opt/git

Sledeće što treba da uradimo jeste da dodamo neke stvari u Apache konfiguraciju kako bismo pokrenuli git-http-backend kao rukovodilac za sve što dođe na /git putanju vašeg veb-servera.

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

Ako izostavite promenljivu okruženja GIT_HTTP_EXPORT_ALL, Git će neautentifikovanim klijentima pružati samo repozitorijume koje u sebi imaju datoteku git-deamon-export-ok, baš kao što je bio slučaj kod Git demona.

Za kraj, želećete da kažete Apache-u da dozvoli pristup git-http-backend-u i da učini upis da bude nekako autentifikovan, na primer Auth blokom na sledeći način:

RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED]

<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /opt/git/.htpasswd
    Require valid-user
    Order deny,allow
    Deny from env=AUTHREQUIRED
    Satisfy any
</Files>

Ovo će od vas zahtevati da napravite datoteku .htpasswd koja sadrži šifre svih validnih korisnika. Evo primera dodavanja korisnika "schacon" u taj fajl:

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

Ima mnogo načina da Apache autentifikuje korisnike, i moraćete da izabere i implementirate jedan od njih. Ovo je samo najjednostavniji primer koji nam je pao na pamet. Skoro sigurno ćete ovo želeti da podesite preko SSL-a kako bi svi podaci bili enkriptovani.

Ne želimo da se previše upuštmo u specifičnosti konfiguracije Apache-a, pošto možete da koristite i drugi server ili da imate drugačije poterbe za autentifikacijom. Ideja je da Git dolazi uz CGI koji se naziva git-http-backend koji će obaviti sve neophodne pregovore o slanju i primanju podataka preko HTTP-a kada se pokrene. On kao takav ne implementira autentifikaciju, ali to se jednostavno može kontrolisati na sloju veb-servera koji ga poziva. To možete uraditi na skoro svakom veb-serveru koji ima podršku za CGI, tako da je najbolje da izaberete onaj koji već dobro poznajete.

Note

Za više inforamcija o konfiguraciji autentifikacije u Apache-u, pogledajte Apache-ovu dokumentaciju ovde: http://httpd.apache.org/docs/current/howto/auth.html