ラベルと継承
それぞれの場所に対して有効な別々の認証ファイルを使えば、同じ保護領域にある URL を違う方法で保護すること
ができる。しかし、保護領域は、ユーザーがどの証明情報を送信すればいいかを覚えておくための手がかりになるので
、同じ保護領域で複数の証明情報を使うように設定すると、同じ保護領域に見える (実際、同じ保護領域にある) 場所
で繰り返し再認証する必要が生じて、ユーザーを不快にさせてしまう。一般的に、保護領域と認証用ファイルとは一対
一の関係にしておくのがよいだろう。
しかし、最初にアクセス制御を有効にするにはどうすればいいのだろうか? 他の Apache 指示子にも当ては
まることだが、そのためには適切な範囲で指示子を使う必要がある。
AuthName Finance
AuthType Basic
AuthUserFile /usr/local/web/apache/auth/.htpasswd-finance
Require valid-user
上の例では、finance サブディレクトリとすべてのファイル、そして下位のサブディレクトリが保
護される。products のような他のディレクトリには影響を与えない。
コンテナはとても役に立つが、ある 1 つのファイルだけを保護したい場合はどうすれ
ばいいのだろうか? あるいは、mod_status から出力されるような、ファイルシステムにマップされな
いドキュメントを保護したい場合は? その答えは前と同じだ。すなわち、保護する対象にセキュリティを設定できるよ
うな、適切な範囲の指示子を使用する ( や など)。
継承
他のほとんどの Apache 構成と同様に、特定のドキュメントやディレクトリへ適用されたセキュリティ指示子は、親レ
ベルから、または、ツリー構造のより上位のレベルからも継承される。そのため、各レベルで異なる指示子だけを設定
すればいいことになる。次の 2 つの例は同じ設定を表す。
AuthName "Finance Department"
AuthType Basic
AuthUserFile /usr/local/web/apache/auth/.htpasswd-finance
Require valid-user
AuthName "Finance Department"
AuthType Basic
AuthUserFile /usr/local/web/apache/auth/.htpasswd-finance
Require user susan bob
AuthName "Finance Department"
AuthType Basic
AuthUserFile /usr/local/web/apache/auth/.htpasswd-finance
Require valid-user
Require user susan bob
2 つめの例では、親ディレクトリからの値の継承をうまく利用しており、サブディレクトリではアクセス リストを
Bob と Susan に制限する指定だけで済んでいる。
一般的に、セキュリティの問題を扱う際に仮定をたてすぎるのはよい方法ではない。継承を利用して、あちこちで同
じ指示子を何度も記述する必要がなくなり楽になったと思っても、それは思いこみかもしれないのだ。高位のディレク
トリに対する設定を 1 つ間違うだけで、継承されたすべての値が不適切なものになってしまい、面倒な結果になること
もあるということを覚えておこう。
また、いくつかのアクセス制御モジュールのうち、アクセスが許可されるかどうかの最終決定権を持つのはどれかを
判別することも重要だ。
特定のユーザー名の要求
AuthUserFile や同種の指示子が、Apache (およびセキュリティ モジュール) に認証データベースの
ある場所を知らせる役割を果たすのに対し、Require 指示子は、それらの使用法についての指示を与え
る。あるセキュリティ範囲が Require 指示子を含まない (または継承しない) 場合、他の指示子があ
るかどうかにかかわらず、任意アクセス制御は行われない。
Require 指示子による設定が複数ある場合は、それらはすべて条件リストに追加される。最初に一
致した条件で処理が止まるか、すべての条件を調べることになるかどうかは、モジュールのプログラマー次第だ。たと
えば mod_auth では、処理が始まってから最初に一致したところでアクセスの条件が満たされる。以下
のような例を考えてみよう。
AuthUserFile /home/foo/.htpasswd-foo
Require user foo
Require user bar
この例では、「ユーザー名が foo または bar であることが必要」だ。
アクセス リストが大きくなった時に設定が複雑になるのを避けるため、「
Require valid-user」のような省略表記がある。これは「認証データベース中にユーザー名があ
れば、この保護領域にアクセスできる」という意味だ。これがうまく動作するには、アクセスを許可するユーザーの証
明情報のみがデータベースに含まれている必要がある。アクセスさせたくないユーザーの証明情報がデ
ータベース内にある場合は (複数の保護領域を通じて 1 つのデータベースを共有している場合に起こるかもしれない)
、グループ化や他のメカニズムを使う必要があるだろう。valid-user キーワードでは十分ではないか
らだ。
Require 指示子はどのモジュールでも共通に使えるが、その構文はそうではない。使用される構文
に制限がないのだ。例えば、「Require candy-type caramel」という構文であっても、こ
れを解釈できるセキュリティ モジュールがあれば問題ない。
ほとんどの任意制御モジュールでは、ユーザーのグループ化をサポートしており、個人の代わりにグループへアクセ
ス許可を与えることができる。この機能は (mod_auth では) AuthGroupFile 指示子を
使って設定する。ユーザー ファイルと同様に、グループ ファイルには、各行にグループ名、コロン、そしてコンマで
区切られたユーザー名からなるテキスト情報だけが含まれている。アクセス要求の証明情報からユーザー名を受け取る
と、モジュールはグループ ファイルを検索して、そのユーザーがどのグループに属しているかが調べられる。次はグル
ープ ファイルの一例だ。
board:annette,bill,james,gwynyth
finance:susan,steve,phoebe,zoe,bill_s
engineering:geekboy,lisa,melanie,george,j_johnson
グループによるアクセスを許可するには、Require 指示子を次のように変更するだけでいい。
Require group board
通常の UNIX ユーザーと同じように、1 つのユーザー名は複数のグループに属することが可能だ。
次は
Apache の標準セキュリティ モジュール
>>