それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

WEBアプリの安全化。SuExec/suPHP を使うことで各ユーザー毎の権限にする

suEXECは

suEXECはCGIを別ユーザーで動かす機構。Apache以外のユーザとして動かす。

つまり、ApachesuしてCGIをexec すると覚える。

suEXECかんたん解釈

CGIから新規作成ファイルしたら、ファイルがApache(httpd)権限になって困る。これを防ぐため、CGIを別ユーザで実行させる。

使い途

CGI の動作モードを変えるこの設定だが。ホスティングでは威力を発揮する。
suEXEC対象になるのは。userdir や virtualhostが一般的。
他社のデータホスティングしている、複数人で開発しているなど、不用意にファイルを上書きしたら嫌なときに便利。

設定のキモ

この辺がハマりそう。

14.ディレクトリを他のユーザが書き込めるようになって いないか?
16.対象となる CGI/SSI プログラムファイルが他アカウントから 書き込めるようになっていないか?

http://httpd.apache.org/docs/2.0/ja/suexec.html#usage

設定例

virtualhostディレクティブ
<virtualhost >
SuexecUserGroup usr_name grp_name
</virtualhost >
mod_userdir

mod_userdir により処理されたリクエストは リクエストされたユーザディレクトリのユーザ ID で CGI プログラムを 実行するために suEXEC ラッパーを呼びます。

http://httpd.apache.org/docs/2.0/ja/suexec.html#usage

mod_phpにはsuEXECは役に立たない。

phpはCGIでなく、mod_php のモジュール動作する。なのでsuEXECが効かない。mod_perlなどもおなじ。では、モジュール動作するPHPはどうなるのか。

suPHPがある。

suphp というモジュールもあるらしい

でもそれって、拡張子指定するのとドコが違うの?

→ 最終的に設定で、phpのハンドラを変える設定をします。つまりsuphpにaddhandlerします。

メリット/デメリット

メリット:ユーザごとのphpのリソース使用状況がわかる。(mod_phpだとapacheのプロセスの中に含まれてしまうので、個別に調べるの難しい)
デメリット:cgiなのでmodule版と比較するとパフォーマンス落ちる

http://d.hatena.ne.jp/hogem/20090809/1249801747

とのこと。

個人的感想

或る程度余裕があるのが最近なので、

  1. ユーザー毎にApache起動させても良いんじゃないの?メモリたくさんあれば。
  2. サーバー毎に何人収容するかって問題でもあるでしょうし。
  3. Xen/KVMかOpenVZで分けちゃうのも手だよね。
  4. 管理面やユーザースキルの問題とトレードオフ