Git
Chapters ▾ 2nd Edition

4.6 Git na strežniku - Pametni HTTP

Pametni HTTP

Sedaj imamo overjen dostop preko SSH in neoverjen dostop preko git://, vendar obstaja tudi protokol, ki lahko naredi oboje istočasno. Nastavitev pametnega HTTP (angl. Smart HTTP) je v osnovi samo omogočenje skripta CGI, ki je ponujen z Gitom imenovanim git-http-backend na strežniku. Ta CGI bo prebral pot in glave, ki jih pošlje git fetch ali git push k HTTP URL in določa, ali lahko odjemalec komunicira preko HTTP (kar velja za kateregakoli odjemalca od različice 1.6.6). Če CGI vidi, da je odjemalec pameten, bo z njim komuniciral pametno; drugače se bo vrnil k neumnemu (angl. dumb) obnašanju (tako, da je združljiv za nazaj za branje s starejšimi odjemalci).

Pojdimo skozi zelo osnovno nastavitev. To bomo nastavili z Apachejem kot strežnikom CGI. Če nimate nastavljenega Apacheja, lahko to naredite na napravi Linux nekako takole:

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

To omogoči tudi module mod_cgi, mod_alias in mod_env, ki so obvezni, da to ustrezno deluje.

Morali boste nastaviti uporabniško skupino Unix za direktorije /srv/git na www-data, da bo vaš spletni strežnik lahko dostopal do repozitorijev z branjem in pisanjem, saj se bo instanca Apache, ki poganja skripto CGI (privzeto), poganjala kot ta uporabnik:

$ chgrp -R www-data /srv/git

Naslednje moramo dodati nekaj stvari k Apache nastavitvi, da poženemo git-http-backend kot krmilnik za karkoli, kar pride v pot /git vašega spletnega strežnika.

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

Če izpustite spremenljivko okolja GIT_HTTP_EXPORT_ALL, bo Git stregel repozitorije samo neoverjenim odjemalcem z datoteko git-daemon-export-ok v njih, tako kot to dela prikriti proces Git (angl. daemon).

Na koncu boste želeli povedati Apacheju, da dovoli zahtevke na git-http-backend, in narediti pisanje nekako overjeno, verjetno z blokom Auth nekako takole:

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

To bo zahtevalo, da ustvarite datoteko .htaccess, ki vsebuje gesla za vse veljavne uporabnike. Tu je primer dodajanja uporabnika »schacon« k datoteki:

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

Na voljo je tona načinov, kako narediti, da Apache overi uporabnike, izbrati in implementirati pa boste morali enega od njih. To je samo enostaven primer, ki nam ga uspe prikazati. Skoraj zagotovo boste tudi to nastavili preko SSL, da so vsi podatki šifrirani.

Ne želimo iti predaleč po zajčevi luknji nastavitvenih posebnosti Apache, ker lahko boste uporabljali drugačni strežnik ali pa imeli drugačne overitvene potrebe. Ideja je, da Git prihaja s CGI-jem imenovanim git-http-backend, kateri bo, ko je sklican, naredil vsa pogajanja, da pošilja in prejema podatke preko HTTP. Sam po sebi ne implementira nikakršnega overjanja, vendar to je lahko enostavno krmiljeno na nivoju spletnega strežnika, ki ga prikliče. To lahko naredite s skoraj katerimkoli spletnim strežnikom, ki zmore CGI, torej uporabite tistega, ki ga najbolj poznate.

Opomba

Za več informacij o nastavitvah overjanja v Apacheju, preverite dokumentacijo Apache tu: https://httpd.apache.org/docs/current/howto/auth.html.

scroll-to-top