SAINT2012とは、正確には「IEEE/IPSJ International Symposium on Applications and the Internet」という国際会議で、今年は7月16日から20日にかけてトルコのイズミールで行われました。
といっても、僕の都合がどうしてもつかず、mod_mrubyの発表と同様、またもや共著者の先生に発表して頂きました。このご恩は決して忘れません。スライドのベースは僕が作ったので、英語がおかしな所が沢山あると思いますので、そこはスルーして下さい…
mod_process_securityのおさらい
これまでの課題
簡単にmod_process_securityのおさらいをしておきます。Apacheで大規模ホスティングサービス(1サーバにユーザー数が千のオーダーを収容)を低コストで実現するためには、VirtualHostを利用する必要があり、その場合、動的コンテンツを実行するためにDSO版のPHPやmod_perl、mod_rubyを使うと、サーバプロセスの権限で動的コンテンツが動作してしまうため、共有ホスティングサービスなどの共有環境においてセキュアでないという問題がありました。
これは、動的コンテンツによって他のユーザー領域に自由にアクセスできる事を意味します。
ホスティング各社の対応
そこで、ホスティング各社はコストを低減するためにVirtualHostを利用した共有サービスにおいては、セキュリティを優先した場合はCGIを使わざるを得なくて、DSOと比べてパフォーマンスが大きく低下してしまいます。また、パフォーマンスを優先してDSOを使った場合は、サーバプロセスをユーザー毎に起動させたり、chrootやコンテナ等を利用したりする必要があり、1サーバにユーザー数が千のオーダーになってくると、リソースを効率良く使用する事ができませんでした。
このように、セキュリティとパフォーマンスを両立させる事が非常に困難でした。
mod_process_securityを研究・開発
そこで、VirtualHostにおいてでもDSOを使って高いパフォーマンスを維持しつつ、セキュアに動的コンテンツを扱うために研究・開発したモジュールがmod_process_securityです。これは、動的コンテンツにリクエストがあった場合に、制御用スレッドを生成してそのスレッドの権限をLinux Capabilityによって動的コンテンツの権限に変更し、スレッド経由で動的コンテンツを実行させるというアーキテクチャをとっています。これまでは、セキュリティを担保するためには、動的コンテンツ実行時にCGIプロセスの生成・破棄やサーバプロセスの生成・破棄が必要であったのに対し、mod_process_securityはスレッドの生成・破棄が生じるだけなので、動的コンテンツを実行するための処理時間と比較すると非常に軽量な処理だといえます。
パフォーマンス評価等の詳細はこのあたりを読むと良いと思います。
では、スライドです。
SAINT2012でのスライド
ちなみに、国内の研究会で日本語で発表したスライドは以下になります。
最後に
このように、VirtualHostを使う事でパフォーマンスを低下させなければいけなかった状況を改善する事ができたので、VirtualHost上でどんどんDSOを使っていくとよいと思います。今後は、VirtualHost単位でリソースを柔軟に管理できるようなモジュールと組み合わせる事で、新しいVirtualHostアーキテクチャを考えていきたいと思っています。これによって、もっと低コスト(運用コストも含めて)で大規模かつセキュアでパフォーマンスの高いWebバーチャルホスティングサービスを構築できるようになればいいな、と思っています。