Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □Apache2のsuexecの再構築

□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としているため。

オウンリスクを忘れずに。

Name of author

Name: admin

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です