git-http-backend avec AuthzUnixGroup ne fonctionne pas correctement

J’essaie de configurer un repository git sur mon Apache 2.2 sur une boîte CentOS 6, avec git installé. J’ai essayé de suivre de nombreuses directions différentes et je suis perdue. Ma situation actuelle consiste à pouvoir clone normalement, mais être totalement incapable de pousser.

Il semble que je sois incapable de faire fonctionner correctement le bit d’authentification, car je peux normalement effectuer le push tout en définissant http.receivepack sur true .

J’ai installé AuthzUnixGroup ainsi que mod_authz_external .

Je suis allé dans /var/www/git et my-repo.git créé un repo nommé my-repo.git et my-repo.git fait un git init --bare intérieur.

Ensuite, je configure mon fichier git.conf dans /etc/httpd/conf.d/ comme suit:

  SetEnv GIT_HTTP_EXPORT_ALL SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER ScriptAlias /git /usr/libexec/git-core/git-http-backend AddExternalAuth pwauth /usr/local/libexec/pwauth SetExternalAuthMethod pwauth pipe  AllowOverride None Options +ExecCGI -Includes Order allow,deny Allow from all   AuthzUnixGroup on AuthType Basic AuthName "Git repository" AuthBasicProvider external AuthExternal pwauth Require group git   

Le fait de pointer mon navigateur Web vers mysite/git me montre bien la boîte de dialog de connexion HTTP de base, qui fonctionne parfaitement. Je me suis ajouté au groupe git , et faire un groups sur mes retours de shell:

 naseri sudo git 

qui est comme prévu.

Quand je git clone http://mysite/git/my-repo.git Je reçois les informations suivantes du fichier access_log pour httpd sous /var/logs/httpd/access_log :

 2.177.130.21 - - [11/Jun/2014:18:51:07 +0000] "GET /git/my-repo.git/info/refs?service=git-upload-pack HTTP/1.1" 401 480 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - - [11/Jun/2014:18:51:08 +0000] "GET /git/my-repo.git/info/refs?service=git-upload-pack HTTP/1.1" 401 480 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - naseri [11/Jun/2014:18:51:08 +0000] "GET /git/my-repo.git/info/refs?service=git-upload-pack HTTP/1.1" 200 256 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - naseri [11/Jun/2014:18:51:09 +0000] "POST /git/my-repo.git/git-upload-pack HTTP/1.1" 200 368 "-" "git/1.8.5.2 (Apple Git-48)" 

Sur le client, le clone fonctionne correctement. Je change de contenu, puis essaie de pousser après un commit en git push le contenu.

C’est ce que j’obtiens dans le journal côté serveur:

 2.177.130.21 - - [11/Jun/2014:18:53:26 +0000] "GET /git/my-repo.git/info/refs?service=git-receive-pack HTTP/1.1" 401 480 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - naseri [11/Jun/2014:18:53:27 +0000] "GET /git/my-repo.git/info/refs?service=git-receive-pack HTTP/1.1" 401 480 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - naseri [11/Jun/2014:18:53:30 +0000] "GET /git/my-repo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 - "-" "git/1.8.5.2 (Apple Git-48)" 

Je peux voir que ma réponse “Authentication Required” est renvoyée par Apache sur la première ligne de réponse (401) mais le client me montre:

 fatal: unable to access 'http://mysite/git/my-repo.git/': The requested URL returned error: 403 

Je n’ai aucune idée du problème, car le fait de pointer mon navigateur vers la même URL fait apparaître l’authentification et fonctionne même correctement.

Cette réponse plus ancienne

git-http-backend renvoie un code 403 / Forbidden lorsque le client demande à utiliser la méthode git-receive-pack.
Il revient alors à WebDAV, mais l’utilisation de WebDAV n’est pas nécessaire .

J’ai eu le même problème; dans mon cas, cela était dû au fait que REMOTE_USER n’était pas défini

Étant donné que n’importe quelle configuration d’Apache utilise un ‘ = ‘ lors de la définition d’une variable, vérifiez si cela fonctionne mieux:

 SetEnv REMOTE_USER $REDIRECT_REMOTE_USER 

(non ‘ - ‘ entre les deux variables)

Vérifiez également si (re) la définition de REMOTE_USER fonctionne pas (car elle a peut-être déjà été définie, alors que REDIRECT_REMOTE_USER peut ne pas l’être): essayez sans cette ligne.
Je n’ai jamais à le définir dans ma configuration Apache Git.

J’ai été dans une situation comme celle-ci, et j’ai découvert qu’essayer d’utiliser Apache pour servir git était loin d’être simple ou facile.

Au lieu de cela, je recommanderais d’installer Gerrit – il permet d’héberger plusieurs référentiels, et surtout, un modèle extrêmement flexible de gestion des utilisateurs / groupes et des permissions. En prime, il s’agit également d’un moteur de révision de code très puissant, mais il est complètement facultatif – vous n’avez pas à utiliser les fonctionnalités de révision de code si vous ne le souhaitez pas.

Les autres solutions connues sont le Gitlab et le Gitolite – vous voudrez peut-être les examiner également.