□Apache2のsuexecの再構築
PHP全盛とはいえ、Apacheのsuexecはまだまだ使うのに、とにかく制限が多い。
判って使うのだから好きなようにさせてくれ、と言うわけでソースをいじる必要がある。
・一ユーザーで最大実行できるCGIを含めたプロセス数を10とする
・../で遡っても実行したい(ちと危険だが…)
・DocumentRoot以外でもCGIを実行したい(これの需要は大きいだろうな)
・ファイルの所有者とかが違っても実行したい(これも需要は結構…)
と言うパッチを当てる。
ターゲットはVineLinux5.1に入れてるApache2。
もう少しスマートな再構築方法があるかもしれないけど、できればいい。
まずはapache2のソースを取ってきて、再ビルドできるようにする。
apt-get source apache2 rpmbuild --rebuild apache2-2.2.14-7vl5.src.rpm
とすると、いくつかの開発環境がないという。
apt-get -y install pcre-devel sqlite3-devel
インストールが終わったら
rpmbuild --rebuild apache2-2.2.14-7vl5.src.rpm
としてきちんと正常終了する事を確認。
そしたら、改めて suexec関連を変更するために、src.rpmを展開
rpmbuild --recompile apache2-2.2.14-7vl5.src.rpm
そしたら、ソース本体を移動してsuexecがらみを書き換えてしまう
cp /usr/src/vine/SOURCES/httpd-2.2.14.tar.bz2 /usr/src/package/ cd /usr/src/ tar xvjf package/httpd-2.2.14.tar.bz2 cd /usr/src/httpd-2.2.14/support
と、ソースを展開して suexec のあるところまで降りたら
wget http://linux.yebisu.jp/suexec.patch patch -p0 < suexec.patch
としてパッチを当てて、ソース(tarボール)を作り直します。
cd /usr/src/ tar cpvjf httpd-2.2.14.tar.bz2 httpd-2.2.14/
できたら、元に戻して
cp /usr/src/httpd-2.2.14.tar.bz2 /usr/src/vine/SOURCES/httpd-2.2.14.tar.bz2
新しいsuexec込みで再ビルドします。
rpmbuild -ba /usr/src/vine/SPECS/apache2-vl.spec
として、
:
:
> 書き込み完了: /usr/src/vine/SRPMS/apache2-2.2.14-7vl5.src.rpm
> 書き込み完了: /usr/src/vine/RPMS/x86_64/apache2-2.2.14-7vl5.x86_64.rpm
> 書き込み完了: /usr/src/vine/RPMS/x86_64/apache2-devel-2.2.14-7vl5.x86_64.rpm
> 書き込み完了: /usr/src/vine/RPMS/x86_64/apache2-manual-2.2.14-7vl5.x86_64.rpm
> 書き込み完了: /usr/src/vine/RPMS/x86_64/mod_ssl-apache2-2.2.14-7vl5.x86_64.rpm
:
:
と言う感じで新たにrpmができたらめでたしめでたし。
後はここからsuexecだけを吸い出してもいいし、再インストールしてもいい。
rm -f /tmp/apache2 cd /tmp/ mkdir ./apache2 cd ./apache2 rpm2cpio /usr/src/vine/RPMS/x86_64/apache2-2.2.14-7vl5.x86_64.rpm | cpio -id
そしたら
./usr/lib64/apache2/suexec
にあるので、元のを避けてコピーすればOK。
mv /usr/lib64/apache2/suexec /usr/lib64/apache2/suexec.domain cp -a ./usr/lib64/apache2/suexec /usr/lib64/apache2/suexec chmod 4755 /usr/lib64/apache2/suexec
ただし!!GIDが500よりちいさいとCGIが動かない。
> # /usr/lib64/apache2/suexec -V
> -D AP_DOC_ROOT=”/var/www”
> -D AP_GID_MIN=500
> -D AP_HTTPD_USER=”apache”
> -D AP_LOG_EXEC=”/var/log/apache2/suexec.log”
> -D AP_SAFE_PATH=”/usr/local/bin:/usr/bin:/bin”
> -D AP_UID_MIN=500
> -D AP_USERDIR_SUFFIX=”public_html”
というように、最小UID、GIDともに500としているため。
オウンリスクを忘れずに。