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.ascDann 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.rpmWenn Sie Warnungen wie diese erhalten:
warnung: Benutzer mockbuild existiert nicht - verwende rootkö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.gzWir 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.gzWenn 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.sigWenn 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.specFü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.specJe 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-develDanach führen Sie rpmbuild erneut aus:
rpmbuild -ba php.specDies 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.tgzAls nächstes überprüfen wir erneut die MD5-Prüfziffer und die Signatur:
md5sum suhosin-0.9.20.tgzwget http://www.hardened-php.net/suhosin/_media/suhosin-0.9.20.tgz.sig
gpg suhosin-0.9.20.tgz.sigDann 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 installUm 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 restartJetzt 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
- Suhosin: http://www.hardened-php.net/suhosin/index.html
- PHP: http://www.php.net
- CentOS: http://www.centos.org
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.