WebによるApache認証システムファイルの作成

1章 はじめに

 WWWは、インターネットにおいて一番成功した情報サービスである。通常の利用は無料であるが、一部は商業化に成功し、有料のところもある。有料サービスを実現するには、お金を払った人とお金を払わない人を区別する必要がある。そのため、一般にはパスワードの認証が行われる。この特定の情報へのアクセスの管理をアクセスコントロールという。有料の情報サービスをWWW上で行うには、アクセスコントロールが可能なサーバを用いる必要がある。世界で一番良く、使われているWWWサーバはApacheである。もちろんApacheはアクセスコントロールが可能である。但し、Apache自身の設定はテキストファイルにより行う。テキストファイルは、検索が自由に行え、プログラムによる生成が容易であり、電子メールやWWWなどのサービスに乗りやすいといった長所がある。反面、ある規則(文法)に従って記述しなければならないので、利用者はその文法をマスターしなければならない。この文法を覚えることは一般のユーザにとって苦痛であろう。したがって、平易なユーザインタフェイスによりアクセスコントロールができることが求められていると考えられる。
 本研究では、Apacheのアクセスコントロールを平易な操作でするシステムを提案する。平易な操作を実現するために、本研究ではWebのサービスを利用することとした。具体的にはApacheのアクセスコントロールファイルである.htaccessをCGIを介してサーバアプリケーションにより、編集を行うシステムを作成した。クライアントにはCGIの対応だけが求められるため、ほとんどのブラウザが対応可能である。

 本論文は、2章ではApacheの紹介をし、3章では作成したシステムの設計について説明し、4章では作成したシステムの実際の動きを紹介した。

2章 Apacheの紹介

2-1 Apacheの概略

 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が進化したのかを以下に示す。

Apache 1.0
 Apache 0.8系のものを修正してリリースしたもので、よくApacheの初期バージョンと間違えられるが、実際には0.8とあまり変わっていない。
 初期ディレクトリはNCSAのものを継承しており、/use/loca/etc/httpdとなっている。また、設定ファイルは/usr/loca/etc/httpd/conf内のhttpd.conf、srm.conf、access.conf、mime.typesの4つが存在した。
Apache 1.1
 Apache 1.0とプログラム的な基本構造は変わらないが、大変多くの機能強化が行われた。
 初期ディレクトリは前バージョンと同じく、/usr/local/etc/httpdが標準となっており、設定ファイルのパスも変わっていない。
Apache 1.2
 ソフトウェアの構造が大幅に変更され、モジュールやAPIの仕様が変更されている。
 初期ディレクトリは以前のバージョンから変更され、/usr/local/apacheが標準となり、ソースツリー内でもモジュールが別ディレクトリに移された。
Apache 1.3
 ソースツリーの構成が変わり、ソースファイルの配置がディレクトリ毎に細かく分けられた。また、全てのソースにわたって新機能の追加やWindowsのサポートのために書き直しされている。

2-2 主な機能

 WebサーバとしてApacheを利用するにあたり、それぞれの環境にあった設定が必要である。Apacheではhttpd.confという設定ファイルが用意されており、ここですべての設定を制御している。
 Apacheを使って提供することが可能な機能は数多くある。Apacheのコア機能はWebページの送信機能の提供だが、それに加えてモジュールによって、SSI(Server Side Includes)や、プロキシサーバ機能、SSL(Secure Sockets Layer)を使用した認証機能なども実現できる。
 Apacheでは提供されているモジュールをカスタマイズして機能変更することができる。また、新たにモジュールを作成して、オリジナル機能を追加することも可能である。
 ここでは主要な機能について説明する。

2-2-1 Webのサーバ

 Apacheを使用するそれぞれの環境や条件にあわせた設定により、Webサーバを実現できる。

2-2-2 様々なアクセス権の制御

 公開するディレクトリの指定、ユーザ毎の領域の指定、外部からのアクセス権について、アドレスやパスワード認証により設定できる。これは基本的にはサーバ管理者がhttpd.confで設定するが、設定ファイル.htaccessを個々のディレクトリに置くことにより、ディレクトリの所有者もアクセス権を設定できる。

2-2-3 バーチャルホストの設定(HTTP/1.1より)

 Apacheでは、HTTP1.1に準拠して1台のWebサーバで複数のWebサーバを運用することが可能である。
 これは、仮想的な複数Webサーバを1台のサーバで提供することから、バーチャルホスト機能と呼ばれている。
 バーチャルホスト機能は、サービスホストが複数のIPアドレスを持ったマルチホームホストである場合や、複数のドメインホスト名を持っている場合に、リクエストを受けたIPアドレスごと、あるいはHTTPリクエストのHost:フィールドの値ごとに異なる設定のサービスを行う機能である。
 このサービスは、単一のサーバで行うこともできるし、バーチャルホストごとに別サーバを利用して行うこともできる。
 バーチャルホスト名として指定できるのは、以下のいずれかである。

2-2-4 SSI

 ApacheではSSIを提供することができる。SSIとはServer Side Includesの略で、動的にコンテンツを生成する技術である。動的なコンテンツでは、リクエストがあるたびに指定された処理を行い、その結果を反映する。つまり、リクエストのタイミングや条件が異なれば、生成されるコンテンツの内容も異なる。簡単なカウンタの生成などに用いることができる。

2-2-5 CGI

 ApacheではCGIを組み込むことができる。CGIとはCommon Gateway Interfaceの略で、「共通インタフェイス」を意味している。この「共通インタフェイス」とは、クライアントとWebアプリケーションとの間で行われる通信のことである。これは、環境変数、標準入力や出力等の情報を受け渡しするために必要な仕様が定められており、これに基づいて、クライアントとWebアプリケーションの通信を実現する。

2-2-6 ログの確認

 Apacheでは、アクセス履歴等をログファイルに出力することができる。ログを解析することで、Webサーバの状態を知ることができる。

2-2-7 モジュールの追加

 Apacheでは、Web機能のほかに、ログ機能や動的コンテンツ生成機能など数多くの機能が提供されている。これらの機能を使うには、モジュールと呼ばれるプログラム群をApacheに追加しなければならない。新たな機能を組み込む場合、インターネットなどでモジュールを入手、もしくは自分自身でモジュールを作成してApacheに組み込むことが必要である。
 Apacheは、拡張機能を行うためのAPI(Application Programming Interface:アプリケーションとのインタフェイス規定)が定義されている。Apacheの機能の多くは、このAPIを利用した機能モジュールを、Apache本体に組み込むことで実現されている。さまざまなモジュールがApache開発者や有志によって開発されている。

2-2-7-1 Web上からの状態監視

 モジュールmod_statusを追加することで、HTTPを通じてサーバの状態を参照することができる。

2-3 アクセスコントロールについて

 アクセスコントロールは、対象や手法により細かく設定ができる。ここではそれの概要を説明する。

2-3-1 アクセスコントロール

 Webを利用して情報サービスを行う際には、インターネット上の誰でもがアクセスできるサービスだけでなく、特定のユーザや特定のドメイン、特定のホスト向けの限定サービスを行いたいことがある。
 Apacheでは、提供する任意の情報について、さまざまな制限や設定を行うことができる。制限できる項目としては、

を、特定のディレクトリ、リクエストURL、特定のファイルに対して設定できる。

2-3-2 アクセス制限の設定

 Apacheでは、任意のディレクトリ配下、任意のファイル、任意のロケーションに対して、さまざまな設定をすることができる。アクセスの制限はこの機能を利用して行う。
 アクセス関係の設定は通常httpd.confファイル、又は各ディレクトリ内の.htaccessファイルにおける設定で行う。具体的には、以下のディレクティブを使用する。

“...”の箇所には、ディレクトリやファイル、ロケーションに適用する設定項目を記述する。

2-3-3 ユーザ名とパスワードの組を用いた認証

 Apacheでは、ユーザ名とパスワードの組に基づく認証によって、情報へのアクセスを制御することができる。認証の方式としては、HTTP/1.0以降で利用可能なBasic認証と、HTTP/1.1で採用されたDigest認証に加えて、Basic認証を利用したAnonymous認証というApache独自の認証機能が用意されている。これらはいずれもクライアントからのリクエストに対してユーザ名とパスワードを要求し、その組み合わせで認証を行い、マッチした場合だけアクセスを許可するように設定するものである。

1 Basic認証
 Basic認証はHTTP/1.0で採用された認証方法であり、ユーザ名とパスワードの組を用いて情報へのアクセスの可否を判定する。この機能を使用するにはmod_authモジュールを組み込む必要がある。なお、Basic認証では、パスワードが暗号化されずにネットワークを流れるという欠点がある。
2 Digest認証
 Digest認証はHTTP/1.1で採用された認証機能であり、Apacheではいち早くこれを実装している。Digest認証を使用するには、サーバプログラムにmod_digestモジュールを組み込む必要がある。
 Digest認証の設定方法とユーザに要求する操作はBasic認証とほとんど同じでありながら、実際はネットワークをパスワードが生で流れないようになっており、Basic認証と比較して好ましいものといえる。
3 Anonymous認証(Apacheの独自機能)
 Anonymous認証は、Basic認証を用いてanonymousFTPと似た認証機能を提供する。アクセスに際して、ユーザ名として匿名(たとえば“anonymous”とか“www”といった文字列)を、パスワードとしてメールアドレスを要求する。Anonymous認証を使用するには、サーバプログラムにmod_anon_authモジュールを組み込む必要がある。

2-3-4 「.htaccess」「.htpasswd」によるBasic認証

 2-3-3で述べたBasic認証は、「.htaccess」と「.htpasswd」というファイルに記述すれば実現することができる。Basicn認証は、ページにかけるものではなく、ディレクトリに対して制限をかけるものである。したがって、「.htaccess」をおいたディレクトリ配下の全てのコンテンツに対して制限がかかることになる。

1 「.htaccess」の記述について
記述例
AuthUserFile /home/futomi/.htpasswd   -----(1)
AuthGroupFile /dev/null
AuthName "Secret Area"   -----(2)
AuthType Basic
require valid-user
<Files ~ "^.(htpasswd|htaccess)$">
    deny from all   -----(3)
</Files>

 番号を振ってある行について説明する。この部分を環境に合わせて書き換えなければならない。そのほかの行については、そのまま使用が可能である。
(1) AuthUserFile
 パスワードファイルの指定である。ここでの指定は、サーバのルートディレクトリからのフルパスで記述しなければならない。
(2) AuthName
 Basic認証をかける領域名の指定である。上の図の例では、「Secret Area」の部分がそれにあたる。「"(ダブルクォーテーション)」で囲まれた部分は、書き換えが自由である。ただし、「"(ダブルクォーテーション)」は領域名には使えない。
(3) Files
「.htaccess」や「.htpasswd」は外部に見せたくはないので加える必要がある。
2 「.htpasswd」について
記述例
Hello:FeNpx1.147CVA 
hoge:X6ntcZ021IxMw

 .htpasswdに記載される情報は、アカウント名とパスワードである。アカウント名とパスワードは「:(コロン)」で区切られる。複数のアカウントを指定する場合には、改行をして次の行に記述する。パスワードについては、暗号化された状態で保存される必要がある。暗号化には、何かしらのツールが必要であるが、通常は、htpasswdコマンドを用いることで、この形式のファイルを作成することができる。

3章 作成したシステムの設計

 本研究ではWebを利用して利用者の.htaccessの設定を支援する、そのため利用者から受け取った.htaccessをサーバアプリケーションにより編集を行う。そのため、はじめに.htaccessをFORMを利用し、「Input Type=file」により受け取る。なお、新規作成にも対応する。

 ファイルを受け取ったらメインメニューに移る。ここで可能なことは、ユーザの登録、削除、一覧表示、検索表示、編集後の.htaccessの取り出しである。

ユーザ登録
 メインメニューで「ユーザ登録」を選ぶと、ユーザ登録画面に移る。ここではユーザ名とパスワードを2回入力することでユーザひとりを登録できる。
ユーザ削除
 メインメニューで「ユーザ削除」を選ぶと、ユーザ削除画面に移る。ここではユーザ名を入力することでユーザひとりを削除できる。
.htaccessの取り出し(表示)
終了ボタンを押すと編集を終えて.htaccessファイルを画面に表示する。
状態遷移図

4章 作成したプログラムのマニュアル

4-1 作成したプログラム

 実際に作成したプログラムはperl言語を使用し、CGIモジュールを使用した。
 画面は上記の状態遷移図通り6枚あるが全て1本のプログラムで処理した。

 画面の状態を保持するため、変数をhidden属性により埋め込んでいる。作成したプログラムはブラウザから送られてきた変数を読み始め、この変数に基づいて状態を変化させる。又、同様にユーザの.htaccessファイルの内容も、サーバは変数にhidden属性で埋め込んでいる。

4-2 使用方法

1 .htpasswdへのユーザ名&パスワードの追加

 (1) 最初に図1の画面が表示される。初めに「参照」ボタンをクリックし、自分の管理したいユーザ名&パスワードのファイル、.htpasswdを選択する。選択後、「送信」ボタンをクリックする。
   また、自分の管理したいユーザ名&パスワードのファイル、.htpasswdを持っていない場合は、「新規」ボタンをクリックする。

図1 ファイルの受取

 (2) 「送信」ボタンまたは「新規」ボタンをクリック後、図2の画面が表示される。.htpasswdファイルにユーザ名&パスワードを追加するので、「追加・削除」ボタンをクリックする。

図2 htpasswd管理画面

 (3) 「追加・削除」ボタンをクリック後、図3の画面が表示される。登録したいユーザ名とパスワードを追加欄にあるテキストボックスに入力し、「追加」ボタンをクリックする。

図3 .htpasswdの追加と削除

 (4) 「追加」ボタンをクリック後、図4の画面が表示される。「戻る」ボタンで図2の.htpasswd管理画面に戻る。

図4 .htpasswd追加完了画面

2 .htpasswdへのユーザ名&パスワードの削除

 (1) 手順1、(1),(2)と同じ。

 (2) 「追加・削除」ボタンをクリック後、図3の画面が表示される。削除したいユーザ名を削除欄にあるテキストボックスに入力し、「削除」ボタンをクリックする。

 (3) 「削除」ボタンをクリック後、図5の画面が表示される。「戻る」ボタンで図2の.htpasswd管理画面に戻る。

図5 .htpasswd削除完了画面

3 .htpasswdのユーザ名一覧表示

 (1) 手順1、(1)と同じ。

 (2) 「送信」ボタンをクリック後、図2の画面が表示される。.htpasswdファイルの一覧表示をするので、「一覧」ボタンをクリックする。

 (3) 「一覧」ボタンをクリック後、図6の画面が表示され、ユーザ名一覧が表示される。「戻る」ボタンで図2の.htpasswd管理画面に戻る。

図6 .htpasswd一覧表示画面

3 .htpasswdのユーザ名検索

 (1) 手順1、(1)と同じ。

 (2) 「送信」ボタンをクリック後、図2の画面が表示される。.htpasswdファイルの検索をするので、検索したいユーザ名をテキストボックスに入力し「検索」ボタンをクリックする。

 (3) 「検索」ボタンをクリック後、図7の画面が表示され、ユーザ名検索結果が表示される。「戻る」ボタンで図2の.htpasswd管理画面に戻る。

図7 .htpasswd検索結果画面
(手順3-(2)でhogeを検索)

5章 まとめ

 本研究ではPerl/CGIを用いて、Webによるアクセスコントロール認証システムを作成した。サーバの規模によっては大変な数になる.htaccess、.htpasswdファイルを、Web上で視覚的にわかりやすく管理するシステムというのは私が調べた限り他に例がなく、新たなWebサーバの平易な管理を考える上では、なかなか良い点に注目して研究ができたと考える。
 しかし、今回作成したシステムは十分でなく、必要な改良点としては以下が挙げられる。

  1. パスワードデータベースの一括入力および削除
  2. 設定ファイル.htaccessへの対応
  3. IPアドレスによる制限への対応

6章 参考文献

[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/