次: , 上: Password authenticated


2.9.3.1 パスワード認証のためのサーバの設定

まず最初に、$CVSROOT$CVSROOT/CVSROOT ディレクトリの 使用許可をきつくすることを考えるでしょう。詳細は Password authentication security を参照してください。

サーバ側では /etc/inetd.conf を編集する必要があります。 正しいポートに接続を受けた時、 inetd がコマンド cvs pserver を実行する様に変更します。 ポート番号の既定値は 2401 ですが、 クライアントをコンパイルした時に、 CVS_AUTH_PORT に他の値を定義した場合には異なります。

あなたの使用する inetd が、 ポート番号を素のまま /etc/inetd.conf に書いて良いならば、 次の記述で十分でしょう (inetd.conf には一行で記述して下さい):

     2401  stream  tcp  nowait  root  /usr/local/bin/cvs
     cvs -f --allow-root=/usr/cvsroot pserver

`-T' オプションで一時ファイルを作成するディレクトリも指定できます。

`--allow-root' オプションは使用可能な cvsroot ディレクトリを 指定します。違う cvsroot ディレクトリの使用を試みるクライアントは 接続できません。許可したい cvsroot ディレクトリが2つ以上あるなら、 オプションを繰り返してください。(不幸なことに、inetd の多くのバー ジョンはコマンドと引数の両方、もしくはどちらかの長さ全体に対して非常に 小さくなるように制限を課しています。この問題に対する普通の解決は、 inetdcvs を必要な引数と共に起動するシェルスクリプトを 実行させることです。)

あなたの使用する inetd が、 素のポート番号ではなく、サービス名を要求するならば、 /etc/services に次の行を追加して下さい:

     cvspserver      2401/tcp

そして inetd.conf には、 2401 ではなく cvspserver と記述して下さい。

以上を注意して行なった後、 inetd を再起動するか、 初期設定ファイルを再読させるのに必要な処置を取って下さい。

これの設定に問題があるときは、Connection を参照してください。

クライアントはパスワードを平文のまま保存または伝送します (ほぼそのように—詳細は Password authentication security)。 従って、リポジトリを利用する時に、 正規のパスワードを危険に曝さないために、 cvs では普通は別のパスワードファイルを使用します。 このファイルは $CVSROOT/CVSROOT/passwd です。 欄が少ないことを除けば、Unix システムでの /etc/passwd と同様に コロンで分割した書式を使います: cvs 使用者名、省略可能なパスワード、認証が成功したかのように 実行するためにサーバが使用する任意に省略可能な使用者名です。 次に5つの登録がある passwd ファイルを例示します:

     anonymous:
     bach:ULtgRLXo7NRxs
     spwang:1sOp854gDF3DY
     melissa:tGX1fS8sun6rY:pubcvs
     qproj:XR4EZcEs0szik:pubcvs

パスワードは、標準 Unix の関数 crypt() によって暗号化されます。 従って、標準 Unix の /etc/passwd から直接コピーすることも可能です。

例の最初の行は使用者 anonymous として認証しようとする全ての cvs クライアントに空パスワードなど、パスワードに関わらず、使用を 許可します。(これは匿名読み込み専用アクセスを許可するサイトでよく することです。"読み込み専用" の方法は Read-only access を参照し てください。)

2行目と3行目は bachspwang がそれぞれ平文のパスワード を提供した場合にアクセスを許可します。

4行目は mellisa が正しいパスワードを使用したときにアクセスを許 可しますが、彼女の cvs での操作はサーバではシステムユーザ pubcvs として行われます。ですから、melissa という名前の システム使用者は必要ではありませんが、pubcvs という名前の使用者 は存在している必要があります

5行目はシスステムユーザは共有できることを示しています。qproj と して認証を成功した全てのクライアントは melissa と同様に、実際は pubcvs でして実行します。そのようにすることで、リポジトリ中にそ れぞれのプロジェクトごとに単独の共有ユーザを作成することができ、それぞ れの開発者に $CVSROOT/CVSROOT/passwd ファイルで専用の行を与える ことができます。それぞれの行の cvs 使用者名は違うかもしれませんが、 システムの使用者名は同じです。別の cvs 使用者名を使う理由は、CVS は操作をそれらの名前で記録するからです: melissa が変更をプロジェ クトに書き込むと、その格納はプロジェクトの履歴に pubcvs ではな く、melissa の名前で記録されます。システムのユーザ名を共有する 理由は、リポジトリの該当する部分の使用許可を、そのアカウントのみが書き 込み許可を持つように設定することができるからです。

CVS はシステム認証を行なうこともできます。 パスワード認証では、まずサーバが、$CVSROOT/CVSROOT/passwd ファイル中の、使用者のエントリを確認します。 使用者のエントリがあれば、そのエントリを上で説明された様に 認証に使用します。 ユーザを発見できないか、cvspasswd ファイルが 存在しない場合には、オペレーティングシステムの使用者の調査機構を 使って使用者名とパスワードとの認証を試すことができます。 (この失敗時の動作は config ファイルで SystemAuth=no を 設定することで、使用不能にすることができます)。 しかしながら、システムの認証に立ち戻ることは安全性の面で 危険を冒すことになるかもしれないことには注意してください: cvs の操作はそのユーザの普通のログインパスワードで認証され、 パスワードはネットワークを平文で流れます。詳しくは Password authentication security を参照してください。

現在、 cvspasswd ファイルにパスワードを加えるには、 他のどこかからコピーするしか方法がありません。 いつの日か cvs passwd コマンドができることでしょう。

$CVSROOT/CVSROOT の多くのファイルと違って、passwd ファイ ルは cvs 経由ではなく、直接編集するのが普通です。 これはpasswd ファイルが作業コピーに含まれているセキュリティの 危険性のためです。passwd ファイルを $CVSROOT/CVSROOT を チェックアウトに含めたい場合は checkoutlist を参照してください。