WWWは、インターネットにおいて一番成功した情報サービスである。通常の利用は無料であるが、一部は商業化に成功し、有料のところもある。有料サービスを実現するには、お金を払った人とお金を払わない人を区別する必要がある。そのため、一般にはパスワードの認証が行われる。この特定の情報へのアクセスの管理をアクセスコントロールという。有料の情報サービスをWWW上で行うには、アクセスコントロールが可能なサーバを用いる必要がある。世界で一番良く、使われているWWWサーバはApacheである。もちろんApacheはアクセスコントロールが可能である。但し、Apache自身の設定はテキストファイルにより行う。テキストファイルは、検索が自由に行え、プログラムによる生成が容易であり、電子メールやWWWなどのサービスに乗りやすいといった長所がある。反面、ある規則(文法)に従って記述しなければならないので、利用者はその文法をマスターしなければならない。この文法を覚えることは一般のユーザにとって苦痛であろう。したがって、平易なユーザインタフェイスによりアクセスコントロールができることが求められていると考えられる。
本研究では、Apacheのアクセスコントロールを平易な操作でするシステムを提案する。平易な操作を実現するために、本研究ではWebのサービスを利用することとした。具体的にはApacheのアクセスコントロールファイルである.htaccessをCGIを介してサーバアプリケーションにより、編集を行うシステムを作成した。クライアントにはCGIの対応だけが求められるため、ほとんどのブラウザが対応可能である。
本論文は、2章ではApacheの紹介をし、3章では作成したシステムの設計について説明し、4章では作成したシステムの実際の動きを紹介した。
Apacheは、高機能なWWWサーバである。HTTP(HyperText Transfer Protocol)と呼ばれるプロトコルのサービスを提供している。Apacheは、オープンソースの手法で開発されているフリーソフトウェアである。
Apacheは、NCSA(National Center for Supercomputing Applications)のHTTPサーバをベースとしている。1995年、Apache HTTP Server Projectとして開発がスタートした。Apacheの名前は、NCSA HTTPにパッチ(修正)を加えてできたことと(A patch:パッチをあてる)、アメリカ先住民族の部族名のひとつであるApacheに由来している。配布されているファイルに含まれるsrc/CHANGESによると、Apache0.2が1995/3/18に公開された事になっており、それはNCSA httpd 1.3に対してパッチを当てたものとされている。その後、Apache1.0に至るまで、バグ修正と新機能の追加を繰り返し行ってきており、またさまざまなOSで動作するように移植が繰り返された。
Apache1.0以降のバージョンアップでどのようにApacheが進化したのかを以下に示す。
WebサーバとしてApacheを利用するにあたり、それぞれの環境にあった設定が必要である。Apacheではhttpd.confという設定ファイルが用意されており、ここですべての設定を制御している。
Apacheを使って提供することが可能な機能は数多くある。Apacheのコア機能はWebページの送信機能の提供だが、それに加えてモジュールによって、SSI(Server Side Includes)や、プロキシサーバ機能、SSL(Secure Sockets Layer)を使用した認証機能なども実現できる。
Apacheでは提供されているモジュールをカスタマイズして機能変更することができる。また、新たにモジュールを作成して、オリジナル機能を追加することも可能である。
ここでは主要な機能について説明する。
Apacheを使用するそれぞれの環境や条件にあわせた設定により、Webサーバを実現できる。
公開するディレクトリの指定、ユーザ毎の領域の指定、外部からのアクセス権について、アドレスやパスワード認証により設定できる。これは基本的にはサーバ管理者がhttpd.confで設定するが、設定ファイル.htaccessを個々のディレクトリに置くことにより、ディレクトリの所有者もアクセス権を設定できる。
Apacheでは、HTTP1.1に準拠して1台のWebサーバで複数のWebサーバを運用することが可能である。
これは、仮想的な複数Webサーバを1台のサーバで提供することから、バーチャルホスト機能と呼ばれている。
バーチャルホスト機能は、サービスホストが複数のIPアドレスを持ったマルチホームホストである場合や、複数のドメインホスト名を持っている場合に、リクエストを受けたIPアドレスごと、あるいはHTTPリクエストのHost:フィールドの値ごとに異なる設定のサービスを行う機能である。
このサービスは、単一のサーバで行うこともできるし、バーチャルホストごとに別サーバを利用して行うこともできる。
バーチャルホスト名として指定できるのは、以下のいずれかである。
ApacheではSSIを提供することができる。SSIとはServer Side Includesの略で、動的にコンテンツを生成する技術である。動的なコンテンツでは、リクエストがあるたびに指定された処理を行い、その結果を反映する。つまり、リクエストのタイミングや条件が異なれば、生成されるコンテンツの内容も異なる。簡単なカウンタの生成などに用いることができる。
ApacheではCGIを組み込むことができる。CGIとはCommon Gateway Interfaceの略で、「共通インタフェイス」を意味している。この「共通インタフェイス」とは、クライアントとWebアプリケーションとの間で行われる通信のことである。これは、環境変数、標準入力や出力等の情報を受け渡しするために必要な仕様が定められており、これに基づいて、クライアントとWebアプリケーションの通信を実現する。
Apacheでは、アクセス履歴等をログファイルに出力することができる。ログを解析することで、Webサーバの状態を知ることができる。
Apacheでは、Web機能のほかに、ログ機能や動的コンテンツ生成機能など数多くの機能が提供されている。これらの機能を使うには、モジュールと呼ばれるプログラム群をApacheに追加しなければならない。新たな機能を組み込む場合、インターネットなどでモジュールを入手、もしくは自分自身でモジュールを作成してApacheに組み込むことが必要である。
Apacheは、拡張機能を行うためのAPI(Application Programming Interface:アプリケーションとのインタフェイス規定)が定義されている。Apacheの機能の多くは、このAPIを利用した機能モジュールを、Apache本体に組み込むことで実現されている。さまざまなモジュールがApache開発者や有志によって開発されている。
モジュールmod_statusを追加することで、HTTPを通じてサーバの状態を参照することができる。
アクセスコントロールは、対象や手法により細かく設定ができる。ここではそれの概要を説明する。
Webを利用して情報サービスを行う際には、インターネット上の誰でもがアクセスできるサービスだけでなく、特定のユーザや特定のドメイン、特定のホスト向けの限定サービスを行いたいことがある。
Apacheでは、提供する任意の情報について、さまざまな制限や設定を行うことができる。制限できる項目としては、
を、特定のディレクトリ、リクエストURL、特定のファイルに対して設定できる。
Apacheでは、任意のディレクトリ配下、任意のファイル、任意のロケーションに対して、さまざまな設定をすることができる。アクセスの制限はこの機能を利用して行う。
アクセス関係の設定は通常httpd.confファイル、又は各ディレクトリ内の.htaccessファイルにおける設定で行う。具体的には、以下のディレクティブを使用する。
“...”の箇所には、ディレクトリやファイル、ロケーションに適用する設定項目を記述する。
Apacheでは、ユーザ名とパスワードの組に基づく認証によって、情報へのアクセスを制御することができる。認証の方式としては、HTTP/1.0以降で利用可能なBasic認証と、HTTP/1.1で採用されたDigest認証に加えて、Basic認証を利用したAnonymous認証というApache独自の認証機能が用意されている。これらはいずれもクライアントからのリクエストに対してユーザ名とパスワードを要求し、その組み合わせで認証を行い、マッチした場合だけアクセスを許可するように設定するものである。
2-3-3で述べたBasic認証は、「.htaccess」と「.htpasswd」というファイルに記述すれば実現することができる。Basicn認証は、ページにかけるものではなく、ディレクトリに対して制限をかけるものである。したがって、「.htaccess」をおいたディレクトリ配下の全てのコンテンツに対して制限がかかることになる。
|
Hello:FeNpx1.147CVA hoge:X6ntcZ021IxMw |
本研究ではWebを利用して利用者の.htaccessの設定を支援する、そのため利用者から受け取った.htaccessをサーバアプリケーションにより編集を行う。そのため、はじめに.htaccessをFORMを利用し、「Input Type=file」により受け取る。なお、新規作成にも対応する。
ファイルを受け取ったらメインメニューに移る。ここで可能なことは、ユーザの登録、削除、一覧表示、検索表示、編集後の.htaccessの取り出しである。
状態遷移図 |
![]() |
実際に作成したプログラムはperl言語を使用し、CGIモジュールを使用した。
画面は上記の状態遷移図通り6枚あるが全て1本のプログラムで処理した。
画面の状態を保持するため、変数をhidden属性により埋め込んでいる。作成したプログラムはブラウザから送られてきた変数を読み始め、この変数に基づいて状態を変化させる。又、同様にユーザの.htaccessファイルの内容も、サーバは変数にhidden属性で埋め込んでいる。
(1) 最初に図1の画面が表示される。初めに「参照」ボタンをクリックし、自分の管理したいユーザ名&パスワードのファイル、.htpasswdを選択する。選択後、「送信」ボタンをクリックする。
また、自分の管理したいユーザ名&パスワードのファイル、.htpasswdを持っていない場合は、「新規」ボタンをクリックする。
![]() |
図1 ファイルの受取 |
(2) 「送信」ボタンまたは「新規」ボタンをクリック後、図2の画面が表示される。.htpasswdファイルにユーザ名&パスワードを追加するので、「追加・削除」ボタンをクリックする。
![]() |
図2 htpasswd管理画面 |
(3) 「追加・削除」ボタンをクリック後、図3の画面が表示される。登録したいユーザ名とパスワードを追加欄にあるテキストボックスに入力し、「追加」ボタンをクリックする。
![]() |
図3 .htpasswdの追加と削除 |
(4) 「追加」ボタンをクリック後、図4の画面が表示される。「戻る」ボタンで図2の.htpasswd管理画面に戻る。
![]() |
図4 .htpasswd追加完了画面 |
(1) 手順1、(1),(2)と同じ。
(2) 「追加・削除」ボタンをクリック後、図3の画面が表示される。削除したいユーザ名を削除欄にあるテキストボックスに入力し、「削除」ボタンをクリックする。
(3) 「削除」ボタンをクリック後、図5の画面が表示される。「戻る」ボタンで図2の.htpasswd管理画面に戻る。
![]() |
図5 .htpasswd削除完了画面 |
(1) 手順1、(1)と同じ。
(2) 「送信」ボタンをクリック後、図2の画面が表示される。.htpasswdファイルの一覧表示をするので、「一覧」ボタンをクリックする。
(3) 「一覧」ボタンをクリック後、図6の画面が表示され、ユーザ名一覧が表示される。「戻る」ボタンで図2の.htpasswd管理画面に戻る。
![]() |
図6 .htpasswd一覧表示画面 |
(1) 手順1、(1)と同じ。
(2) 「送信」ボタンをクリック後、図2の画面が表示される。.htpasswdファイルの検索をするので、検索したいユーザ名をテキストボックスに入力し「検索」ボタンをクリックする。
(3) 「検索」ボタンをクリック後、図7の画面が表示され、ユーザ名検索結果が表示される。「戻る」ボタンで図2の.htpasswd管理画面に戻る。
![]() |
図7 .htpasswd検索結果画面 (手順3-(2)でhogeを検索) |
本研究ではPerl/CGIを用いて、Webによるアクセスコントロール認証システムを作成した。サーバの規模によっては大変な数になる.htaccess、.htpasswdファイルを、Web上で視覚的にわかりやすく管理するシステムというのは私が調べた限り他に例がなく、新たなWebサーバの平易な管理を考える上では、なかなか良い点に注目して研究ができたと考える。
しかし、今回作成したシステムは十分でなく、必要な改良点としては以下が挙げられる。
[1]こがよういちろう、「Apache HTTPサーバの構築」、株式会社アスキー
[2]小沼佳洋、「ステップ式サーバ構築入門 はじめてのApache」、株式会社技術評論社
[3]「Apache 日本語ホームページ」、http://www.apache.or.jp
[4]宮坂雅輝、「CGI/Perl Handbook 2nd edition」、ソフトバンクパブリッシング株式会社
[5]「futomi's CGI Cafe」、http://www.futomi.com/