'02.7.3 ('05.4.28更新)
suEXECをインストールするだけなら、Apacheの再インストールまでは必要ありません。あるとしたら、suEXECを置く場所の変更をする場合です (--sbindirオプションで指定)。Apacheのmakeまでは必要ですが。
suEXECをインストールするには2通りあって、suEXECの設定オプション付きでconfigureしてApacheと同時にmakeする方法と、オプション無しでApacheのconfigureとmakeを行い、suexec.hで必要事項の設定をしてから「% make suexec」する方法があります。ここでは前者の方法を紹介します。
(自己責任で行ってください。suEXECの設定は、意味を理解しないで行うと危険です。ここで紹介する方法に問題が無いとの保証もできません)
suEXECだけ入れるなら、OS Xに入ってるバージョンにあわせます。ソースのアーカイブは「JAPAN APACHE USERS GROUP」等からダウンロード。(以下は1.3.26の場合)
% tar xzf apache_1.3.26.tar.gz
% cd apache_1.3.26
suEXEC設定オプションをつけてconfigureします。Apacheのインストールまでするなら、suEXEC以外のオプションも必要ですね。(コピーし易いよう改行無しで書いてあります。uidmin=502は暫定です。オプション解説参照のこと)
% ./configure --enable-suexec --suexec-docroot=/Library/WebServer/Documents --suexec-userdir=Sites --suexec-uidmin=502 --suexec-gidmin=20
デフォルトのままでいいオプションもありますが、全てのオプションの解説。 ([ ]内はOS Xでconfigureした場合のデフォルト)
設定内容の確認には、「--layout」を追加してconfigureします。その場合、configureそのものは行われません。
% make
Apacheの上書きインストールなら、次に「% make install」しておしまい。しかし、われわれはsuEXECだけをインストールするのであった。
apache_1.3.26/src/support/suexecを/usr/sbinに入れます。
% sudo cp src/support/suexec /usr/sbin
所有者rootでSUIDビットを立てます。つまり、ユーザwwwがrootとしてsuEXECを起動し、CGIのユーザとグループを所有者と同じに変更して動かします。
% cd /usr/sbin % sudo chmod 4711 suexec (% sudo chown root suexec)
sudoでコピーしたので、ユーザは変更せずともrootのはずです。パーミッションを変えると以下のようになります。
-rws--x--x 1 root wheel 18820 Jul 3 18:04 suexec
一番下の行に「suexec: enabled」が出ればOK
% httpd -l Compiled-in modules: http_core.c mod_so.c suexec: enabled; valid wrapper /usr/sbin/suexec
Apacheをkillして再起動。HUPやUSR1による再起動ではだめ。
つまり「apachectl restart」「apachectl graceful」は使えない。
% sudo apachectl stop % sudo apachectl start
これでユーザディレクトリ内のCGIは、オーナー権限で動くようになりますが、/Library/WebServer/CGI-Executables 内のCGIは、指定ディレクトリ外なので影響ありません。
suEXECの無効化は、suexecファイルを削除し、Apacheをkillして再起動。
今回は使いませんでしたが、設定内容はsuEXEC設定オプションと同じです。
#define HTTPD_USER "www" #define UID_MIN 500 #define GID_MIN 20 #define USERDIR_SUFFIX "Sites" #define LOG_EXEC "/var/log/httpd/suexec_log" #define DOC_ROOT "/Library/WebServer/Documents" #define SAFE_PATH "/usr/local/bin:/usr/bin:/bin"