通过HTTP协议进行身份验证的Git克隆

时间:2018-07-20 12:20:18

标签: linux git apache centos git-clone

我有一个通过智能http共享git repo的centos 7服务器,当我执行“ git push”时,身份验证有效,但是当我进行“ git clone”时,则无效。我要比Git和Apache要求我输入用户名和密码来克隆存储库。

/ var / www / git->是我的仓库目录 / var / www / html->网站目录是

我的site.conf是:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName miserver.com
DocumentRoot /var/www/html

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git /usr/libexec/git-core/git-http-backend/

<Directory /var/www/html/gitweb>
    Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
    AllowOverride All
    order allow,deny
    Allow from all
    AddHandler cgi-script cgi
    DirectoryIndex gitweb.cgi
</Directory>

<Directory /var/www/git>
    DAV On
    Options ExecCGI FollowSymLinks Indexes
    AuthType Basic
    AuthName "git repository"
    AuthUserFile /var/www/git/.htpasswd
</Directory>

<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /var/www/git/.htpasswd
    Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
    Require valid-user
</Files>

ErrorLog /var/www/html/error.log
CustomLog /var/www/html/access.log combined

1 个答案:

答案 0 :(得分:0)

您的配置使用的Require exprgit-receive-pack匹配。这就是您推送到服务器时使用的服务。为了使服务器要求对克隆和提取进行身份验证,还需要在git-upload-pack上进行匹配。

解决此问题的最简单方法可能是删除Require expr行,因为这听起来像您希望服务器始终应用身份验证,而不管您要执行的任务是什么。删除Require expr行会删除非推送操作的豁免。

相关问题