$Id: index.html,v 1.5 2002/10/25 13:45:14 misty Exp $

大学でのApacheの認証機構の利用について


目次

[はじめに] [Apacheの認証機構] [認証方法追加法]
[mod_perlを利用した認証方法追加法] [mod_perlでの認証モジュール作成法]
[CGI作成例] [運用実績と考察] [まとめ]


1. はじめに

特に大学のような学校では、 分散した様様なWebサーバを学生などの一定の集合に属する メンバーの一部が利用することが多い。 学籍番号で区別し特定の学習者に利用を限りたい、 また、その利用状況を知りたいということが頻繁に起こる。 WWWサーバの認証機構を利用すると便利であるが、 ページやCGIの認証をいちいちサーバごとに行うのは面倒である。

このため、ここでは特にApache WWW Serverについて、 WWWサーバの認証機構で認証方法を変更し、 特定の認証サーバで一括して認証を行うようにするための手段を示す。 この方法を使用するにはApacheの管理者であり、かつSSLなどを使用できる必要があるので、一般の方が趣味で行うようなCGI作成では使用できない。 上述のようなシステム作成者向きである。

[Return To Index]


2. Apacheの認証機構(Basic認証)

2.1 Apacheの認証機構(Basic認証)を用いる利点

  1. .htaccessの置かれたディレクトリ以下へのアクセス全てに認証チェックがかかる。 一旦認証が済んでいれば、アクセス可能。
  2. ユーザ情報がアクセスログに記録されるので、後での解析が可能。
  3. CGI等ならば、特別な認証を組み込む必要がなくなり、REMOTE_USER環境変数だけを 見れば良くなる。

2.2 Apacheの認証機構(Basic認証)使用上の注意

2.2.1 詐称にどの程度強いのかは不明

REMOTE_USER環境変数を詐称可能か?ただし、代替案であるhidden, cookie, REFERER環境変数なども そう強度は高くない

2.2.2 SSLとの併用が必要

Basic認証はパスワードが素で流れるので。 これも代替案でも使用する必要があるので同じ。

2.3 Apacheの認証機構(Basic認証)の欠点

  1. デフォルトでは認証方法がパスワードファイルのみで融通が利かない。
  2. パスワードファイルの作成管理が面倒
  3. 認証画面がちゃちい どうにかならないのか…
  4. 認証方法を新たに追加したい。認証方法を追加する方法はあるのでそれを利用する。

[Return To Index]


3. Apacheの認証のために認証方法を新たに追加する方法

Apacheに認証方法を追加する手段は2つある。

3.1 追加したい認証方法をモジュールとして作成し組み込む

例えば、mod_pgsqlなどがある。 作成および組み込みが大変である。

3.2 追加したい認証方法をPerlモジュールとして作成し、mod_perlと併用する

CPANにAuthenPasswd, AuthenNIS, AuthenRadiusなどがある。 CPANのサイトの中にあるPerlモジュールリストの、15) World Wide Web, HTML, HTTP, CGI, MIME etc (see Text Processing) の中の、Apache PerlAuthenHandler modules, Apache PerlAuthzHandler modulesあたりをみればよいだろう。

mod_perlが組み込まれてなければならないが、最近のフリーUNIXだと大抵組み込み済み。

.htaccessなりhttp.confなりに認証のためのおまじないを書く必要がある。

mod_perlでの認証モジュール追加が簡単。

[Return To Index]


4. mod_perlでの認証方法追加とその利用の例

ここでは私の作成したAuthPg.pmおよびAuthzPg.pmを例に認証方法を追加する方法と、実際に認証を行う方法を示す。また、ログファイルにユーザの利用記録が残る様子を示す。

ユーザ認証用モジュール→[AuthPg.pm]

グループ認証用モジュール→[AuthzPg.pm]

4.1 mod_perlの設定と動作確認

mod_perlの組み込みなどの細かい話はここでは書かない。 すでにmod_perlは組み込まれているものとして、/var/www/perlディレクトリを/perlと別名をつけ、そのディレクトリ以下でmod_perlを使用する場合のhttp.confの設定例を 以下に示す。

<ifmodule mod_perl.c> ←mod_perlモジュールが有効になってる場合
   Alias /perl /var/www/perl ←Perlスクリプトの保管場所を/perlという位置で参照できるようにする
   <directory /var/www/perl> ←このディレクトリの設定を開始
      SetHandler perl-script ←Perlのハンドラを使う
      PerlHandler Apache::Registry ←Perl実行に必要なモジュールをハンドラとして定義
      Options +ExecCGI ←CGIの実行を許可
   </directory> 
</ifmodule>

AllowOverrideを有効にしている場合には、http.confでdirectoryタグを使用しないで、テストを行うディレクトリに直接以下の.htaccessファイルを置くことでもmod_perlを使用できるようになる。

[mod_perl_htaccess.txt]

mod_perlの動作確認には以下のスクリプトを利用する。

[mod_perl_test.txt]

mod_perlが動作していれば、以下のような出力が得られる。

 It's running mod_perl!
 1. QUERY_STRING : 
 ...

動作していない場合は、以下のような出力になる。

 It's running CGI! 
 1. QUERY_STRING 
 ...

4.2 認証方法の新規追加

組み込む予定のモジュールをhttp.confに追加するには、先ほどの記述にPerlModuleで始まる行で追加記述する。 ここでは、Apache::AuthPgを追加したいので、PerlModule Apache::AuthPgというを追加する。なお、/perlディレクトリを使用しない場合は、directoryタグとその中身(つまり、<directory ...>〜</directory>)は不要である。

<ifmodule mod_perl.c>
   Alias /perl /var/www/perl
   <directory /var/www/perl>
      SetHandler perl-script
      PerlHandler Apache::Registry
      Options +ExecCGI
   </directory>
   PerlModule Apache::AuthPg ←追加行
</ifmodule>

多すぎる場合には別途ファイルを作成し、それを組み込むようにする。

(まだ)

4.3. アクセスルールの記述

4.3.1 ユーザ認証の使用(AuthPg.pm)

制限を行うディレクトリに以下のような.htaccessを記述する。

[auth_htaccess.txt]

記述した後は、うまく動いているか動作試験を行う。テストユーザをデータベースに追加し、認証してみる。

(まだ)

認証ができればページが見える。

(まだ)

4.3.2 グループ認証の使用(AuthzPg.pm)

AuthzPg.pmをロードするように、httpd.confに追加する。Module Apache::AuthzPgを追加。

(まだ)

.htaccessに以下を追加する。

(まだ)

テストグループを作成し、テストユーザを追加し、グループ認証してみる。

(まだ)

認証ができればページが見える。

4.4 ログファイルの様子

ユーザ認証を行った場合

(まだ)

グループ認証を行った場合

(まだ)

[Return To Index]


5. mod_perlを利用した認証モジュールの作成

ここでは私の作成したAuthPg.pmおよびAuthenPg.pmを例に認証モジュールの作 成について解説する。

(まだ)

[Return To Index]


6. Basic認証を利用した場合のCGI作成例

認証を自力でチェックする必要はない。

環境変数REMOTE_USER, REMOTE_GROUP(?)を随時利用することができる。

例として、私の作成した受講登録CGIを上げる(しょぼいが)。

環境変数REMOTE_USERを利用して自動的に学籍番号を埋めている。

(まだ)

[Return To Index]


7. 運用実績および考察

2年間運用。登録ユーザ数、2〜3万。総アクセス数?かなり… ときおりデータベースサーバのエラーあり。

7.1 負荷に関する検討

(まだ)

ログは残ってるのだが、ちゃんと考察してない…。

7.2 セキュリティに関する検討

7.2.1 ブラウザ-WWWサーバ間

暗号化が必要。 今回はSSLの秘密鍵を自サイトで発行、運用した。 大学で全体的な認証を行うなら、ちゃんと認証発行機構を運用する必要がある だろう。

7.2.2 WWW-認証サーバ間

cryptを使用したが、これは弱い。通信の暗号化の方法が必要。 Radiusが運用されているなら、そちらを使用するのが良いかも。

[Return To Index]


8. まとめ

以上のような手法により、Apacheの認証方法の変更は比較的簡単に行うことが できる。また、データベースを使用したところ2〜3万程度のユーザ認証は特に 問題なく運用された。 今後は他の認証方法の利用を検討すること、 せっかく取得できたログファイルの解析方法を考えること、 などが考えられる。

でも、自分でやるのは面倒くさいので実働部隊募集中。

[Return To Index]


Copyrighted by Mika Ohtsuki (mika@mikamama.com)