Ara tenim accés autenticat a través de SSH i accés no autenticat a través de git://, però també hi ha un protocol que pot fer ambdues coses al mateix temps.
Configurar Smart HTTP bàsicament és habilitar un script CGI que ve amb Git anomenat git-http-backend al servidor.
Aquest CGI llegirà la ruta i les capçaleres enviades per un git fetch o git push a una URL HTTP i determinarà si el client pot comunicar-se a través d’HTTP (el qual és cert per a qualsevol client des de la versió 1.6.6).
Si el CGI veu que el client és intel·ligent, es comunicarà intel·ligentment amb ell; d’altra manera, recaurà al comportament no intel·ligent (per tant, és compatible amb versions anteriors per a lectures amb clients més antics).
Recorreguem una configuració molt bàsica. Configurarem això amb Apache com a servidor CGI. Si no teniu Apache configurat, podeu fer-ho en una màquina Linux amb alguna cosa com això:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias envAixò també habilita els mòduls mod_cgi, mod_alias, i mod_env, tots necessaris perquè això funcioni correctament.
També haureu de configurar el grup d’usuaris Unix dels directoris /srv/git a www-data perquè el vostre servidor web pugui tenir accés de lectura i escriptura als repositoris, perquè la instància d’Apache que executa l’script CGI (per defecte) s’executarà com aquest usuari:
$ chgrp -R www-data /srv/gitA continuació, necessitem afegir algunes coses a la configuració d’Apache per executar git-http-backend com a gestor de qualsevol cosa que arribi al camí /git del vostre servidor web.
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/Si omiteu la variable d’entorn GIT_HTTP_EXPORT_ALL, llavors Git només servirà als clients no autenticats els repositoris amb el fitxer git-daemon-export-ok, igual que ho feia el dimoni Git.
Finalment, voldreu dir a Apache que permeti les peticions a git-http-backend i fer que les escriptures estiguin autenticades d’alguna manera, possiblement amb un bloc d’autenticació com aquest:
<Files "git-http-backend">
AuthType Basic
AuthName "Accés Git"
AuthUserFile /srv/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>Això us requerirà crear un fitxer .htpasswd que contingui les contrasenyes de tots els usuaris vàlids.
Aquí teniu un exemple d’afegir un usuari “schacon” al fitxer:
$ htpasswd -c /srv/git/.htpasswd schaconHi ha moltes maneres de fer que Apache autentiqui usuaris, haureu de triar i implementar una d’elles. Això és només l’exemple més senzill que hem pogut trobar. També gairebé segur que voldreu configurar això sobre SSL perquè totes aquestes dades estiguin xifrades.
No volem entrar massa en els detalls específics de la configuració d’Apache, ja que podríeu estar utilitzant un servidor diferent o tenir necessitats d’autenticació diferents.
La idea és que Git ve amb un CGI anomenat git-http-backend que, quan s’invoca, farà tota la negociació per enviar i rebre dades a través d’HTTP.
No implementa cap autenticació per si mateix, però això es pot controlar fàcilment a la capa del servidor web que l’invoca.
Podeu fer això amb gairebé qualsevol servidor web capaç de CGI, així que utilitzeu el que coneixeu millor.
|
Note
|
Per a més informació sobre la configuració d’autenticació a Apache, consulteu la documentació d’Apache aquí: https://httpd.apache.org/docs/current/howto/auth.html. |