Authz と匿名認証の苦悩

この記事は、元の場所 http://blogs.collab.net/subversion/authz_and_anon_ から許可を得て転載されています。無効なリンクは削除または更新されました。

著者: C. Michael Pilato

投稿 2007-03-22

Subversion のパスベースの認証モジュールを初めて使用しようとしたところ、匿名読み取りアクセスを許可するリポジトリで使用しようとしたため、計画よりも少し複雑になりました。最初はうまくいきました。サンプルのコピーと貼り付けを行いましたhttpd.confディレクティブと authz ファイルの内容を Version Control with Subversion から転用し、必要に応じて微調整しました。すぐに、完璧だと思っていたセットアップが完成しました。私は間違っていました。

例えば、私のように、ほとんどのリポジトリへの匿名読み取り、残りの部分への認証済み読み取り、全体への認証済み書き込みを許可するようにリポジトリを構成したいとします。すでに、書き込み者のユーザー名とパスワードのハッシュを含む Apache htpasswd ファイルがあり、Apache が認証にその htpasswd ファイルを使用するように設定し、認証に authz ファイルを設定しています。そして、authz ファイルに明らかな追加を行います。

[groups]
writers = someuser1, someuser2, …

[repository:/]
* = r
@writers = rw

[repository:/trunk/private-area]
* = 
@writers = rw

書き込み者のユーザー名を持つグループがあります。世界への匿名読み取りを許可し、書き込み者のみに書き込みアクセスを許可するルールがあります。そして、リポジトリのプライベートエリアで、認証されていないユーザーからの読み取りアクセスを削除するオーバーライドルールがあります。素晴らしいようです。

そして、テストを開始します。

リポジトリの/trunkディレクトリをチェックアウトすると、匿名ユーザーは期待どおりに、/trunk/private-areaディレクトリを除くツリーを取得します。

しかし、認証済みの書き込み者はどうでしょうか?ああ、そこが問題です!認証済みのユーザーはいません。匿名ユーザーがツリーをチェックアウトできるため、Apache は認証資格情報を要求する必要がありません。そして、Apache が要求していないときに Subversion に認証資格情報を送信させることができません。

では、回避策は何でしょうか?

まず、匿名アクセスを完全に無効にして、書き込み者以外のユーザーに「anonymous」のようなユーザー名と公開されたパスワードを共有させるという方法があります。authz ルールでは、ユーザー「anonymous」は読み取り権限のみを持ち、リポジトリの公開部分のみになります。これは問題なく機能しますが、書き込み者以外のユーザーには不便です。秘密ではないとはいえ、まだ明白でない、または未知のパスワードを入力する必要があるからです。

次に、現状のままにして、書き込み者にリポジトリのプライベートエリアのみを個別にチェックアウトさせるという方法があります。単一のワーキングコピー内でパブリックエリアとプライベートエリアの両方を接続できるという贅沢は味わえませんが、それでも問題ないかもしれません。

3つ目に、プライベートなものを独自のリポジトリに保持するという方法があります。書き込み者にとっては、これは2番目の回避策と非常によく似ています。しかし、書き込み者は、リポジトリ間で履歴を壊すことなくプライベートなものを公開することができなくなります。

最後に、2番目の<Location>ブロックをhttpd.confファイルに設定します。これは、同じリポジトリを指していますが、わずかに異なる URL(たとえば、「-no-anon」が付加されているなど)を使用します。このブロックでは、匿名アクセスを許可しません。次に、authz ファイルにも一致する冗長なエントリを追加します。

[repository-no-anon:/]
* = 
@writers = rw

これで、匿名の書き込み者以外のユーザーは、プロンプトなしで元のリポジトリ URL からチェックアウトでき、プライベートエリアは表示されません。匿名ではない書き込み者は、プロンプト付きで代替リポジトリ URL からチェックアウトでき、プライベートエリアが表示されます。(この優れたハイブリッド回避策のアイデアを提供してくれた Max Bowsher に感謝します。)

著者について

C. Michael Pilato は、Subversion のコア開発者であり、Version Control With Subversion (O'Reilly Media) の共著者であり、ViewVC の主要メンテナです。彼は CollabNet のソフトウェアエンジニアとして、ノースカロライナ州の自宅からリモートで働いており、2001 年初頭からアクティブなオープンソース開発者です。マイクは、旅行、サッカー、家族との質の高い時間を過ごすこと、そしてこれらの組み合わせを愛する、誇り高い夫であり父親です。彼はまた、作曲と演奏を楽しみ、密かにロックスターになることを夢見ています。マイクは、シャーロットのノースカロライナ大学でコンピューターサイエンスと数学の学位を取得しています。