suEXEC

この章は問題の解決と言うより仕組みの解説だ。 仕組みなんてどうでもいいと思うのであれば、 パーミッションに進め。

また、Linuxにおけるファイルのアクセス制限の知識が必要だ。

suEXECとは?

XREAではsuEXECと言う機能を採用している。 僕の口から言っても正しいかどうかはわからないので、 詳しくはApacheのマニュアルを参考にしろ。

簡単に言うと、CGI及びSSIの実行を そのCGI(SSI)のファイルのオーナーがしているように見せかけるというものだ。 もっとわかりやすく言うと、SUIDビットが立っているかのように振る舞う。

suEXECで何が変わるのか?

面倒なのでCGIの実行時のみ説明する。 SSIも同様と思われる。

suEXECを使わないとき

実行するユーザー

Apacheを実行しているユーザー。 通常はapacheと言うユーザーか、nobodyと言うユーザー。 nobodyは誰でもないユーザーだが、マニュアルではnobodyで実行する事をお勧めしていない。

実行に必要な最低限のパーミッション

001

書き込みに必要な最低限のパーミッション

002

読み込みに必要な最低限のパーミッション

004

ファイルを作成及び削除する可能性があるディレクトリのパーミッション

002(007)

ファイルのオーナーやグループとは異なる第三者である。

suEXECを使ったとき

実行するユーザー

CGIファイルのオーナー。

実行に必要な最低限のパーミッション

100

書き込みに必要な最低限のパーミッション

200

読み込みに必要な最低限のパーミッション

400

ファイルを作成及び削除する可能性があるディレクトリのパーミッション

200(700)

CGIの実行者がCGIのオーナーと同じになる。

suEXECの利点と欠点

ISPでは一つのサーバに複数の異なる人物がサイトを持つことになる。 これはxreaでも例外ではない。 その場合、CGIの実行ファイルやデータファイル等は、 そのファイルのオーナー以外から、読み込みや書き込みされることは好ましくない。 もし、サーバ内に一人の悪意あるユーザーがいるとすれば、 隠したいログデータを見られたり、破壊されたりする恐れが生じる。

Linuxではファイルのアクセス制限によって、 そのような悪意あるユーザーが 他のユーザーのファイルに対して破壊活動が行えないように出来る。 しかし、suEXECを使用しない場合は、 データファイル等は誰もが読み書きできるような状態にしなければならなくなる。 自分のディレクトリに、 666や777と言ったファイルが存在するのは何としても避けたいのだが。

そこで、suEXECの登場である。 CGI関連のファイルは700または600のままで実行が可能となる。 これによって、同じサーバ内の悪意あるユーザーからの攻撃を回避できる。 出来れば全てのISPに求めるべき機能であるが、suEXECの複雑さからか、 採用しているISPは少ない。

その他の利点としては、隠したいデータファイルを完全に隠匿することが出来る事だ。 今までは隠したいデータファイルをCGIとして必ず実行するような形式で、 ネット上から隠していたが、これは賢い方法とは言えない。 だが、suEXECではデータファイルを600にすることが出来る。。 600のファイルはファイルのオーナーとroot以外は決してみることは出来ない。

欠点はほとんど無い。 あるとすれば、CGI配布サイトの解説が全くもって役に立たないことだろう。 xreaは初心者向けではないのだから、そこら辺は我慢して貰うしかない。