japan.internet.com
LinuxTutorial2001年4月21日 00:00
文字サイズ文字サイズ小文字サイズ中文字サイズ大

セキュリティと Apache:初級必読本 6

この記事のURLhttp://japan.internet.com/linuxtutorial/20010421/4.html
著者:Ken Coar
海外internet.com発の記事
tutorial logo
ラベルと継承

それぞれの場所に対して有効な別々の認証ファイルを使えば、同じ保護領域にある URL を違う方法で保護すること ができる。しかし、保護領域は、ユーザーがどの証明情報を送信すればいいかを覚えておくための手がかりになるので 、同じ保護領域で複数の証明情報を使うように設定すると、同じ保護領域に見える (実際、同じ保護領域にある) 場所 で繰り返し再認証する必要が生じて、ユーザーを不快にさせてしまう。一般的に、保護領域と認証用ファイルとは一対 一の関係にしておくのがよいだろう。

しかし、最初にアクセス制御を有効にするにはどうすればいいのだろうか? 他の Apache 指示子にも当ては まることだが、そのためには適切な範囲で指示子を使う必要がある。

<Directory /usr/local/web/htdocs/finance> AuthName Finance AuthType Basic AuthUserFile /usr/local/web/apache/auth/.htpasswd-finance Require valid-user </Directory>

上の例では、finance サブディレクトリとすべてのファイル、そして下位のサブディレクトリが保 護される。products のような他のディレクトリには影響を与えない。

コンテナはとても役に立つが、ある 1 つのファイルだけを保護したい場合はどうすれ ばいいのだろうか? あるいは、mod_status から出力されるような、ファイルシステムにマップされな いドキュメントを保護したい場合は? その答えは前と同じだ。すなわち、保護する対象にセキュリティを設定できるよ うな、適切な範囲の指示子を使用する ( など)。

継承
他のほとんどの Apache 構成と同様に、特定のドキュメントやディレクトリへ適用されたセキュリティ指示子は、親レ ベルから、または、ツリー構造のより上位のレベルからも継承される。そのため、各レベルで異なる指示子だけを設定 すればいいことになる。次の 2 つの例は同じ設定を表す。

<Directory /usr/local/web/htdocs/finance> AuthName "Finance Department" AuthType Basic AuthUserFile /usr/local/web/apache/auth/.htpasswd-finance Require valid-user </Directory> <Directory /usr/local/web/htdocs/finance/strategy> AuthName "Finance Department" AuthType Basic AuthUserFile /usr/local/web/apache/auth/.htpasswd-finance Require user susan bob </Directory> <Directory /usr/local/web/htdocs/finance> AuthName "Finance Department" AuthType Basic AuthUserFile /usr/local/web/apache/auth/.htpasswd-finance Require valid-user </Directory> <Directory /usr/local/web/htdocs/finance/strategy> Require user susan bob </Directory>

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 の標準セキュリティ モジュール >>



japan.internet.comのウエブサイトの内容は全て、国際法、日本国内法の定める著作権法並びに商標法の規定によって保護されており、その知的財産権、著作権、商標の所有者はインターネットコム株式会社、インターネットコム株式会社の関連会社または第三者にあたる権利者となっています。
本サイトの全てのコンテンツ、テキスト、グラフィック、写真、表、グラフ、音声、動画などに関して、その一部または全部を、japan.internet.comの許諾なしに、変更、複製、再出版、アップロード、掲示、転送、配布、さらには、社内LAN、メーリングリストなどにおいて共有することはできません。
ただし、コンテンツの著作権又は所有権情報を変更あるいは削除せず、利用者自身の個人的かつ非商業的な利用目的に限ってのみ、本サイトのコンテンツをプリント、ダウンロードすることは認められています。

Copyright 2012 internet.com K.K. (Japan) All Rights Reserved.