チャプター ▾ 第2版

4.6 サーバー上のGit - Smart HTTP

Smart HTTP

これまでにSSHによる認証アクセスと、git://による非認証アクセスを見てきましたが、同時に両方を行うことができるプロトコルもあります。Smart HTTPの設定は、基本的に、Gitに付属するgit-http-backendというCGIスクリプトをサーバー上で有効にするだけです。このCGIは、HTTP URLへのgit fetchまたはgit pushによって送信されたパスとヘッダーを読み取り、クライアントがHTTP経由で通信できるかどうかを判断します(バージョン1.6.6以降のすべてのクライアントでこれは当てはまります)。CGIは、クライアントがスマートであると判断した場合、スマートに通信します。そうでない場合は、ダムな動作にフォールバックします(したがって、古いクライアントからの読み取りに対して後方互換性があります)。

ごく基本的な設定を見てみましょう。ここではApacheをCGIサーバーとして設定します。Apacheがセットアップされていない場合、Linuxボックスで以下のように設定できます

$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env

これにより、mod_cgimod_alias、およびmod_envモジュールも有効になります。これらはすべて、この機能が正しく動作するために必要です。

また、/srv/gitディレクトリのUnixユーザーグループをwww-dataに設定する必要があります。これは、CGIスクリプトを実行するApacheインスタンスが(デフォルトで)そのユーザーとして実行されるため、Webサーバーがリポジトリへの読み取りおよび書き込みアクセスをできるようにするためです

$ chgrp -R www-data /srv/git

次に、Apacheの設定にいくつか追加して、Webサーバーの/gitパスに入ってくるすべてのものを処理するハンドラーとしてgit-http-backendを実行するようにします。

SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

GIT_HTTP_EXPORT_ALL環境変数を省略すると、GitはGitデーモンと同様に、git-daemon-export-okファイルがあるリポジトリのみを非認証クライアントに提供します。

最後に、Apacheにgit-http-backendへのリクエストを許可し、次のようなAuthブロックで書き込みを何らかの方法で認証するように指示します

<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /srv/git/.htpasswd
    Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
    Require valid-user
</Files>

これにより、有効なすべてのユーザーのパスワードを含む.htpasswdファイルを作成する必要があります。ファイルに「schacon」ユーザーを追加する例を次に示します。

$ htpasswd -c /srv/git/.htpasswd schacon

Apacheでユーザーを認証する方法はたくさんありますので、そのうちの1つを選択して実装する必要があります。これは私たちが考えられる最も簡単な例です。また、このすべてのデータが暗号化されるように、SSL経由で設定することをおそらく強く推奨します。

Apacheの設定の具体的な部分に深く入り込むことは避けます。なぜなら、別のサーバーを使用している場合や、認証のニーズが異なる可能性があるからです。Gitにはgit-http-backendというCGIが付属しており、これが呼び出されると、HTTP経由でデータを送受信するためのすべてのネゴシエーションを行います。それ自体は認証を実装していませんが、それを呼び出すWebサーバーのレイヤーで簡単に制御できます。これはほとんどすべてのCGI対応Webサーバーで実行できるので、最もよく知っているものを使用してください。

Apacheでの認証設定の詳細については、こちらのApacheドキュメントを参照してください: https://httpd.apache.org/docs/current/howto/auth.html

scroll-to-top