2

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>
4

1 に答える 1

0

/var/www/git ディレクトリは、通常の Web ドキュメント ツリーの外にあります。これは良いことですが、実際には git-http-backend のみがこのディレクトリにアクセスし、Web サーバーにはアクセスしないため、.htaccess ファイルは読み取られません。

URL を認証するためにサーバー conf 領域で認証を行う必要があるか、git-http-backend プログラムが配置されているラッパーとして使用する必要があります。

単一のサーバーに複数の GIT リポジトリを配置することは可能ですが、これを行う方法を詳しく説明しているドキュメントはほとんどありません。

于 2015-03-24T06:44:57.260 に答える