suEXEC

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

また、Linux(またはパクられ元のUNIX)における ファイルのアクセス制限の知識が必要だ。

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は少ない。 *1

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

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

*1suEXECはデフォルトで使用可能になっていない。

*2本当は欠点がある。 任意のコードを実行できてしまうCGIを置いた場合、 そのアカウントが扱える全てのファイルを操作できてしまうことだ。 しかし、悪いのはそんなCGIを置いたその人の責任なのでsuEXECのせいにするのは 見当違いだろう。