http/https 経由で利用できる GIT リポジトリをいくつか用意したいと考えています。私はあちこちを読んでgit-http-backendについて学び、チュートリアルに従い、すべてを機能させることができました。htpasswd ファイルで指定された資格情報を提供するリポジトリのクローンを作成し (ここでは user1 と user2 と仮定します)、変更を元に戻すことができます。
私のリポジトリは/var/www/gitにあり、gitweb もそうです。
etc/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 : はい、/var/www/git のメイン構成で AllowOverride が「すべて」に設定されています。
<Directory "/var/www/git">
AllowOverride All
</Directory>