我想准备一些通过 http/https 可用的 GIT 存储库。我在这里和那里阅读并了解了git-http-backend,我按照教程并设法让一切正常工作。我可以克隆提供在我的 htpasswd 文件中指定的凭据的存储库(我们现在假设 user1 和 user2)并将更改推回。
我的存储库位于/var/www/git中,gitweb 也是如此。
等/httpd/conf.d/git.conf:
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
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))$" \
/usr/libexec/git-core/git-http-backend/$1
ScriptAlias /git /var/www/git/gitweb.cgi
<Location /git>
AuthType Basic
AuthName "Basic Auth"
AuthBasicProvider file ldap
# LDAP
AuthzLdapAuthoritative Off
AuthLDAPURL "ldap://[...]/CN=Users,DC=ad,DC=example,DC=com?sAMAccountName"
AuthLDAPBindDN "CN=Administrator,CN=Users,DC=ad,DC=example,DC=com"
AuthLDAPBindPassword Password11
# FILE
AuthUserFile /var/www/htpasswd
AuthGroupFile /var/www/git.groups
Require valid-user
</Location>
我克隆存储库
git clone http://localhost/git/gitrepo
Username for 'http://localhost/git/gitrepo': user1
Password for 'http://user1@localhost': XXXXX
问题是我正在尝试设置基于存储库的授权,我只希望一组用户能够访问每个存储库。我发现使用 .htaccess 文件将是完美的解决方案(无需重新启动服务器),因此我在存储库的目录 /var/www/git/gitrepo 中放置了一个简单的 .htaccess :
Require User test2
从理论上讲,应该禁止使用 test1 克隆/推送更改,但它仍然有效。事实证明,.htaccess 被忽略了,因为无论我放什么,如果我经过身份验证,我都可以克隆存储库。
我认为ScriptAliasMatch可能存在问题,也许所有处理都转到 git-http-backend exec 并且它不会返回到 Apache,因为它重定向了所有流量?我是 Apache 的新手,所以这可能是一个简单的故事,但请帮助!:)
更新 1:是的,AllowOverride 在 /var/www/git 的主配置中设置为“全部”:
<Directory "/var/www/git">
AllowOverride All
</Directory>