PHP セキュリティ · 1 min read · Oct 25, 2025

CentOS 5.0でSuhosinを使用してPHP5を強化する方法 - ページ2

4 Suhosinのインストール

Suhosinはここからダウンロードできます: http://www.hardened-php.net/suhosin/download.html

Suhosinパッチをインストールするには、ソースからPHP5を再コンパイルする必要がありますが、CentOS 5.0のPHP5.src.rpmパッケージを使用します(rpmbuildコマンドを使用)ので、新しいPHP5.rpmパッケージ(Suhosin付き)を取得してインストールできます。これにより、rpmbuildがこれを処理するため、正しいPHP5の構成オプションについて心配する必要がありません。

しかし、まずHardened-PHPプロジェクトのリリース署名鍵のコピーを取得し、GNU Privacy Guardのキーチェーンにインポートします:

wget http://www.hardened-php.net/hardened-php-signature-key.asc  
gpg --import < hardened-php-signature-key.asc

次に、CentOS 5.0のミラーからPHP5.src.rpmパッケージ(この例では現在インストールされているPHPバージョン5.1.6に適したもの)を/usr/srcにダウンロードしてインストールします:

cd /usr/src  
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.0/updates/SRPMS/php-5.1.6-12.el5.src.rpm

(上記のように、私はCentOSミラーのupdates/ディレクトリから最新のPHP5.src.rpmをダウンロードします。もちろん、os/ディレクトリから元の.src.rpmをダウンロードすることもできます。例えば、http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.0/os/SRPMS/php-5.1.6-5.el5.src.rpm。そうする場合は、このチュートリアルの残りの部分でファイル名を調整する必要があります。)

rpm -ivh php-5.1.6-12.el5.src.rpm

このような警告が表示された場合:

warning: user mockbuild does not exist - using root

無視して構いません。

次に、PHPバージョンに適したSuhosinパッチを/usr/src/redhat/SOURCESにダウンロードします(Suhosinのダウンロードページで利用可能なすべてのパッチを見つけることができます):

cd /usr/src/redhat/SOURCES  
wget http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.1.6-0.9.6.patch.gz

ダウンロードしたパッチのMD5サムがSuhosinのダウンロードページに公開されているものと同じであることを確認します:

md5sum suhosin-patch-5.1.6-0.9.6.patch.gz

MD5サムが問題なければ、デジタル署名を次のように確認できます:

wget http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.1.6-0.9.6.patch.gz.sig  
gpg suhosin-patch-5.1.6-0.9.6.patch.gz.sig

出力にこの行が表示された場合:

gpg: Good signature from "Hardened-PHP Signature Key"

ダウンロードしたパッチは問題ありませんので、続行できます。

次に、Suhosinパッチを解凍し、CentOSの命名規則に合うように名前を変更し、/usr/src/redhat/SPECS/php.specファイルを修正して、rpmbuildコマンドがPHP5を再構築する際にSuhosinパッチを含める必要があることを知っているようにします:

gunzip suhosin-patch-5.1.6-0.9.6.patch.gz  
mv suhosin-patch-5.1.6-0.9.6.patch php-5.1.6-suhosin.patch  
cd /usr/src/redhat/SPECS/  
vi php.spec

すべてのパッチがリストされているスタンザにPatch0: php-5.1.6-suhosin.patchを追加し、同じスタンザの行Patch14: php-5.1.6-ecalloc.patchをコメントアウトします(ecallocパッチはSuhosinと競合します)。次に、%setup -qスタンザに%patch0 -p1 -b .suhosinを追加し、同じスタンザの行%patch14 -p1 -b .ecallocをコメントアウトします:

| [...] Source51: php.ini Patch0: php-5.1.6-suhosin.patch Patch1: php-5.1.4-gnusrc.patch Patch2: php-5.1.4-warnings.patch Patch5: php-4.3.3-install.patch Patch6: php-5.0.4-norpath.patch Patch7: php-4.3.2-libtool15.patch Patch13: php-5.0.2-phpize64.patch # Patch14: php-5.1.6-ecalloc.patch [...] %setup -q %patch0 -p1 -b .suhosin %patch1 -p1 -b .gnusrc %patch2 -p1 -b .warnings %patch5 -p1 -b .install %patch6 -p1 -b .norpath %patch7 -p1 -b .libtool15 %patch13 -p1 -b .phpize64 # %patch14 -p1 -b .ecalloc [...] |

これでPHP5を再構築します:

rpmbuild -ba php.spec

インストールされているPHP5モジュールによっては、rpmbuildが新しいパッケージを構築するために必要なパッケージが不足していると不満を言う可能性があります:

[root@server1 SPECS]# rpmbuild -ba php.spec  
cat: /usr/include/httpd/.mmn: No such file or directory  
error: Failed build dependencies:  
        aspell-devel >= 0.50.0 is needed by php-5.1.6-12.i386  
        httpd-devel >= 2.0.46-1 is needed by php-5.1.6-12.i386  
        libjpeg-devel is needed by php-5.1.6-12.i386  
        libpng-devel is needed by php-5.1.6-12.i386  
        pcre-devel >= 4.5 is needed by php-5.1.6-12.i386  
        libc-client-devel is needed by php-5.1.6-12.i386  
        mysql-devel >= 4.1.0 is needed by php-5.1.6-12.i386  
        postgresql-devel is needed by php-5.1.6-12.i386  
        unixODBC-devel is needed by php-5.1.6-12.i386  
        net-snmp-devel is needed by php-5.1.6-12.i386  
        gd-devel is needed by php-5.1.6-12.i386  
        freetype-devel is needed by php-5.1.6-12.i386  
[root@server1 SPECS]#

このようなエラーが表示された場合は、欠落しているパッケージをインストールします。例えば、次のように:

yum install aspell-devel httpd-devel libjpeg-devel libpng-devel pcre-devel libc-client-devel mysql-devel postgresql-devel unixODBC-devel net-snmp-devel gd-devel freetype-devel

その後、再度rpmbuildを実行します:

rpmbuild -ba php.spec

これでPHP5とすべてのインストールされたPHP5モジュールが再コンパイルされ、/usr/src/redhat/RPMS/i386ディレクトリに新しい.rpmパッケージが作成されます。これには時間がかかる場合があるので、しばらくお待ちください。

その後、新しいPHP5パッケージを次のようにインストールできます:

cd /usr/src/redhat/RPMS/i386  
rpm -Uvh --force php-*

これでSuhosinパッチは完了です。

次に、Suhosin PHP拡張をビルドします。まず、/usr/srcディレクトリにそのソースをダウンロードします(Suhosin拡張のソースはSuhosinのダウンロードページで入手可能です):

cd /usr/src  
wget http://www.hardened-php.net/suhosin/_media/suhosin-0.9.20.tgz

次に、MD5サムと署名を再確認します:

md5sum suhosin-0.9.20.tgz
wget http://www.hardened-php.net/suhosin/_media/suhosin-0.9.20.tgz.sig  
gpg suhosin-0.9.20.tgz.sig

次に、ソースを解凍し、拡張を次のようにビルドします:

tar xvfz suhosin-0.9.20.tgz  
cd suhosin-0.9.20  
phpize  
./configure  
make  
make install

Suhosin拡張を有効にするには、/etc/php.d/suhosin.iniファイルを作成し、その中にextension=suhosin.soという行を追加します:

vi /etc/php.d/suhosin.ini

| extension=suhosin.so |

残るのはApache2を再起動するだけです:

/etc/init.d/httpd restart

ブラウザで再度info.phpページを呼び出します(例: http://192.168.0.100/info.php)。すべてが正常であれば、ページの2か所にSuhosinが表示されるはずです:

これで完了です。必要に応じてSuhosinを構成できます(http://www.hardened-php.net/suhosin/configuration.htmlを参照)。ただし、Suhosinはデフォルトの構成でそのまま動作するため、自分が何をしているのかを理解していることを確認してください。

5 リンク

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。