Wie sichert man PHP5 mit Suhosin unter Fedora 7

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man PHP5 mit Suhosin auf einem Fedora 7 Server absichern kann. Von der Suhosin-Projektseite: "Suhosin is an advanced protection system for PHP installations that was designed to protect servers and users from known and unknown flaws in PHP applications and the PHP core. Suhosin comes in two independent parts, that can be used separately or in combination. The first part is a small patch against the PHP core, that implements a few low-level protections against bufferoverflows or format string vulnerabilities and the second part is a powerful PHP extension that implements all the other protections."
Diese Anleitung ist ohne jede Garantie und ich möchte an dieser Stelle darauf hinweisen, dass dies hier nicht der einzige Weg ist, ein solches System zu installieren. Es gibt viele Möglichkeiten - ich selbst habe mich für diese entschieden. Ich kann aber nicht garantieren, dass diese Lösung bei jedem funktioniert bzw. für jeden die richtige ist!

1 Vorbemerkung

Für die folgende Installation habe ich habe ich einen Fedora 7 Server mit der IP-Adresse 192.168.0.100 benutzt.

In dieser Anleitung werde ich beide Suhosin-Teile installieren: einen Suhosin-Patch (hierfür muss man PHP5 rekompilieren) und eine Suhosin-PHP-Erweiterung. Möchte man einen Überblick über die Funktionen von Suhosin, empfehle ich folgenden Link: http://www.hardened-php.net/suhosin/a_feature_list.html. Die Funktionen von Suhosin-Patch sind unter Engine Protection (only with patch) aufgelistet - alle anderen Funktionen liefert der zweite Teil, die Suhosin-Erweiterung.

2 Installation von Apache2 und PHP5 (Optional)

Dieses Kapitel ist optional! Wenn man bereits Apache2 und PHP5 installiert hat, kann man direkt im nächsten Kapitel weiterlesen.)

Wenn man Apache2 und PHP5 noch nicht auf dem Server installiert hat, installiert man sie jetzt:

yum install httpd php php-devel

Danach erstellt man die System Startup Links für Apache2 und startet es:

chkconfig --levels 235 httpd on
/etc/init.d/httpd start

Nun hat man PHP5 mit Basisfuntionen auf dem Server. Wenn man besondere PHP5 Module braucht, kann man sie wie folgt suchen:

yum search php

Wähle von der Ausgabe die Module, die Du brauchst und installiere sie wie folgt und starte Apache2 neu:

yum install php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc
/etc/init.d/httpd restart

3 Wie kommt man an wichtige Details zur PHP5 Installation?

Wenn man noch keine virtuellen Hosts in der Apache-Installation eingerichtet hat, erfolgt der Dokumenten-Root von der vorgegebenen Webseite /var/www/html. Ich werde nun eine kleine PHP-Datei (info.php) in das Datenverzeichnis einrichten und in einem Browser aufrufen (wenn man virtuelle Hosts hat, platziert man die PHP-Datei in jedem virtuellen Host, der PHP aktiviert hat). Die Datei wird viele nützliche Details für die PHP-Installation anzeigen, z.B. über die bereits installierte PHP-Version.

vi /var/www/html/info.php

<?php
phpinfo(); ?>
Nun können wir die Datei in einem Browser öffnen (z.B. http://192.168.0.100/info.php):



Wie man sieht, ist diese PHP-Version die 5.2.2. Suhosin wird auf dieser Seite nicht erwähnt, was bedeutet, dass es nicht installiert ist.

4 Installation von Suhosin

Suhosin kann von folgendem Link runter geladen werden http://www.hardened-php.net/suhosin/download.html
Um den Suhosin Patch zu installieren, müssen wir PHP5 von der Quelle rekompilieren, aber wir werden das Fedora 7 PHP5 Packet .src.rpm dafür nehmen (indem wir den Befehl rpmbuild verwenden), damit wir ein neues PHP5 .rpm Packet (in dem Suhosin enthalten ist) erhalten und installieren können. Somit müssen wir uns nicht über die richtigen Konfigurationsotionen von PHP5 Gedanken machen, da rpmbuild dies für uns erledigen wird.

Doch zuerst besorgen wir uns den Signaturschlüssel des Hardened-PHP Projekts und importieren es in unseren GNU Privacy Guard keychain:

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

Dann laden wir das PHP5 .src.rpm Packet (welches zu unserer derzeitigen PHP Version passt, hier: 5.2.2) von dem Fedora 7 Spiegelserver runter auf /usr/src 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

Fehlermeldungen wie diese:

warning: group kojibuilder does not exist - using root

könnnen ignoriert werden.

Als Nächstes laden wir den Suhosin Patch, der zu unserer PHP Version passt, auf /usr/src/redhat/SOURCES runter (alle erhätlichen Patches sind auf der folgenden Seite zu finden Suhosin downloads page):

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

Nun sollten wir überprüfen, ob die MD5 Summe des runter geladenen Patches auch der des Patches auf der veröffentlichten Seite entspricht Suhosin downloads page:

md5sum suhosin-patch-5.2.2-0.9.6.2.patch.gz

Ist die MD5 Summe in Ordnung, 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 man diese Zeile in der Ausgabe sieht:

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

ist mit dem runter geladenen Patch alles in Ordnung und wir können fortfahren.

Nun entpacken wir den Suhosin Patch, bennen ihn so um, dass er in Fedoras Namensystem passt und bearbeiten die Datei /usr/src/redhat/SPECS/php.spec damit durch den rpmbuild Befehl der Suhosin Patch enthalten ist, wenn PHP5 wieder aufgebaut wird:

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

Wir fügen Patch0: php-5.2.2-suhosin.patch der Zeile hinzu, in der alle Patches aufgelistet sind und %patch0 -p1 -b .suhosin zu dieser %setup -q Zeile:

[...]
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 erneuern wir PHP5:

rpmbuild -ba php.spec

Je nachdem welche PHP5 Module Du installiert hast, wird rpmbuild sich höchstwahrscheinlich über fehlenede Packete beschweren, die es braucht, um neue Packete 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: Failed build dependencies:
aspell-devel >= 0.50.0 is needed by php-5.2.2-3.i386
httpd-devel >= 2.0.46-1 is needed by php-5.2.2-3.i386
pcre-devel >= 4.5 is needed by php-5.2.2-3.i386
uw-imap-devel is needed by php-5.2.2-3.i386
mysql-devel >= 4.1.0 is needed by php-5.2.2-3.i386
postgresql-devel is needed by php-5.2.2-3.i386
unixODBC-devel is needed by php-5.2.2-3.i386
net-snmp-devel is needed by php-5.2.2-3.i386
libxslt-devel >= 1.0.18-1 is needed by php-5.2.2-3.i386
[root@server1 SPECS]#

Sieht man so eine Fehlermeldung, installiert man zum Beispiel so die fehlenden Packete:

yum install aspell-devel httpd-devel pcre-devel uw-imap-devel mysql-devel postgresql-devel unixODBC-devel net-snmp-devel libxslt-devel

Lasse danach rpmbuild erneut laufen:

rpmbuild -ba php.spec

Das sollte PHP5 und alle PHP5 Module jetzt erneut kompilieren und neue .rpm Packete im /usr/src/redhat/RPMS/i386 Datenverzeichnis erstellen. Das kann etwas dauern, also übe Dich bitte in Geduld.

Danach können wir die neuen PHP5 Packete wie folgt installieren:

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

Das war's mit dem Suhosin Patch.

Jetzt werden wir die Suhosin PHP Erweiterung erstellen. Zuerst laden wir die Quelltexte in das Verzeichnis /usr/src runter (die Quellen der Suhosin Erweiterung sind hier erhältlich Suhosin downloads page):

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

Als Nächstes überprüfen wir wieder die MD5 Summe und 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 Quelltexte und erstellen 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 setzen die Zeile extension=suhosin.so ein:

vi /etc/php.d/suhosin.ini

extension=suhosin.so
Alles, was jetzt noch zu tun ist, ist Apache2 neu zu starten:

/etc/init.d/httpd restart

Nun öffnen wir unsere info.php Seite erneut im Browser (z.B. http://192.168.0.100/info.php). Wenn alles gut gegangen ist, sollte Suhosin jetzt zweimal auf der Seite erwähnt werden:



Das war's. Wenn Du magst, kannst Du Suhosin konfigurieren (siehe http://www.hardened-php.net/suhosin/configuration.html), obwohl Suhosin hervorragend mit der Standardkonfiguration funktionieren wird. Aslo pass auf, was Du machst.

5 Links

 

 


Copyright © 2007 Falko Timme
All Rights Reserved.

0 Kommentar(e)

Zum Posten von Kommentaren bitte