PHP Sicherheit · 3 min read · Oct 25, 2025

Wie man PHP5 mit Suhosin auf Fedora 7 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 dafür das Fedora 7 PHP5.src.rpm-Paket verwenden (mit dem Befehl rpmbuild), damit wir neue PHP5.rpm-Pakete (mit Suhosin) erhalten, die wir installieren können. So müssen wir uns keine Gedanken über die richtigen PHP5-Konfigurationsoptionen machen, da rpmbuild sich darum kümmert.

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 derzeit installierten PHP-Version, 5.2.2 in diesem Beispiel, passt) von einem Fedora 7-Mirror nach /usr/src herunter und installieren es:

cd /usr/src  
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/fedora/linux/releases/7/Fedora/source/SRPMS/php-5.2.2-3.src.rpm  
rpm -ivh php-5.2.2-3.src.rpm

Wenn Sie Warnungen wie diese erhalten:

warnung: Gruppe kojibuilder existiert nicht - verwende root

können Sie sie 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.2.2-0.9.6.2.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.2.2-0.9.6.2.patch.gz

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

wget http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.2.2-0.9.6.2.patch.gz.sig  
gpg suhosin-patch-5.2.2-0.9.6.2.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 Fedora passt, und ändern die Datei /usr/src/redhat/SPECS/php.spec, damit der Befehl rpmbuild weiß, dass er den Suhosin-Patch einfügen muss, wenn er PHP5 neu aufbaut:

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

Fügen Sie Patch0: php-5.2.2-suhosin.patch zu dem Abschnitt hinzu, in dem alle Patches aufgelistet sind, und %patch0 -p1 -b .suhosin zum %setup -q Abschnitt:

| [...] Source3: macros.php Patch0: php-5.2.2-suhosin.patch Patch1: php-5.1.4-gnusrc.patch [...] %setup -q %patch0 -p1 -b .suhosin %patch1 -p1 -b .gnusrc [...] |

Jetzt bauen wir PHP5 neu:

rpmbuild -ba php.spec

Je nachdem, welche PHP5-Module Sie installiert haben, wird rpmbuild höchstwahrscheinlich ü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: Keine solche Datei oder Verzeichnis  
Fehler: Fehlende Build-Abhängigkeiten:  
        aspell-devel >= 0.50.0 wird von php-5.2.2-3.i386 benötigt  
        httpd-devel >= 2.0.46-1 wird von php-5.2.2-3.i386 benötigt  
        pcre-devel >= 4.5 wird von php-5.2.2-3.i386 benötigt  
        uw-imap-devel wird von php-5.2.2-3.i386 benötigt  
        mysql-devel >= 4.1.0 wird von php-5.2.2-3.i386 benötigt  
        postgresql-devel wird von php-5.2.2-3.i386 benötigt  
        unixODBC-devel wird von php-5.2.2-3.i386 benötigt  
        net-snmp-devel wird von php-5.2.2-3.i386 benötigt  
        libxslt-devel >= 1.0.18-1 wird von php-5.2.2-3.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 pcre-devel uw-imap-devel mysql-devel postgresql-devel unixODBC-devel net-snmp-devel libxslt-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 nach /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 wie folgt:

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.