Git认证推送apache
我有几个Git存储库。所有这些都可以通过apache服务器访问,并且所有人都可以进行R/W访问。但是,某些存储库应该对其进行身份验证。我做过类似的事情Git认证推送apache,git,apache,Git,Apache,我有几个Git存储库。所有这些都可以通过apache服务器访问,并且所有人都可以进行R/W访问。但是,某些存储库应该对其进行身份验证。我做过类似的事情 <LocationMatch "^/.*/git-receive-pack$"> AuthType Basic AuthName "Git Access" AuthBasicProvider file # Password file created with htpasswd AuthUserF
<LocationMatch "^/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthBasicProvider file
# Password file created with htpasswd
AuthUserFile /sample/password
Require valid-user
</LocationMatch>
http://user@server/git/foo.git/info/refs?service=git-receive-pack
AuthType Basic
AuthName“Git访问”
AuthBasicProvider文件
#使用htpasswd创建的密码文件
AuthUserFile/示例/密码
需要有效用户
但它要求所有存储库的用户名和密码。我只想为少数存储库启用它。一些背景
其思想是,当通过HTTP[S]推送时,Git执行如下请求
<LocationMatch "^/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthBasicProvider file
# Password file created with htpasswd
AuthUserFile /sample/password
Require valid-user
</LocationMatch>
http://user@server/git/foo.git/info/refs?service=git-receive-pack
<>这个URI的部分< <代码> <代码>或<代码> <代码>指令考虑匹配时
/git/foo.git/info/refs?service=git-receive-pack
它可以分为几个部分:
/git/foo.git
这是您在向Git讲述存储库的URI时直接指定的内容,
就像做git克隆一样http://user@server/git/foo.git
/info/refs?service=git-receive-pack
这部分是由客户端Git添加的,您无法控制它*
位匹配零个或多个字符,因此它显然匹配Git URI中的任何字符
您需要改进此模式,以便以某种方式仅引用希望应用推送限制的回购。还请记住,如果您使用的是公共前缀(如上面示例中的/git/
),那么它也必须匹配
现在要写一个合适的正则表达式
一种方法是使用所谓的更改(如中所示)直接指定它们
<LocationMatch "^/git/(repo1|repo2|repo3)/.*/git-receive-pack$">
后一种方法不需要您在添加另一个需要经过身份验证的推送的存储库时更新Apache的配置并重新加载它:只需将其放到由该前缀映射的目录中即可
当然,URI规范的确切部分取决于配置的其余部分(比如是否使用not的前缀^/git/
)