拡張子によってApacheモジュールの処理を適応するか判断するpatch(mod_ruid2版)

ブログはかなり久々。

会社での実装でいいものが生まれたりするのが、なかなかそれを社外に公開するわけにはいかず、あまり技術的な創作物をブログに書くことができなかった。今は、会社2割大学8割のような比率で研究しているので、最近作ったpatchでも紹介する。

実装対象は、DSO版PHPなどでもsuEXECのようなアクセス制御が行えるmod_ruid2に対してpatchを書いてみた。

mod_ruid2は実装上、モジュールとしてApacheに読み込んだ場合、すべての動的コンテンツ実行時にサーバプロセスをsetuid、setgidしてしまう。しかし、ある特定の環境下では、任意の拡張子(.phpや.py)においてのみモジュールの処理を実行させたい場合がある。Filesディレクティブ等を用いて、ファイルを指定するやり方もあるが、mod_ruid2等ではそういう設定記述は禁止されている。

そこで、mod_ruid2に2つの機能を実装した。

続きを読む

Apache hook関数

Apache HTTP Serverでとても重要なhook関数。

必ず忘れて、The Apache Modules Bookを読みなおしちゃうのでまとめておく。

 

 
分類 hook関数名 用途
設定初期化系 ap_hook_open_logs() ログのオープン
ap_hook_pre_config() pre_config実行時
ap_hook_post_config() initルーチンとかを呼ぶ時
ap_hook_optional_fn_retreive() オプションとして登録された関数の取得
プロセス初期化系 ap_hook_pre_mpm() scoreboad作成時
ap_hook_child_init() 子プロセス起動直後
コネクション処理系 ap_hook_create_connection() コネクション処理時、あまり使わない
ap_hook_pre_connection() コネクション処理の直前
ap_hook_process_connection() プロトコルの処理時
リクエスト処理系 ap_hook_create_request() リクエスト生成時に、モジュールがrequest_configを生成したい時
ap_hook_post_read_request() リクエストが読み込まれてすぐに、モジュールでリクエストを処理したい時
ap_hook_quick_handler() リクエストの処理が始まる前
ap_hook_translate_name() URIをファイル名に変換する時、モジュールで変換したい時
ap_hook_map_to_storage() モジュール自身のコンテキストに従ってper_dir_configを設定したい時
ap_hook_header_parser() モジュールでヘッダを参照したい時、post_read_request()で代用
ap_hook_access_checker() クライアントが認証受ける前に追加でアクセスチェックをしたい時
ap_hook_check_user_id() リクエストヘッダからユーザーIDやパスワードの確認時
ap_hook_auth_checker() リクエストされたリソースへのアクセスが認証されているか確認時
ap_hook_type_checker() コンテントタイプ等を設定したりする時
ap_hook_fixups() レスポンス内容の生成を変更する最後の機会
ap_hook_handler() レスポンス内容の生成時
ap_hook_log_transaction() レスポンス返した後のロギング時
エラー処理系 ap_hook_insert_error_filter() エラーの応答時にフィルターを挿入する時
ap_hook_error_log() エラーログ生成時
その他 ap_hook_default_port() リクエストで利用したデフォルトのポートを返す時
ap_hook_http_scheme() リクエストからHTTPメソッドを回収する時、用途はHTTPメソッドの容易な拡張
ap_hook_fatal_exception() 例外処理時
ap_hook_get_mgmt_items() 操作状況をモジュール提供
ap_hook_suexec_identity() suexecのID取得

 

うーむ、多い。

これで今後の作業は楽になるだろう。

これからやりたい事

  • Apacheの動的リソース管理 -> いずれはKernelのレイヤーで
    • リソースを時系列データとして扱い変化点を検出
    • 外れ値は検知しない
    • 各リソースの時系列データの相関を時系列データとして見る
    • SDARの基本モデルであるARモデルをARMAモデルなどの多次元対応
    • 意味のあるリソース情報の選択
  • Kernelから見たApacheの新しいセキュリティモデル
    • ApacheのsuEXECから脱却
    • Capabilityの基本設計を言及
    • WrapperではなくプロセスやファイルからのApacheのセキュリティモデルを提案
    • Kernelに近いセキュリティのアプローチからApacheのセキュリティモデルを設計
    • SE-PostgreSQLのようなSE-Apaceh的モデルの提案

Apache Module Registry 承認済みモジュール

自身が一番興味を持って取り組んだ分野のひとつである、Apache HTTP ServerとApache Module。

これらで使えぞうなのは、Apache Module Registryに申請している。

現在、自身で書いたApache Moduleで、Apache Module Registryにおいて承認されているmoduleを簡単に説明する。

[important]

[/important]

とりあえず、以上のモジュールは一定水準のクオリティ(ある程度使える)であると思われる。

続きを読む

What is mod_vlimit. “limit the number of simultaneous connections”

Preface

This is the distribution page for the Apache module mod_vlimit.

mod_vlimit allows “Apache HTTP Server” administrators to limit the number of  simultaneous connections(exec cgi php)  from the same IP address or all to any files.

If client accessese are over the limit connections, mod_vlimit return 503 error message to the client.

[warning]
mod_vlimit is for Apache 2.x.
If you use “VirtuaHost”, This is OK.
mod_vlimit is approved Apache module by “Apache Module Registry“.
[/warning]

 

Downloads

mod_vlimit is approved Apaceh module by “Apache Module Registry“.

You can search or browse on “Apache Module Registry“, if you’d like to get the information for mod_vlimit.

[note]

[/note]

続きを読む