git-http-backend AuthzUnixGroup无法正常工作

我试图在安装了git的CentOS 6盒子上的Apache 2.2上build立一个git仓库。 我试过了很多不同的方向,而我却不知所措。 我目前的情况包括能够正常clone ,但完全无法推送。

看起来好像我无法使authentication位正常工作,因为我可以正常执行push,同时将http.receivepack设置为true

我已经安装了AuthzUnixGroup以及mod_authz_external

我去了/var/www/git并创build了一个名为my-repo.git的回购my-repo.git ,并在其中执行了一个git init --bare

然后我在/etc/httpd/conf.d/设置我的git.conf文件,如下所示:

 <VirtualHost "*:80"> 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 <Directory "/usr/libexec/git-core/"> AllowOverride None Options +ExecCGI -Includes Order allow,deny Allow from all </Directory> <Location "/git"> AuthzUnixGroup on AuthType Basic AuthName "Git repository" AuthBasicProvider external AuthExternal pwauth Require group git </Location> </VirtualHost> 

指向我的网页浏览器mysite/git很好地显示了我的HTTP基本login对话框,完美的作品。 我已经将自己添加到组git ,并在我的shell上执行一个groups返回:

 naseri sudo git 

这是预期的。

当我做git clone http://mysite/git/my-repo.git我从/var/logs/httpd/access_log下的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)" 

在客户端上, clone工作正常。 我改变了一些东西,然后尝试通过git push内容进行提交。

这是我在服务器端日志上得到的:

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

我可以看到,我的“需要身份validation”响应正由Apache在响应的第一行(401)发回,但客户端向我显示:

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

我对这个问题一无所知,因为把浏览器指向相同的URL可以提供authentication,甚至是正确的。

这个老的答案

当客户端要求使用git-receive-pack方法时, git-http-backend返回403 / Forbidden代码。
然后它回落到WebDAV, 但使用WebDAV是没有必要的

我有同样的问题; 在我的情况下这是由于没有设置REMOTE_USER

由于我的任何一个Apache配置在设置变量时都使用了' = ',请检查一下这个效果是否更好:

 SetEnv REMOTE_USER $REDIRECT_REMOTE_USER 

(两个变量之间没有“ - ”)

检查是否(重新)定义REMOTE_USER (也可能已经定义,而REDIRECT_REMOTE_USER可能不会):尝试没有这条线。
我从来没有必要在我的Apache Git配置中定义它。

我一直在这样的情况下,发现试图使用Apache服务git是非常简单或简单的事情。

相反,我会建议安装Gerrit – 它允许托管多个存储库,最重要的是具有非常灵活的用户/组管理和权限模型。 作为一个不错的奖励,它也是非常强大的代码审查引擎,但它是完全可选的 – 如果你不想使用代码审查功能,你不必使用它。

其他已知的解决方案是Gitlab和Gitolite – 你可能也想看看它们。