第6章 サーバの設定

目次

概観
ネットワークモデル
要求と応答
クライアント証明のキャッシュ
svnserve, 専用サーバ
サーバの起動
組み込みの認証と認可
ユーザファイルと認証範囲の作成
アクセス制御の設定
SSH 認証と認可
SSH 設定の技法
初期設定
起動コマンドの制御
httpd, Apache HTTP サーバ
必須要件
基本的な Apache の設定
認証オプション
基本 HTTP 認証
SSL 証明書の管理
認可のオプション
全面的なアクセス制御
ディレクトリごとのアクセス制御
パス名にもとづいたチェックの禁止
おまけ
リポジトリ閲覧
その他の機能
複数リポジトリアクセス方法のサポート

Subversion リポジトリはfile:///方式でリポジトリのある 同じマシン上で実行されている複数のクライアントから同時にアクセスすること ができます。しかし典型的なSubversion の設定はオフィス全体—あるいは 全世界にあるコンピュータ上のクライアントからアクセスされる一台のサーバ上 で行います。

この章ではリモートクライアントを使ってホストマシンの外部にさらされる 形のSubversionリポジトリの作り方についての説明です。ここでは現在 Subversion で利用することのできるサーバの仕組みを説明し、その設定方法と 利用方法について説明します。この章を読んだ後であればどのタイプのネットワーク 設定が自分のニーズとって正しいものであるかを決め、どうやれば自分のホスト コンピュータ上でその設定が有効になるかについて理解できるはずです。

概観

Subversion は抽象的なネットワーク層の設計を含んでいます。これはリポジトリ に対してどのようなタイプのサーバプロセスからもアクセスできるようにプログラムを 作ることができ、クライアントのリポジトリアクセスAPI を使えば、プログラマは それに関連したネットワークプロトコルで通信することのできるプラグインを書くこと ができる、ということを意味します。理論的には Subversion は無数のネットワーク 実装が可能なはずです。ただしこれを書いている現時点では実際には二つの サーバがあるだけです。

Apache は非常に有名なウェブサーバです; mod_dav_svnモジュール を使えば Apache はリポジトリにアクセスすることができ、WebDAV/DeltaV プロトコル 経由でクライアントにもリポジトリを利用させることができます。これは HTTP の 拡張の一つです。もう一つの方法は svnserveです: これは 非常に小さい、スタンドアロンのサーバプログラムでクライアントとの間で独自の プロトコルを使って通信します。Table 6-1 に二つのサーバの比較をのせまし た。

Subversion はオープンソースプロジェクトの性質上、どのようなタイプのサーバ も最重要なものであるとか、公式のもの である として勧めたりすることはありません。またどのようなネットワーク実装についても 副次的な価値しかないものとして扱うこともありません; それぞれのサーバは それぞれの長所と短所があります。実際、複数の異なるサーバを並行して動作させ、 それぞれの方法でリポジトリにアクセスし、お互いの邪魔をすることがないように 設定できます。(「複数リポジトリアクセス方法のサポート」 を見てください)。 表6.1「ネットワークサーバの比較」 には、二つの利用可能な Subversion サーバの簡単な説明と比較があります— 管理者は、自分とそのユーザにとって最良の動作をする構成を自由に選ぶ ことができます。

表6.1 ネットワークサーバの比較

機能Apache + mod_dav_svnsvnserve
認証オプションHTTP(S) 基本認証, X.509 認証, LDAP, NTLM, その他 Apache httpd で利用可能な方法CRAM-MD5 または SSH
ユーザアカウントオプション固有の 'users' ファイル固有の 'users' ファイルまたは既存のシステム (SSH) アカウント
認可のオプション自由な読み書きアクセス、あるいはディレクトリごとの 読み書き制御自由な読み書きアクセス、あるいはフックスクリプトに よるディレクトリごとの書き込み(読み込みは不可)アクセス制御
暗号化オプションのSSLを経由することでオプションでSSH トンネルを利用することで
相互運用性部分的に他の WebDAVクライアントからも利用可能相互運用不能
ウェブによる参照制限された組み込みサポート機能、あるいは ViewVC のような サードパーティーのツール経由ViewVC のようなサードパーティーツール経由
スピードやや遅いやや速い
初期設定やや複雑かなり簡単