Apache httpサーバのモジュールを作る Part I

Software & Patch

「Apache httpサーバのモジュールを作る」 Part I

今回はApacheのモジュールを作成する為の概要を記したいと思います。
とはいえ、何かモジュールが必要になるシーンを想定しないと制作意欲が
沸かないと思うので、チョットしたシーンを考えて実践してみます。

あまり関係ないけど、筆者の世代はギター世代で、高校生時代にギターを
始める輩は少なくありませんでした。
しかし、ギターを手にした多くの輩は、なぜか「禁じられた遊び」を弾いてい
ました。個人的には、
「その曲すきなの?」
「その曲弾きたかったの?」
「なんでその曲弾くの?」
等と思ったものです。
要は、好きな曲を弾く事はより実践的で楽しいのに、何故貴重な時間を
「禁じられた遊び」を弾くことに費やすのか?という事です。

前置きが長くなりましたが、Apacheの実践的なモジュールをご紹介
しますね。
#"hello world"って表示されるだけのモジュールは作りません。

+++++++++++++++++++++++++++++++++++++++

http基本認証等を利用してアクセス制限を掛けているURIでCGI等を利用して、
認証情報を取得する場合、環境変数のREMOTE_USERの値を参照する事に
より、認証IDを取得できます。

例えば、perlで表現すると以下の様になります。
------------------------------------------------------
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "$ENV{REMOTE_USER}さんいらっしゃい\n";
exit(0);
------------------------------------------------------

では、パスワードはどうでしょうか?

パスワードがCGI側で取得できれば、設定されているパスワードが
貧弱なパスワードか否かを判断し、貧弱だった場合
「連想されやすいパスワードは使わないようにしましょう」
といった具合に、警告メッセージを出す事が可能になります。

しかし、環境変数からユーザエージェントが送信してきているパスワードを
取得する事は出来ません。何故なら、Apache httpサーバはその機能
を有していないからです。
#セキュリティー的に不味いからという理由が大きいと思いますが。。

ここからが本題で、パスワードを環境変数に入れるモジュールを紹介します。
前置きとして、ここで紹介するモジュールは、基本認証を対象にしており、
ダイジェスト認証には非対応となりますので、ご了承ください。

Apache モジュール:mod_setenvauthpw
説明: 環境変数に基本認証のパスワード設定する
モジュール識別子:setenvauthpw_module
ソースファイル:mod_setenvauthpw-0.9b.c

ソース一式:setenvauthpw-0.9b.tar.gz
Apache Module Registryサイト:
setenvauthpw

組み込む方法は、apacheに付属しているapxsコマンドを利用してモジュールを
コンパイルし、その後httpd.confにLoadModuleディレクティブを利用し
ロードすることにより機能します。

コンパイル
%/usr/sbin/apxs -c mod_setenvauthpw.c

エラーが出なければ、これでコンパイルは終わりです。
実際は、カレントディレクトリに.libsというディレクトリが作成され、
配下にmod_setenvauthpw.soが作成されます。

インストール
%su
#/usr/sbin/apxs -n mod_setenvauthpw -i ./.libs/mod_setenvauthpw.so

エラーが出なければインストールは完了です。
実際は、コンパイルで作成された.soファイルが/usr/lib/httpd/modules/配下に
インストールされます。cpコマンドやinstallコマンドでコピーをしても差は無いです。

組み込み
#vi /etc/httpd/conf/httpd.conf
---8<------8<------8<------8<------8<---
#モジュールのロード
LoadModule setenvauthpw_module modules/mod_setenvauthpw.so

#機能をEnableにしたいコンテナ内でONにする

SetenvAuthPW ON

---8<------8<------8<------8<------8<---
と記述し、httpdをリスタートすれば組み込み組み込み完了です。
また、AllowOverrideしている条件では、.htaccessファイルに
---8<------8<------8<------8<------8<---
SetenvAuthPW ON
---8<------8<------8<------8<------8<---
を記述することにより機能がEnableになります。

動作検証
ユーザエージェントから送信されてきパスワードは、環境変数の「REMOTE_PASSWORD」という
キーに対応付けられていますので、基本認証をセットしたURIを用意し、
CGI内で「REMOTE_PASSWOR」を取得してみてください。
------------------------------------------------------
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "$ENV{REMOTE_USER}さんのパスワードは、$ENV{REMOTE_PASSWORD}ですね。\n";
exit(0);
------------------------------------------------------
といった感じです。

PartIとしての組み込みまでの過程は以上となります。

次回はPartIIでは、モジュールのソースがどの様な意味を持ち振舞っているかを説明したいと思います。

最終更新 (2011年 2月 21日(月曜日) 17:29)

 
Login