2002/7/16
バージョン Apache 2.0.39
OS Red Hat Linux 7.2
公式サイト http://httpd.apache.org/

通常、ApacheにおいてCGIプログラムなどは、コンテンツのユーザーとは関係なく、すべて同じApacheの実行ユーザー(デフォルトではnobody)の権限で実行されます。例えば、CGIプログラムからアクセスされるデータファイルはnobodyがアクセスできるような権限設定がされていなければりません。しかし、このような権限設定がされたファイルは、CGIを経由してすべてのユーザーによってアクセス可能になってしまいます。つまり、別のユーザーによってファイルを閲覧されたり、破壊されたりする恐れがあるのです。suEXECは、CGIプログラムなどをApacheの実行ユーザー権限ではなく、それぞれのコンテンツユーザーの権限で実行するためのApacheのモジュールです。

インストール

suEXECはApacheに標準でバンドルされています。しかし、デフォルトのインストールではこの機能は有効になっていません。suEXECを使うには、Apacheを再構築する必要があります。suEXECをを有効にするにはconfigureで多くのオプションを指定する必要があります。特にApache 2.0ではセキュリティ上の理由からか適当なオプション指定ではなかなか動作しなくなったようです。私の環境では次のようなconfigureでインストールできました。

$ tar xvfz httpd-2.0.39.tar.gz

$ cd httpd-2.0.39
$ ./configure --enable-suexec \
--with-suexec-caller=nobody \
--with-suexec-docroot=/home \
--with-suexec-userdir=public_html \
--with-suexec-uidmin=500 \
--with-suexec-gidmin=500 \
--with-suexec-bin=/usr/local/apache2/bin/suexec

$ make
$ su

# make isntall

--with-suexec-callerにはhttpd.confのUserで指定しているユーザー名と同じものを指定します。--with-suexec-uidminと--with-suexec-gidminには、それぞれsuEXECで実行するユーザーの最も小さいUIDとGIDを指定します。

Apacheを起動して、正しく動作しているかどうか確認するには、ユーザーのpublic_htmlの下で次のようなCGIプログラムを実行してみると良いでしょう。正しく動作すれば、Apacheの実行ユーザー(nobody)ではない、一般ユーザーのユーザー名が表示されるはずです。なお、public_html下でCGIプログラムを実行するには、httpd.confや.htaccessを適切に設定する必要があります。

#!/usr/bin/perl

print "Content-type: text/plain\n\n";
print `whoami`;