|
|
Webサーバーの構築
|
WebサーバーについてApacheの構成と設定の準備全般的な動作環境の設定コンテナディレクティブの形式コンテナディレクティブの設定ドキュメントルートの設定等ユーザーディレクトリの設定バーチャルホストの設定CGIの実行許可の設定ユーザー認証機能の設定httpdのコントロールhttpdの動作チェックポートフォワーディングの設定 |
Apacheによるユーザー認証とはApache は独自にユーザーアクセス制御機能を持っていて、特定のディレクトリに対してIDとパスワードの入力を要求する ダイアログ を表示させることができ、 ユーザー認証 によるアクセス制限をかけることができます。 こういう機能は例えばホームページの会員限定ページなどでよく使われますが、それ以外にも、例えば管理者専用ページなどでもよく用いられます。 レンタルの Webサーバー などでは、普通こういう機能の利用は ISP から提供されることはまずありませんので、 CGI などを使って同じ機能を付加させるより他はありません。 しかしCGIの利用に制限がある場合には、それすら困難かもしれません。 ところが自分自身でApacheを運用すれば、いとも簡単にこういったユーザー認証によるアクセス制限を設定することができます。
ユーザー認証の設定は一般に、
"/etc/httpd/conf/httpd.conf"
中で、コンテナ式
ディレクティブ
ただし他の多くの設定と違って、設定例やテンプレートは予め"/etc/httpd/conf/httpd.conf"の中に準備されている訳ではないので、既存の設定の修正や有効化ではなく、最初から認証用のディレクティブを記述する必要があります。
また、この
コンテンツ
ではあまり勧めませんが、
"AllowOverride"
ディレクティブ
その方法についてはこのパートの後半で触れます。
|
|||||||||
"httpd.conf"でのユーザー認証設定ユーザー認証設定を記述するときは、ディレクトリの上下関係をわかりやすくするために、設定を行うディレクトリのすぐ上位のディレクトリコンテナの下に記述するとよいでしょう。 |
||||||||||
|
|
例えば、 "/var/www/html/[認証を行うディレクトリ名]" に認証設定を行う場合には、
というパターンで記述しましょう。 バーチャルホスト を設定している場合も同様に、
と記述するようにすると間違いがありません。
|
|||||||||
<Directory ...>〜ディレクトリコンテナの設定
もちろん、このディレクティブは必ずしもユーザー認証設定専用にする必要はないので、
"Options"
ディレクティブ
ただ、一つのコンテナに違う種類のディレクティブを混ぜて記述してしまうと、後で設定の構造的な部分がわかりにくくなってしまいます。 従って、ユーザー認証に関するコンテナにはできるだけ他のディレクティブの記述はしないほうが良いでしょう。
|
||||||||||
ベーシック認証を用いる場合の設定HTTP で利用される一般的な認証方法です。 この仕組みは、既に ダイナミックDNS の運用で扱っていることをご記憶でしょうか。
構築中のLinuxサーバー
からダイナミックDNSの運用サイトの
DNSサーバー
に対して
WAN
側の
グローバルIPアドレス
情報を送信する際に利用している
アプリケーション
"
DiCE
"が、実はこのベーシック認証の仕組みを利用しています
ベーシック認証は、世の中のほとんどの Webブラウザ で利用可能ですから、汎用性の高い方法です。 |
||||||||||
|
|
ただし、認証の際の通信内容が暗号化されませんから、理論的にはユーザー名とパスワードを傍受される可能性はあります。 とはいえ、通信を傍受するという行為そのものが容易ではないうえ、傍受した内容を解析するとなると更に高度な技術を必要とすることを考えれば、余程のことがない限りは通信経路から情報が漏れるということはないでしょう。 もちろん、個人情報を扱わなければならない場合には、「あらぬ疑い」をかけられないためにも、このベーシック認証は利用すべきではありません。こういった場合はこのパートの後半に説明する ダイジェスト認証 を利用するのが望ましいでしょう。 では、以下にベーシック認証を用いる場合の設定例を示します。
ここでは、「メンバー限定」のディレクトリとして "/var/www/html/members_only/" を用います。もちろん現段階ではそういうディレクトリは存在していないはずですから、設定を行う前に準備しておく必要があります。 このディレクトリ自身には特別な パーミッション は必要ありませんから、 "members_only" というディレクトリ名(またはフォルダ名)で、普通に FTPクライアント から アップロード すればOKです。 AuthType〜認証タイプの設定ベーシック認証を用いる場合は、
と記述します。他にオプションはありません。 AuthName〜ダイアログに表示するメッセージ認証を行うときに クライアント の Webブラウザ で ダイアログ に表示するメッセージを記述します。 例えば、
と設定した場合は、
ユーザー認証ダイアログの例(ベーシック認証/WindowsXP) と表示されます。 AuthUserFile〜パスワードファイルの指定Apache のユーザー認証は、 クライアント から送信されるユーザー名とパスワードを、 構築中のLinuxサーバー のファイルシステム上に保管しているパスワードファイルの内容と照合して行われます。 この ディレクティブ は、その照合先のファイルを指定するもので、
と記述すると、 "/var/www/passwd/auth_file" が、そのパスワードファイルとして指定されます。 パスワードのファイルの作成方法についてパスワードファイルは予め準備されているわけではありませんので、自分で作成する必要があります。 パスワードファイルは任意の ユーザーアカウント から参照可能な場所であれば、何処に配置しても構いません。
ただし、
HTTP
で参照される位置に置くと、クライアントから内容を覗かれる可能性がありますので、
スクリプトエイリアス
今回は、 "/var/www/" 以下に "password" というパスワード格納ディレクトリを作成します。 |
|||||||||
作成したディレクトリ
"password"
は、後で扱いやすいように
"html"
や
"cgi-bin"
と同じく、所有者を
"tanaka"
に変更しておきます
。
|
ディレクトリ"password"を作成したら、次に htpasswd コマンド を使ってパスワードファイル "/var/www/password/auth_file を作成し、同時にユーザー登録を行います。 以降の作業は root アカウント から実行することもできますが、既にアカウント tanaka でも実行できるようにディレクトリ"password"の所有者を変更していますから、安全のために tanaka で作業しましょう。 |
|||||||||
| パスワードファイルを新規に作成するときは、同時に一つのユーザーを登録する必要があります。ここでは "tanaka" を新規に登録します。 |
"htpasswd"コマンドの一般書式は、 htpasswd [オプション] [パスワードファイル] [ユーザー名] Enter です。 新規にパスワードファイルの作成するには、 htpasswd コマンドを "-c" オプション付きで実行します。 |
|||||||||
| "-c" オプションを付けてしまうと、パスワードファイルが新規に作り直されてしまいますので注意してください。 |
作成したパスワードファイルに新しいユーザーを追加するには、 "-c" オプションを付けずに htpasswd を実行します。
|
|||||||||
nanoエディタ
で直接パスワードファイルを開き
、ユーザーを行ごと削除しても構いません。そのほうが簡単です。
|
既に存在するユーザーを削除するときは、 "-D" オプション付きで htpasswd を実行します。
このようにしてパスワードファイルに登録されたユーザーが、 HTTP の認証対象となります。 |
|||||||||
|
|
ここで扱うユーザー名は、ディレクトリにログインするための「合言葉」に過ぎませんから、大勢のクライアントからのログインを一つのユーザー名で賄っても構いません。 また、ここで扱うユーザー名は、 WBEL や CentOS のユーザーアカウントとは全く無関係ですから、ユーザーの登録や削除を行うのに、必要以上に神経質になる必要はありません。 Require〜認証するユーザーの指定通常は、
と記述します。すると、パスワードファイル "/var/www/password/auth_file" に記述されている全てのユーザーが認証の対象となります。 また例えば、
と記述すると、パスワードファイルの中に登録されているユーザーの中で、"tanaka"と"suzuki"だけを認証の対象とすることができます。
|
|||||||||
ダイジェスト認証を用いる場合の設定ユーザー名とパスワードの送信を暗号化し、通信傍受による情報の漏洩を防止して行われる認証方法です。 ベーシック認証に比べると セキュリティ は高くなりますが、古い Webブラウザ の一部が利用できないという問題があります。 とはいえ、 クライアント 側の利用条件としては、 InternetExplorer...バージョン5以降 Netscape...バージョン7以降 Mozilla...バージョン0.9.7以降 となっていますから、現在のインターネット利用者の95%以上は対応済みだと思って間違いはありません。 この点さえ問題にならなければ、利用者に安心を与える意味でも、ベーシック認証よりもダイジェスト認証を利用すべきでしょう。 では、以下にダイジェスト認証を用いる場合の設定例を示します。 CentOS3 、CentOS4、 WBEL3 、WBEL4の場合は、
CentOS5の場合は、
となります。 |
||||||||||
|
つまり、ベーシック認証と同じディレクティブになったということですね。
最初からそうしておけば面倒がなかったはずなのに、と思いますけどねぇ。 |
CentOS5では、 デフォルト で インストール される Apache のバージョンの違いにより、認証ファイルを指定する ディレクティブ がCentOS4以前、WBEL4以前の "AuthDigestFile" ではなく、 "AuthUserFile" と変更されていますので注意してください。 さて、ここでは、「メンバー限定」のディレクトリとして "/var/www/html/members/" を用いますから、このディレクトリは予め準備しておく必要があります。 このディレクトリ自身には特別な パーミッション は必要ありませんから、 "members" というディレクトリ名(またはフォルダ名)で、普通に FTPクライアント から アップロード すればOKです。 AuthType〜認証タイプの設定ダイジェスト認証を用いる場合は、
と記述します。他にオプションはありません。 AuthName〜認証領域の指定とブラウザへの表示認証を行うときに クライアント の Webブラウザ で ダイアログ に表示するメッセージを記述します。 例えば、
と設定した場合は、 |
|||||||||
| ベーシック認証のときとはダイアログの形式が異なる点にも注意してください。 |
ユーザー認証ダイアログの例(ダイジェスト認証/WindowsXP) と表示されます。 実はこのディレクティブは、ベーシック認証の場合は単なるのメッセージの記述に過ぎませんが、ダイジェスト認証の場合は認証を行うグループの 「領域名」 を兼ねますので、「表示名だから適当に設定しておけばいい」というわけにはいきません。 この点については、以降の説明を参照してください。 Auth*****File〜パスワードのファイルの指定Apache のユーザー認証は、 クライアント から送信されるユーザー名とパスワードを、 構築中のLinuxサーバー のファイルシステム上に保管しているパスワードファイルの内容と照合して行われます。 この ディレクティブ は、その照合先のファイルを指定するもので、 CentOS3 、CentOS4、 WBEL3 、WBEL4の場合は、 |
|||||||||
| OS の ディストリビューション の違いで ディレクティブ が異なりますので注意してください。 |
CentOS5の場合は、
と記述すると、 "/var/www/password/auth_dig" が、そのパスワードファイルとして指定されます。 パスワードのファイルの作成方法についてパスワードファイルは予め準備されているわけではありませんので、自分で作成する必要があります。 パスワードファイルは任意の ユーザーアカウント から参照可能な場所であれば、何処に配置しても構いません。
ただし、
HTTP
で参照される位置に置くと、クライアントから内容を覗かれる可能性がありますので、
スクリプトエイリアス
今回は、ベーシック認証のところでも説明した "/var/www/" 以下の "password" というパスワード格納用ディレクトリを利用します。 もし"password"ディレクトリを作成していない場合は、ベーシック認証の説明の 「パスワードのファイルの作成方法について」 を参考に作成を行ってください。 ディレクトリ"password"を作成したら、次に htdigest コマンド を使ってパスワードファイル "/var/www/password/auth_dig を作成し、同時にユーザー登録を行います。 以降の作業は root アカウント から実行することもできますが、既にアカウント tanaka でも実行できるようにディレクトリ"password"の所有者を変更していますから、安全のために tanaka で作業しましょう。 |
|||||||||
| パスワードファイルを新規に作成するときは、同時にユーザー登録を行う必要があります。ここでは "tanaka" を新規に登録します。 |
"htdigest"コマンドの一般書式は、 htdigest [オプション] [パスワードファイル] [領域名] [ユーザー名] Enter です。 新規にパスワードファイルの作成するには、 htdigest コマンドを "-c" オプション付きで実行します。 [領域名]は、 "AuthName" ディレクティブ で指定した文字列と同じものをタイプします。 |
|||||||||
| "-c" オプションを付けてしまうと、パスワードファイルが新規に作り直されてしまいますので注意してください。 |
作成したパスワードファイルに新しいユーザーを追加するには、 "-c" オプションを付けずに htdigest コマンドを実行します。
|
|||||||||
| "htdigest" コマンドには、ユーザーを削除するオプションがありません。どうしてでしょうか?。 |
既に存在するユーザーを削除するときは、
nanoエディタ
で直接パスワードファイルを開き
さて、[領域名]の部分についてですが、実は任意の領域名が指定できます。例えば、 |
|||||||||
| [領域名] の中にスペースが含まれるときは、 "" でくくります。 |
のように、一つのパスワードファイルの中に異なる[領域名]でユーザーを登録することができます。 この例では、 "AuthName" ディレクティブの設定が "members" の場合には、ユーザー名"yamada"は認証の対象になりませんが、"AuthName"ディレクティブの設定の設定を "Members Only" に変更すると、逆に"yamada"だけが認証の対象になります。 |
|||||||||
| これがかえって面倒くさいと思う人は、別々にパスワードファイルを作りましょう。 |
ダイジェスト認証のパスワードファイルは、このように[領域名]という形で複数のグループに分けて管理しますから、異なるディレクトリに対して異なるユーザーに認証許可を与える場合でも、一つのパスワードファイルにまとめて記述することができます。 このようにしてパスワードファイルに登録されたユーザーが、 HTTP の認証対象となります。 |
|||||||||
|
|
ここで扱うユーザー名は、ディレクトリにログインするための「合言葉」に過ぎませんから、大勢のクライアントからのログインを一つのユーザー名で賄っても構いません。 また、 WBEL や CentOS のユーザーアカウントとは全く無関係ですから、ユーザーの登録や削除を行うのに、必要以上に神経質になる必要はありません。 Require〜認証するユーザーの指定通常は、
と記述します。すると、パスワードファイル "/var/www/password/auth_dig" に記述されている全てのユーザーが認証の対象となります。 また例えば、
と記述すると、パスワードファイルの中に登録されているユーザーの中で、"tanaka"と"suzuki"だけを認証の対象とすることができます。 もちろん、 "AuthName" ディレクティブ の設定のほうが優先されますので、これと[領域名]が一致していないユーザーはいずれにせよ対象外になります。
|
|||||||||
アクセスファイルを用いる場合の認証設定
ディレクトリ式コンテナに
"AllowOverride"
ディレクティブ
で、
"AuthConfig
または
"All"
オプションを指定した場合
アクセスファイルの名称は、
"AccessFileName"
ディレクティブ
と設定を行い、"/home/*/public_html"以下のディレクトリでのアクセスファイルの利用を許可したとします。 そこで、 "http://www.obenri.com/~suzuki/members_only/" にベーシック認証によるユーザー認証を設定する場合は、 |
||||||||||
| ".htaccess" は目的のディレクトリ配置されますから、コンテナの記述は当然不要になります。 |
|
|||||||||
|
".htaccess"
は
クライアント
側のパソコンで作成して、
FTPクライアント
から
アップロード
してもOKです。
ただし、 WindowsOS では "." で始まるファイル名が使えませんので、別の適当な名前で作成しておいてアップロードし、 FTPサーバー 上で名前を変更する必要があります。 |
という内容の ".htaccess" という テキスト ファイルを作成し、 "/home/suzuki/public_html/members_only/.htaccess" として配置します。
なお、LinuxOSのファイルシステムでは、
".(ドット)"
で始まるファイルやディレクトリは
隠しファイル
として扱われますから
パスワードファイルは SSHクライアント で 構築中のLinuxサーバー に、 ユーザーアカウント "suzuki" で ログイン し、 という手順で、 "AuthUserFile" ディレクティブの指定に合わせて作成することになります。 設定に用いる各ディレクティブの意味は、 "/etc/httpd/conf/httpd.conf" に記述する場合と同じですから、ここでの詳細な説明は割愛します。
|
|||||||||
ユーザー認証機能を利用するときの注意Apache のユーザー認証機能は、パスワードによる「関所」を設けるだけに過ぎません。 |
||||||||||
|
|
ダイジェスト認証を用いてユーザー名とパスワードを暗号化する場合でも、認証後のパケットが暗号化されている訳ではありませんので思い違いをしないようにしてください。間違っても、重要な個人情報の登録などに用いてはいけません。 Apacheをそういう用途に用いる場合は、必ず セキュアWebサーバー を利用する必要があります。 また、パスワードファイルで管理できるユーザー数には、仕組み上は制限はありませんが、もともと テキストファイル に記述された大量のユーザー情報を管理するのはコンピュータにとっては苦手な作業です。 従って、この方法であまりにも多量のユーザー情報を扱わせると、認証に時間を要するだけでなく、コンピュータ全体の処理を遅くしてしまうことになります。 ホスト機 の性能にもよりけりですが、ここで説明したユーザー認証の方法は、ユーザー数が100〜300程度までが限度と言われています。 それ以上のユーザー数を扱う場合には、 データベース アプリケーション と組み合わるなど、別の方法で運用しなければならないことを理解しておいてください。
|
|
|
CGIの実行許可の設定
<<Previous
|
Next>>
httpdのコントロール
|
| このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。 |
| ”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。 |