|
|
Webサーバーの構築
|
WebサーバーについてApacheの構成と設定の準備全般的な動作環境の設定コンテナディレクティブの形式コンテナディレクティブの設定ドキュメントルートの設定等ユーザーディレクトリの設定バーチャルホストの設定CGIの実行許可の設定ユーザー認証機能の設定httpdのコントロールhttpdの動作チェックポートフォワーディングの設定 |
CGIの実行を許可するときの注意楽しい コンテンツ の運用には、 クライアント と対話的に動作させるための サーバーサイドアプリケーション の利用は欠かせません。 その代表格といえばやはり CGI ということになるでしょう。 SSI ではどうしても役不足の感は否めませんし、機能とセキュリティを両立させるのであれば、 PHP などの最初から Webサーバー 上で利用する目的で設計された スクリプト 言語を利用したいところです。 とはいえ、サーバーサイドアプリケーションの黎明期から利用されてきたCGIには、多くの「プログラムとノウハウの資産」があり、これからもしばらくはサーバーサイドアプリケーションの中心的な存在であり続けるでしょう。 CGIスクリプトの大部分は、 サーバー機 に普遍的に インストール されている Perl という インタープリタ を利用します。 PerlはもともとWebサーバー上で用いるために開発された言語というわけではないのですが、柔軟な テキスト 処理能力と、 「 UNIX 系 OS には、昔から普通にインストールされていた。」 という理由から汎用されるようになり、現在に至っているわけです。 現在のWebサーバーはPerlでCGIを用いることが前提になっていますから、 サーバー に対しての セキュリティ は確保されていると思って構いません。 ただし、CGIには別の意味でのセキュリティホールが存在します。 例えばCGIの動作には、その本体である実行ファイルの他に、ライブラリやデータファイルなどが利用されるのが一般的ですが、これらに大事な情報(個人情報やパスワード情報など)が含まれている場合はアクセス拒否の設定を行う必要があります。 また、コンテンツスペースを貸し出すような場合は、貸した相手が不必要なCGIをたくさん設置して、サーバー機に過剰な動作負荷をかけてしまうようなこともあり得ます。 CGIの実行許可の設定を行う際は、こういう点に注意しながら慎重に行ってください。 AddHandler cgi-script〜CGI実行ファイルの指定"/etc/httpd/conf/httpd.conf" 中に記述する、 CGI スクリプト を実行するための最低限の設定です。 WBEL3 及び CentOS3 では 831行目 、WBEL4及びCentOS4では 807行目 、CentOS5では 778行目 あたりに記述があります。 |
||||||||||
|
|
"AddHandler" は、ファイルの末尾( WindowsOS のいうところの拡張子)の種類によって、実行するプログラムの種類を決定する ディレクティブ です。 デフォルト では、
とコメントアウトされていますので、 ".cgi" で終わるファイルをCGIスクリプトとして実行させるには、 "#" をはずして設定を有効化する必要があります。 ".cgi"以外にもCGIとして実行したいファイルがあれば、スペースで区切って追加します。 一般的には、ライブラリファイルを示す".pl"を追加して、
としておけば充分でしょう。
|
||||||||||
スクリプトエイリアスでCGIを実行するCGI の実行プログラムは、設定次第ではファイルシステムのどの場所でも動作させることができます。 しかしながら、 クライアント から直接 HTTP でアクセスできる場所、つまりドキュメントルート以下に設置してしまうと、プログラムの内容そのものが表示されてしまうことがあります。 しかしながら、HTTPでアクセスができない場所にCGIを設置してしまうと、CGIの実行そのものが難しくなってしまいます。 そこで httpd では通常、 スクリプトエイリアス という方法がとられます。 設定は "/etc/httpd/conf/httpd.conf" に記述して行います。 以下に、その設定方法を示します。 ScriptAlias〜実行用仮想ディレクトリの指定WBEL3 及び CentOS3 では 573行目 、WBEL4及びCentOS4では 544行目 、CentOS5では 564行目 あたりに記述があります。
"Alias"
ディレクティブ
ただし "ScriptAlias" で指定されたディレクトリの中のファイルはすべて実行ファイルであると仮定され、実行可能ならば実行する、という振る舞いをする点が "Alias" ディレクティブと異なります。 デフォルト は、
となっていますから、例えば、 "/var/www/cgi-bin/test.cgi" という CGI の実行ファイルは、 Webブラウザ から、 "http://www.obenri.com/cgi-bin/test.cgi" とリクエストすることで実行することができます。
この設定は、
httpd
が管理するすべての
"DocumentRoot"
ディレクティブ
"http://info.obenri.com/cgi-bin/test.cgi" でも同様に動作します。 この"ScriptAlias"ディレクティブを設定すると、"Alias"ディレクティブと同様に、"/var/www/html/cgi-bin/"というディレクトリは存在していても無視されます。 CGIを利用するときは、原則として"/var/www/cgi-bin/"以下に実行ファイルを配置して、この スクリプトエイリアス で実行するのが最も安全な方法といえるでしょう。 変更する必要がなければ、そのままの設定で利用します。 "/var/www/cgi-bin"のアクセス設定WBEL3 及び CentOS3 では 579行目 、WBEL4及びCentOS4では 550行目 、CentOS5では 570行目 あたりに記述があります。
CGI
の実行ファイルを格納する"/var/www/cgi-bin"に対して、ディレクトリ式コンテナ
デフォルト は、
ですから、 「アクセスファイルの使用と、一切の特殊動作と参照を禁止し、すべての ノード からのアクセスを許可する。」 と、必要にして充分な設定が行われていることがお解かりと思います。 従って設定は変更せず、このまま利用します。
|
|||||||||||
任意のディレクトリでCGIを実行する自分自身できちんと セキュリティ に注意して CGI を設置する場合、あるいは信頼できる コンテンツ 作成者にドキュメントルートの運用を任せるような場合には、 CGI の設置はスクリプトエイリアスにこだわらないほうが使い勝手は良くなります。 |
|||||||||||
|
|
CGI
スクリプト
を直接任意の場所で実行できるようにするには、設定対象にしたいディレクトリ式コンテナの中で、
"Options"
ディレクティブ
に
"ExecCGI"
オプションを記述します
例えば、
と設定すると、 "/var/www/html" 以下の任意の位置にCGIスクリプトを配置して、実行することができます。 もう少しセキュリティに配慮するなら、例えば、
のように記述すると、CGIスクリプトの配置場所を "/var/www/html/cgi-dir" 以下に限定することができます。 バーチャルホスト でCGIを利用する場合も記述方法は変わりません。例えば、
のように記述します。
|
||||||||||
ユーザーディレクトリでCGIを実行する
このパートの冒頭でも説明したとおり、ユーザーディレクトリ
どうしても設置を許可しなければならない場合でも、ユーザーディレクトリ全体に実行許可を与えるような設定は避けてください。ディレクトリ構造の深い場所にこっそりとCGIを設置されたら、不正に設置されたCGI スクリプト を探すのが大変です。 ではどうしたらいいかというと、例えば、 「CGIを設置したいときは、必ず管理者に許可をとること。」 |
|||||||||||
|
|
を条件に、
のようにCGI スクリプト を設置するディレクトリを限定してしまいます。 そうすると、管理者(つまりあなた)は容易にCGIスクリプトの設置状態を調べることができますから、CGIの不正利用の抑制につながるというわけです。
ところで、
WBEL
や
CentOS
で
インストール
される
Apache
では、
クライアント
から
HTTP
でユーザーディレクトリにアクセスが行われるとき、実は
"User,Group"
ディレクティブ
従って、例えば、 "/home/suzuki/public_html/cgi-bin" 以下のCGIスクリプトは、 "http://www.obenri.com/~suzuki/" 以外の URL からは実行できず、 「CGIの無断拝借」 はできないようになっています。
|
|
|
バーチャルホストの設定
<<Previous
|
Next>>
ユーザー認証機能の設定
|
| このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。 |
| ”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。 |