我有一个通过智能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
答案 0 :(得分:0)
您的配置使用的Require expr
与git-receive-pack
匹配。这就是您推送到服务器时使用的服务。为了使服务器要求对克隆和提取进行身份验证,还需要在git-upload-pack
上进行匹配。
解决此问题的最简单方法可能是删除Require expr
行,因为这听起来像您希望服务器始终应用身份验证,而不管您要执行的任务是什么。删除Require expr
行会删除非推送操作的豁免。