ノード:Repository Permissions,
前:The Working Copy Administrative Area,
上:The Usual Suspects
Repository Permissions
CVS はリポジトリのパーミッションについてなにか特定の規則を要求したり
はしません。幅広く、さまざまなパーミッションの配置を扱うことが出来ま
す。しかし、わけの分からない動作を避けたければ、少なくとも以下に述べ
る基準を満たすようリポジトリをセットアップするべきです:
- あるユーザが、リポジトリ内の特定のサブディレクトリにアクセスできるよ
うにしたい場合は、どんな種類のアクセスであろうと(読み出し専用アクセ
スでも)、そのユーザはそのサブディレクトリにシステムレベルの書込み権
限を持つことが必要です。データの一貫性を保つため、CVS がリポジトリ内
に一時ロックファイルを生成するので必要なのです。オペレーションが読み
出し専用(チェックアウトやアップデートのような)であろうとも、そのオペ
レーションが終わるまでデータがあるひとつの状態に留まっている必要があ
る、と知らせるためにロックは生成されます。
Repository Administration に書いた通り、この書込み権限要求は
CVSROOT/config に LockDir パラメータを設定することによって回避するこ
とができます:
LockDir=/usr/local/cvslocks
当然ですが、/usr/local/cvslocks ディレクトリは全ての CVS ユーザが書
き込めるようになっているのを確認しておく必要があります。どちらにしろ、
CVS オペレーションの大部分(読み出し専用も含む)は、どこかのディレクト
リに書き込めるようになっている必要があります。デフォルトではそのディ
レクトリはプロジェクトのリポジトリになっています; セキュリティを非常
に気にするなら、他の場所にすることもできます。
- CVSROOT/history ファイルがワールドライタブルであることを確認して下さ
い(そのファイルが存在していればの話です)。history ファイルが存在して
いる場合、 CVS オペレーションの殆どはそこに記録を残そうとします; そ
れが失敗するとそのオペレーションはエラーで終了します。
残念なことに(そして理解不能なことに)、cvs init で新しいリポジトリを
作成した時点では、history ファイルはワールドライタブルになっていません。
少なくとも CVS の現在のバージョンでは新しくリポジトリを作成した後に
これのパーミッションを変更してやらなければなりません(または、履歴の
記録をしないということであれば、ただ削除すればよいです)。
(この問題はなくなりました。新しいリポジトリを初期化した際に history
ファイルをワールドライタブルにするパッチを、筆者が CVS メインテナに
送りました。ですから CVS のバージョンが執筆時点(1999年9月)より最新の
ものであれば、問題は起こりません。)
- 大抵はセキュリティ上、殆どの CVS ユーザにはリポジトリ中の CVSROOT ディ
レクトリの Unix レベルでの書込み権限を与えたくないと思うでしょう。
CVSROOT に対してチェックインアクセスができる人は、commitinfo,
loginfo など、好きなプログラムを起動できるようなトリガファイルを編集
できることになります。やりたければ、システムになかったプログラムをコ
ミットすることさえ出来てしまいます。従って CVSROOT へコミットアクセ
スできる人はシステム上で任意のコマンドを実行することができると思って
下さい。