Apacheでsuexec
Apacheから呼び出されるCGIで他のホストのファイルを削除するというリクエスト。sshでrmを叩けばいいんだけど、当該仮想ホストはnobody:nobodyで動作しているため鍵の交換がうまくいかない。
そこでsuexecを利用して他のユーザでcgiを動作させる。
再configure
以下のオプションをつけてapache2.4.3を再conigure,make,install
$ ./configure --enable-suexec 以下略 $ make # make install
CGIが入っているディレクトリのオーナを変更
当該CGIが入っているディレクトリ以下のオーナを変更。以下で指定するsuexecする後のuserid,groupidはデフォルトでは500以上でないとNGです。それ以下の場合はconfigureで指定。
以下の例では user/group = hoge/hoge で実行する場合です。
# chown -R hoge:hoge /usr/local/apache2/htdocs/hogehoge # chmod 755 /usr/local/apache2/htdocs/hogehoge
httpd.confを編集後、apacheを再起動して確認。
httpd.confに以下の行を追加。
LoadModule suexec_module modules/mod_suexec.so
また当該仮想ホストの設定中に以下の一行を追加。
SuexecUserGroup hoge hoge
apacheを再起動して確認。
# /usr/local/apache2/bin/apachectl stop # /usr/local/apache2/bin/apachectl start
で、確認すると500エラー。
suexec_logを確認すると以下の一行。
[2012-08-28 17:20:00]: user mismatch (nobody instead of www)
ああ、callerを設定していなかった。suexecを叩くのはこの環境ではnobodyですからconfigure時に--with-suexec-caller=nobodyをつけないと。ということで再configure。
再conigureする。
$ ./configure --enable-suexec --with-suexec-caller=nobody (以下略) $ make # make install