Linux 尝试使用多存储库和多用户创建git http后端
我用git http后端创建了一个git服务器。Linux 尝试使用多存储库和多用户创建git http后端,linux,windows,git,apache,git-http-backend,Linux,Windows,Git,Apache,Git Http Backend,我用git http后端创建了一个git服务器。 我创建了2个存储库(Project1,Project2)和3个用户(user1,user2,user3) 使用命令克隆时: git clone http://myodmain/Project1/ 我只希望user1和user2能够访问此克隆(Project1) 使用命令克隆时: git clone http://myodmain/Project2/ 我只希望user3能够访问此克隆(Project2),而user1和user2无法访
我创建了2个存储库(
Project1
,Project2
)和3个用户(user1
,user2
,user3
)
使用命令克隆时:
git clone http://myodmain/Project1/
我只希望user1
和user2
能够访问此克隆(Project1
)
使用命令克隆时:
git clone http://myodmain/Project2/
我只希望user3
能够访问此克隆(Project2
),而user1
和user2
无法访问它
现在,我的配置服务器可以克隆、推、拉、合并,。。。但是所有用户都有相同的权限。请帮我举几个例子 您尚未提供有关服务器设置的任何信息,因此答案可能会有所不同。我认为您缺少的最重要的部分是在web服务器中设置身份验证。但是,一旦您这样做了,如果您希望对不同存储库的用户分别进行身份验证,那么您将遇到git http后端的问题。我发布了一个涵盖这两个问题的答案。您可能还想查看该帖子以查看其他评论: 以下是我最初在那里发布的内容: 使用Apache 2.4的解决方案 我发现的问题是git http后端脚本实际上控制了对存储库的所有访问。此外,ScriptAlias配置为将所有/git/请求路由到git http后端,而不管路径的其余部分如何。而且,由于您已经为GITGROUP提供了对该脚本的访问权限,该组将可以访问URL中以/git/开头的任何存储库。根据文件 git http后端知道每个存储库的位置,因为Apache为其提供了一个环境变量。我怀疑这意味着git http后端是服务器上唯一直接访问存储库,然后向Apache提供响应的进程 我的解决方案增加了一些额外的步骤。本质上,您将强制任何对git http后端的访问只在您已经对存储库的位置进行了身份验证之后进行,而不是之前。这是通过在存储库目录本身中放置指向脚本的链接,然后验证该位置来完成的 注意:我只使用裸存储库(gitinit--bare)完成了这项工作。我怀疑,如果出于某种原因您需要使用非裸存储库,此解决方案将需要一些调整(最后有一些想法): 简而言之:
SetEnv GIT_PROJECT_ROOT/var/www/html/GIT/subdir1.GIT
SetEnv GIT_HTTP_EXPORT_ALL
AuthType Basic
AuthName“需要授权”
... ...
SetEnv GIT_PROJECT_ROOT/var/www/html/GIT/subdir2.GIT
SetEnv GIT_HTTP_EXPORT_ALL
AuthType Basic
AuthName“需要授权”
... ...
选项+执行CGI-多视图+符号链接SiFownerMatch-索引
不允许超限
选项+执行CGI-多视图+符号链接SiFownerMatch-索引
不允许超限
如果您没有使用裸存储库:
我只在git服务器上使用裸存储库,但我认为如果没有裸存储库,创建此符号链接可能会出现问题。我担心的是有人会以某种方式将您的链接添加到存储库。我不确定这是否可行,但有几个解决办法:
您尚未提供有关服务器设置的任何信息,因此答案可能会有所不同。我认为您缺少的最重要的部分是在web服务器中设置身份验证。但是,一旦您这样做了,如果您希望对不同存储库的用户分别进行身份验证,那么您将遇到git http后端的问题。我发布了一个涵盖这两个问题的答案。您可能还想查看该帖子以查看其他评论: 以下是我最初在那里发布的内容: 使用
ScriptAliasMatch \
"(?x)^/git/(.*/)((HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
"/var/www/html/git/$1/git-core/git-http-backend/$2"
<Location /git/subdir1.git>
SetEnv GIT_PROJECT_ROOT /var/www/html/git/subdir1.git
SetEnv GIT_HTTP_EXPORT_ALL
AuthType Basic
AuthName "Authorization Required"
... <the rest of your authentication details here> ...
</Location>
<Location /git/subdir2.git>
SetEnv GIT_PROJECT_ROOT /var/www/html/git/subdir2.git
SetEnv GIT_HTTP_EXPORT_ALL
AuthType Basic
AuthName "Authorization Required"
... <the rest of your authentication details here> ...
</Location>
<Directory /var/www/html/git/subdir1.git/git-core>
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch -Indexes
Allowoverride None
</Directory>
<Directory /var/www/html/git/subdir2.git/git-core>
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch -Indexes
Allowoverride None
</Directory>