PHP Sicherheit · 4 min read · Oct 25, 2025

Wie man PHP5 mit Suhosin auf CentOS 5.0 absichert - Seite 2

4 Installation von Suhosin

Suhosin kann hier heruntergeladen werden: http://www.hardened-php.net/suhosin/download.html

Um den Suhosin-Patch zu installieren, müssen wir PHP5 aus den Quellen neu kompilieren, aber wir werden das CentOS 5.0 PHP5.src.rpm-Paket dafür verwenden (unter Verwendung des rpmbuild-Befehls), damit wir neue PHP5.rpm-Pakete (mit Suhosin) erhalten, die wir installieren können. Auf diese Weise müssen wir uns keine Gedanken über die richtigen PHP5-Konfigurationsoptionen machen, da rpmbuild sich darum kümmert.

Aber zuerst holen wir uns eine Kopie des Release-Signaturschlüssels des Hardened-PHP-Projekts und importieren ihn in unseren GNU Privacy Guard-Schlüsselbund:

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

Dann laden wir ein PHP5.src.rpm-Paket (das zu unserer aktuell installierten PHP-Version, 5.1.6 in diesem Beispiel, passt) von einem CentOS 5.0-Mirror nach /usr/src herunter und installieren es:

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

(Wie Sie oben sehen, lade ich das neueste PHP5.src.rpm aus dem updates/-Verzeichnis meines CentOS-Mirrors herunter; natürlich können Sie auch das originale .src.rpm aus dem os/-Verzeichnis herunterladen, z.B. http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.0/os/SRPMS/php-5.1.6-5.el5.src.rpm. Wenn Sie dies tun, müssen Sie die Dateinamen im Rest dieses Tutorials anpassen.)

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

Wenn Sie Warnungen wie diese erhalten:

warnung: Benutzer mockbuild existiert nicht - verwende root

können Sie dies ignorieren.

Als nächstes laden wir den Suhosin-Patch, der zu unserer PHP-Version passt, nach /usr/src/redhat/SOURCES herunter (alle verfügbaren Patches finden Sie auf der Suhosin-Downloadseite):

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

Wir sollten jetzt überprüfen, ob die MD5-Prüfziffer des heruntergeladenen Patches identisch mit der auf der Suhosin-Downloadseite veröffentlichten ist:

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

Wenn die MD5-Prüfziffer in Ordnung ist, können wir die digitale Signatur so überprüfen:

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

Wenn Sie diese Zeile in der Ausgabe sehen:

gpg: Gute Signatur von "Hardened-PHP Signaturschlüssel"

ist alles in Ordnung mit dem heruntergeladenen Patch, und wir können fortfahren.

Jetzt entpacken wir den Suhosin-Patch, benennen ihn um, damit er in das Namensschema von CentOS passt, und ändern die Datei /usr/src/redhat/SPECS/php.spec, damit der rpmbuild-Befehl weiß, dass er den Suhosin-Patch einfügen muss, wenn er PHP5 neu aufbaut:

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

Fügen Sie Patch0: php-5.1.6-suhosin.patch zu dem Abschnitt hinzu, in dem alle Patches aufgelistet sind, und kommentieren Sie die Zeile Patch14: php-5.1.6-ecalloc.patch im selben Abschnitt aus (der ecalloc-Patch steht im Konflikt mit Suhosin), und fügen Sie dann %patch0 -p1 -b .suhosin zum %setup -q Abschnitt hinzu und kommentieren Sie die Zeile %patch14 -p1 -b .ecalloc im selben Abschnitt aus:

| [...] 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 [...] |

Jetzt bauen wir PHP5 neu:

rpmbuild -ba php.spec

Je nachdem, welche PHP5-Module Sie installiert haben, wird rpmbuild wahrscheinlich über fehlende Pakete klagen, die es benötigt, um neue Pakete für die verschiedenen PHP5-Module zu erstellen:

[root@server1 SPECS]# rpmbuild -ba php.spec  
cat: /usr/include/httpd/.mmn: No such file or directory  
error: Fehlgeschlagene Build-Abhängigkeiten:  
        aspell-devel >= 0.50.0 wird von php-5.1.6-12.i386 benötigt  
        httpd-devel >= 2.0.46-1 wird von php-5.1.6-12.i386 benötigt  
        libjpeg-devel wird von php-5.1.6-12.i386 benötigt  
        libpng-devel wird von php-5.1.6-12.i386 benötigt  
        pcre-devel >= 4.5 wird von php-5.1.6-12.i386 benötigt  
        libc-client-devel wird von php-5.1.6-12.i386 benötigt  
        mysql-devel >= 4.1.0 wird von php-5.1.6-12.i386 benötigt  
        postgresql-devel wird von php-5.1.6-12.i386 benötigt  
        unixODBC-devel wird von php-5.1.6-12.i386 benötigt  
        net-snmp-devel wird von php-5.1.6-12.i386 benötigt  
        gd-devel wird von php-5.1.6-12.i386 benötigt  
        freetype-devel wird von php-5.1.6-12.i386 benötigt  
[root@server1 SPECS]#

Wenn Sie einen Fehler wie diesen sehen, installieren Sie die fehlenden Pakete, z.B. so:

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

Danach führen Sie rpmbuild erneut aus:

rpmbuild -ba php.spec

Dies sollte jetzt PHP5 und alle installierten PHP5-Module erneut kompilieren und neue .rpm-Pakete im Verzeichnis /usr/src/redhat/RPMS/i386 erstellen. Dies kann einige Zeit in Anspruch nehmen, also bitte geduldig sein.

Anschließend können wir die neuen PHP5-Pakete wie folgt installieren:

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

Das war’s für den Suhosin-Patch.

Jetzt werden wir die Suhosin-PHP-Erweiterung erstellen. Zuerst laden wir die Quellen in das Verzeichnis /usr/src herunter (die Quellen der Suhosin-Erweiterung sind auf der Suhosin-Downloadseite verfügbar):

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

Als nächstes überprüfen wir erneut die MD5-Prüfziffer und die Signatur:

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

Dann entpacken wir die Quellen und bauen die Erweiterung so:

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

Um die Suhosin-Erweiterung zu aktivieren, erstellen wir die Datei /etc/php.d/suhosin.ini und fügen die Zeile extension=suhosin.so hinzu:

vi /etc/php.d/suhosin.ini

| extension=suhosin.so |

Alles, was jetzt noch zu tun bleibt, ist Apache2 neu zu starten:

/etc/init.d/httpd restart

Jetzt rufen wir unsere info.php-Seite erneut in einem Browser auf (z.B. http://192.168.0.100/info.php). Wenn alles gut gelaufen ist, sollten Sie jetzt Suhosin an zwei Stellen auf der Seite sehen:

Das war’s. Wenn Sie möchten, können Sie Suhosin konfigurieren (siehe http://www.hardened-php.net/suhosin/configuration.html), obwohl Suhosin mit seiner Standardkonfiguration sofort einsatzbereit ist, also stellen Sie sicher, dass Sie wissen, was Sie tun.

5 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.