CGI版PHPはセキュリティ向上に役立つの?

そういえばPHP6からセーフモードが廃止されるそうですね。
PHPをApacheに組み込んで動作させる場合、
何でもかんでもapacheユーザーなどApacheの動作するユーザーで動作する。
まぁそういう意味ではある程度安心と言えますね。
けど、これでいろいろ実験してたのだが、多人数で共有するサーバーでは問題がある。
/home/foo/public_html/foo.txtというのを置いておく、
これはPHPから改変出来るようにと、パーミッションを666としておくわけだ。
ところが、ここで/home/bar/public_html/hack.phpというのを作る。

<?
$fh=fopen('/home/foo/public_html/foo.txt','a') or die('×');
fwrite($fh,'Hack!!') and print('○');
fclose($fh);
?>

すると改変できてしまう。これは困る!!
というわけでこういうことを防ぐためにセーフモードがあるわけだ。
PHPファイルと操作するファイルの所有者が一緒であるか確認するとか、危険な関数の制限とか。
というわけで共有サーバーではよく使われている手段です。


CGIではどうしてるのかという話だが、SuExecという仕組みでやってる。
CGIの実行をあるユーザーで実行すると。
どうもCentOSのApacheでは各ユーザーのpublic_htmlについては各ユーザーで実行させると。
こうなってるらしい。ありがたい話だ。
なのでそれに応じた設定にして欲しいと。
すなわちCGIから読み書きするファイルは他人からアクセス出来るようにしないと。
まぁどうもそういうことらしい。


なんかこれ見てるとPHPとCGIの共存が危険な気がしてきた。
すなわちPHPの各ユーザーの権限で実行するべきではということ。
あくまでもPHPのセーフモードは自主規制とも言うべき内容。
完璧なんてありえない。
その場合考えられるのはFastCGI+CGI版PHP。
一応セーフモードの代替案としてもっとも有力な方法です。
CGIだったらPHPのいちいち起動しなくてもよいので高速というメリットがなくなるのでは?
と思うのだが、どうもFastCGI上でPHPを動作させたときはちょっと都合が違うらしい。
どうもPHPのインタプリタが常駐するらしい。
他はそのCGIのプログラムが常駐するらしい。
と解したが詳細不明。
ただFastCGIでPHPを動かす分にはほとんどmod_php5と事情は変わらないらしい。
きちんと設定をすれば、ただそのユーザー権限で動くPHPになるはず。
これは調べてみる価値がありそうですね。