Git HTTP Smart上的读取身份验证未发出signon challange

Git HTTP Smart上的读取身份验证未发出signon challange,git,Git,我已经实现了一个基于Centos8的Git智能HTTP服务器。所有“推送”操作都正常工作,需要登录验证。读取操作正常工作,但不需要身份验证。SSL也在工作 虽然匿名“读取”是公共中央回购的标准,但在“私有”环境中,很可能会要求防止未经验证的读取。例如,以下请求需要用户和密码。目前,它并不存在,而且对公众开放。 这是git-srv.include文件。我省略了git-srv.conf文件,因为它很简单。 这是不希望的未经身份验证的访问的示例 $git ls remote 6c3652164e469

我已经实现了一个基于Centos8的Git智能HTTP服务器。所有“推送”操作都正常工作,需要登录验证。读取操作正常工作,但不需要身份验证。SSL也在工作

虽然匿名“读取”是公共中央回购的标准,但在“私有”环境中,很可能会要求防止未经验证的读取。例如,以下请求需要用户和密码。目前,它并不存在,而且对公众开放。 这是git-srv.include文件。我省略了git-srv.conf文件,因为它很简单。 这是不希望的未经身份验证的访问的示例
$git ls remote 6c3652164e4694d76b41eb87662b997b813d8b51机头 6c3652164e4694d76b41eb87662b997b813d8b51参考/头部/主要部分

我在Apache.include中添加了以下“Location”块,但它并没有强制执行读取操作的登录。需要书面签名。LocationsMatch块来自我复制的原始块

重新启动引擎
RewriteCond%{QUERY\u STRING}service=git接收包[或]
RewriteCond%{REQUEST_URI}/git receive pack$
重写规则^/git/-[E=AUTHREQUIRED:yes]
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias/git/jtest/usr/libexec/git-core/git-http-backend/


SetEnv GIT\u PROJECT\u ROOT/srv/GIT/
AuthType Basic
AuthName“Git对jtest的读取权限”
AuthUserFile/etc/httpd/.authusers-
需要有效的用户
订单拒绝,允许
拒绝来自env=AUTHREQUIRED
满足任何


SetEnv GIT\u PROJECT\u ROOT/srv/GIT/
AuthType Basic
AuthName“Git对jtest的写访问权”
AuthUserFile/etc/httpd/.authusers-
需要有效的用户
订单拒绝,允许
拒绝来自env=AUTHREQUIRED
满足任何


如有任何建议,我们将不胜感激。

此块存在问题:

RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]
如果您的操作是
git receive pack
(上载),则此块设置
AUTHREQUIRED
,但如果您的操作是
git upload pack
(克隆或获取),则不设置此块

您可能只想删除该块,因为您总是需要身份验证,然后更改:

Require valid-user
Order deny,allow
Deny from env=AUTHREQUIRED
Satisfy any
为此:

Require valid-user
Order deny,allow
Deny from all
Satisfy any
然后默认行为是拒绝,您可以通过提供有效的用户来满足您的请求


如果您需要更高级的访问控制,您可以考虑像GITLITE这样的东西,它可以根据用户访问它来控制对不同存储库的访问。

< P>问题是:
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]
如果您的操作是
git receive pack
(上载),则此块设置
AUTHREQUIRED
,但如果您的操作是
git upload pack
(克隆或获取),则不设置此块

您可能只想删除该块,因为您总是需要身份验证,然后更改:

Require valid-user
Order deny,allow
Deny from env=AUTHREQUIRED
Satisfy any
为此:

Require valid-user
Order deny,allow
Deny from all
Satisfy any
然后默认行为是拒绝,您可以通过提供有效的用户来满足您的请求


如果您需要更高级的访问控制,您可以考虑像GITLITE这样的控件,它可以根据用户访问它来控制对不同存储库的访问。有了这样的回应。然后,我就能够降低成本 git srv。将文件包含到以下代码中。现在读写都需要身份验证,正如我所寻求的

    SetEnv GIT_HTTP_EXPORT_ALL

    ScriptAlias /git/jtest /usr/libexec/git- 
      core/git-http-backend/
    <LocationMatch "^/git/jtest">
      SetEnv GIT_PROJECT_ROOT /srv/git/jtest    
      AuthType Basic
      AuthName "Git Write Access to jtest"
      AuthUserFile /etc/httpd/.authusers-jtest
      Require valid-user
      Order deny,allow
      Deny from all
      Satisfy any
    </LocationMatch>
SetEnv GIT\u HTTP\u EXPORT\u ALL
ScriptAlias/git/jtest/usr/libexec/git-
核心/GitHTTP后端/
SetEnv GIT_PROJECT_ROOT/srv/GIT/jtest
AuthType Basic
AuthName“Git对jtest的写访问权”
AuthUserFile/etc/httpd/.authusers jtest
需要有效用户
命令拒绝,允许
全盘否定
满足任何

bk220k的回复回答了这个问题。有了这样的回应。然后,我就能够降低成本
git srv。将文件包含到以下代码中。现在读写都需要身份验证,正如我所寻求的

    SetEnv GIT_HTTP_EXPORT_ALL

    ScriptAlias /git/jtest /usr/libexec/git- 
      core/git-http-backend/
    <LocationMatch "^/git/jtest">
      SetEnv GIT_PROJECT_ROOT /srv/git/jtest    
      AuthType Basic
      AuthName "Git Write Access to jtest"
      AuthUserFile /etc/httpd/.authusers-jtest
      Require valid-user
      Order deny,allow
      Deny from all
      Satisfy any
    </LocationMatch>
SetEnv GIT\u HTTP\u EXPORT\u ALL
ScriptAlias/git/jtest/usr/libexec/git-
核心/GitHTTP后端/
SetEnv GIT_PROJECT_ROOT/srv/GIT/jtest
AuthType Basic
AuthName“Git对jtest的写访问权”
AuthUserFile/etc/httpd/.authusers jtest
需要有效用户
命令拒绝,允许
全盘否定
满足任何