next up previous contents
Next: 12.6 演習課題 Up: 12.5 CGIとセキュリティ Previous: 12.5.2 ユーザのCGIの実行

12.5.3 suEXEC

ApacheではユーザーのCGIの危険制にかんがみ、suEXECというプログラムが オプションで用意されています。
通常ユーザー所有のCGIプログラムであっても、WWWサーバーの権限(例えばnobody)で 動くわけですが、suEXECはUNIXのsetuid/setgidの仕組みを使って、ユーザーのCGIの 所有者の権限で動かします。
更にCGIプログラムを動かす前にいくつかのセキュリティチェックをして 「suEXEC セキュリティモデル」に反するCGIは実行させない"wrapper"の役割を 果たしています。
このモデルとは http://www.apache.org/docs/suexec.html によると次のようなものである。
1.
suEXECが適切な個数の引数で呼ばれる。
2.
suEXECを実行するユーザーはシステムの正規ユーザーである。
3.
このユーザーはsuEXECを実行する事を許されているApacheサーバーのユーザーである。
4.
CGIプログラムはWeb空間を飛び出るような安全でない参照を含まない。
5.
CGIプログラムのユーザー名は存在する。
6.
CGIプログラムのグループ名は存在する。
7.
CGIプログラムのユーザーはスーパーユーザーでない。
8.
CGIプログラムのユーザーIDは許可された最小のUIDを越える。
9.
CGIプログラムのグループはスーパーユーザー・グループでない。
10.
CGIプログラムのグループIDは許可された最小のGIDを越える。
11.
suEXECが問題なくCGIプログラムのユーザーとグループになれる。
12.
CGIプログラムが置かれるディレクトリが存在する。
13.
そのディレクトリはWeb空間の中にある。
14.
そのディレクトリは他人の書き込み可ではない。
15.
CGIプログラムが存在する。
16.
CGIプログラムが他人の書き込み可ではない。
17.
CGIプログラムがsetuid/setgidでない。
18.
CGIプログラムとsuEXECのユーザーとグループは同じでない。
19.
プロセスは安全な実行PATHと安全な環境変数を持つ。
20.
suEXECが問題なくCGIプログラムになれて実行できる。

この機能を使用するためにはApacheの再コンパイルが必要です。 また以下のような設計を変更する場合も再コンパイルが必要です。

1.
apache_1.3.1ディレクトリで例えば以下のようにconfigureします。
# ./configure --prefix=/pub/usr/local/apache \
                   --enable-suexec \
                   --suexec-caller=www-admin \
                   --suexec-userdir=public_html
                   --suexec-uidmin=1000 \
                   --suexec-gidmin=1000 \
                   --suexec-safepath="/bin:/usr/bin"
suEXEC のオプションは以下の通り。
 --enable-suexec        suEXEC 可
 --suexec-caller=NAME   User[www]
 --suexec-userdir=DIR   UserDir [public_html]
 --suexec-uidmin=UID    許可する最小の UID [100]
 --suexec-gidmin=GID    許可する最小の GID [100]
 --suexec-safepath=PATH  安全な実行PATH [/usr/local/bin:/usr/bin:/bin]

2.
apache_1.3.1ディレクトリに出来るMakefileにはバグがあるので 次の部分を
                      -DSAFE_PATH=\"$(suexec_safepath)\" \
                ' \
以下のように直します。
 
                      -DSAFE_PATH=\"$(suexec_safepath)\" ' \

3.
# make
# make install



Noriyo Kanayama