まず最初に、$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
の多くのバー
ジョンはコマンドと引数の両方、もしくはどちらかの長さ全体に対して非常に
小さくなるように制限を課しています。この問題に対する普通の解決は、
inetd
に cvs を必要な引数と共に起動するシェルスクリプトを
実行させることです。)
あなたの使用する 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行目は bach
と spwang
がそれぞれ平文のパスワード
を提供した場合にアクセスを許可します。
4行目は mellisa
が正しいパスワードを使用したときにアクセスを許
可しますが、彼女の cvs での操作はサーバではシステムユーザ
pubcvs
として行われます。ですから、melissa
という名前の
システム使用者は必要ではありませんが、pubcvs
という名前の使用者
は存在している必要があります。
5行目はシスステムユーザは共有できることを示しています。qproj
と
して認証を成功した全てのクライアントは melissa
と同様に、実際は
pubcvs
でして実行します。そのようにすることで、リポジトリ中にそ
れぞれのプロジェクトごとに単独の共有ユーザを作成することができ、それぞ
れの開発者に $CVSROOT/CVSROOT/passwd ファイルで専用の行を与える
ことができます。それぞれの行の cvs 使用者名は違うかもしれませんが、
システムの使用者名は同じです。別の cvs 使用者名を使う理由は、CVS
は操作をそれらの名前で記録するからです: melissa
が変更をプロジェ
クトに書き込むと、その格納はプロジェクトの履歴に pubcvs
ではな
く、melissa
の名前で記録されます。システムのユーザ名を共有する
理由は、リポジトリの該当する部分の使用許可を、そのアカウントのみが書き
込み許可を持つように設定することができるからです。
CVS はシステム認証を行なうこともできます。
パスワード認証では、まずサーバが、$CVSROOT/CVSROOT/passwd
ファイル中の、使用者のエントリを確認します。
使用者のエントリがあれば、そのエントリを上で説明された様に
認証に使用します。
ユーザを発見できないか、cvs の passwd ファイルが
存在しない場合には、オペレーティングシステムの使用者の調査機構を
使って使用者名とパスワードとの認証を試すことができます。
(この失敗時の動作は config ファイルで SystemAuth=no
を
設定することで、使用不能にすることができます)。
しかしながら、システムの認証に立ち戻ることは安全性の面で
危険を冒すことになるかもしれないことには注意してください:
cvs の操作はそのユーザの普通のログインパスワードで認証され、
パスワードはネットワークを平文で流れます。詳しくは Password authentication security を参照してください。
現在、
cvs の passwd ファイルにパスワードを加えるには、
他のどこかからコピーするしか方法がありません。
いつの日か cvs passwd
コマンドができることでしょう。
$CVSROOT/CVSROOT の多くのファイルと違って、passwd ファイ ルは cvs 経由ではなく、直接編集するのが普通です。 これはpasswd ファイルが作業コピーに含まれているセキュリティの 危険性のためです。passwd ファイルを $CVSROOT/CVSROOT を チェックアウトに含めたい場合は checkoutlist を参照してください。