Wie sichert man PHP5 mit Suhosin unter Debian Etch und Ubuntu - Seite 2

4 Installieren von Suhosin

Zuerst installiere ich jetzt die Suhosin-PHP-Erweiterung, die als Paket in den Debian-Etch und Ubuntu-Speichern abrufbar ist:

apt-get install php5-suhosin

Weiter geht es mit der Patch-Installation. Um das Patch zu installieren, muss man PHP5 auf dem System rekompilieren.Glücklicherweise gibt es einen sehr einfachen Weg: Man lädt das PHP5-Quelltextpaket aus dem Debian/Ubuntu- Speicher. Aus diesem Paket wurde die momentane PHP5-Installation kompiliert. Dann wird der Suhosin-Patch auf den Quelltext angewendet und erzeugt ein neues PHP5.deb -Paket mit dpkg-buildpackage. Vorteil: Jetzt muss man sich keine Gedanken mehr um die richtigen PHP5-Konfigurationsoptionen machen und man bleibt mit der Apt-Paketdatenbank synchronisiert.

Zunächst installiert man alles, um PHP5 vom Quelltext zu kompilieren:

apt-get install dpkg-dev build-essential

Dann geht man in das /usr/src Verzeichnis und lädt die PHP5-Quelltexte herunter:

cd /usr/src
apt-get source php5

Nun installiert man den Signaturschlüssel des Hardened-PHP-Projekts:

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

Nun geht man auf http://www.hardened-php.net/suhosin/download.html und wählt das Suhosin-Patch, das zu der PHP-Version passt. In meiner Anleitung ist die PHP-Version 5.2.0-8+etch1, deshalb lade ich nun das Patch für PHP 5.2.0 herunter:

wget http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.2.0-0.9.6.2.patch.gz

Jetzt entpackt man das Patch und wendet es auf den PHP-Quelltext an:

gunzip suhosin-patch-5.2.0-0.9.6.2.patch.gz
cd php5-5.2.0
patch -p 1 -i ../suhosin-patch-5.2.0-0.9.6.2.patch

Nachdem das Patch ohne Fehler angewendet wurde, bildet man die neuen PHP5.deb-Pakete:

dpkg-buildpackage

Je nachdem welche PHP5-Module man installiert hat wird dpkg-buildpackage höchstwahrscheinlich melden, dass Pakte fehlen, die für die neu zu erstellenden Pakete für die vielfältigen PHP-Module benötigt werden:

server1:/usr/src/php5-5.2.0# dpkg-buildpackage
dpkg-buildpackage: source package is php5
dpkg-buildpackage: source version is 5.2.0-8+etch1
dpkg-buildpackage: source changed by sean finney <seanius@debian.org>
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 5.2.0-8+etch1
dpkg-checkbuilddeps: Unmet build dependencies: apache-dev (>= 1.3.23) apache2-prefork-dev (>= 2.0.53-3) bison chrpath debhelper (>= 3) firebird2-dev flex (>= 2.5.4) freetds-dev libapr1-dev (>= 1.2.7-8) libbz2-dev (>= 1.0.0) libc-client-dev libcurl3-openssl-dev | libcurl3-dev libdb4.4-dev libexpat1-dev (>= 1.95.2-2.1) libfreetype6-dev libgcrypt11-dev libgd2-xpm-dev (>= 2.0.28-3) libjpeg62-dev libkrb5-dev libldap2-dev libmcrypt-dev libmhash-dev (>= 0.8.8) libmysqlclient15-dev | libmysqlclient12-dev libncurses5-dev libpam0g-dev libpcre3-dev (>= 6.6) libpng12-dev libpq-dev | postgresql-dev libpspell-dev librecode-dev libsnmp9-dev | libsnmp-dev libsqlite0-dev libt1-dev libtidy-dev libwrap0-dev libxmltok1-dev libxml2-dev (>= 2.4.14) libxslt1-dev (>= 1.0.18) re2c unixodbc-dev
dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: (Use -d flag to override.)

Sieht man einen Fehler wie diesen, installiert man einfach die fehlenden Pakete (ein |Symbol meint OR, z.B. package1 | package2 bedeutet, dass man entweder package1 oder package2 installieren kann), z.B. so:

apt-get install apache-dev apache2-prefork-dev bison chrpath debhelper firebird2-dev flex freetds-dev libapr1-dev libbz2-dev libc-client-dev libcurl3-dev libdb4.4-dev libexpat1-dev libfreetype6-dev libgcrypt11-dev libgd2-xpm-dev libjpeg62-dev libkrb5-dev libldap2-dev libmcrypt-dev libmhash-dev libmysqlclient15-dev libncurses5-dev libpam0g-dev libpcre3-dev libpng12-dev libpq-dev libpspell-dev librecode-dev libsnmp9-dev libsqlite0-dev libt1-dev libtidy-dev libwrap0-dev libxmltok1-dev libxml2-dev libxslt1-dev re2c unixodbc-dev

Jetzt wieder dpkg-buildpackage ausführen:

dpkg-buildpackage

Dieser Befehl sollte nun wieder PHP5 und alle installierten PHP5-Module kompilieren und neue .deb Pakete im /usr/src Verzeichnis erstellen. Dies kann einige Zeit dauern - man braucht etwas Geduld. Möglicherweise erhält man am Ende einige Warnungen über Signaturen, die man aber ignorieren kann.

Danach geht man ins /usr/src Verzeichnis:

cd /usr/src
ls -l

Die Ausgabe könnte so aussehen:

server1:/usr/src# ls -l
total 21792
-rw-r--r-- 1 root src 1351 2005-07-05 13:02 hardened-php-signature-key.asc
-rw-r--r-- 1 root src 2419598 2007-03-29 16:37 libapache2-mod-php5_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 2418714 2007-03-29 16:37 libapache-mod-php5_5.2.0-8+etch1_i386.deb
drwxr-xr-x 20 root root 4096 2007-03-29 16:37 php5-5.2.0
-rw-r--r-- 1 root src 1044 2007-03-29 16:37 php5_5.2.0-8+etch1_all.deb
-rw-r--r-- 1 root src 124228 2007-03-29 16:02 php5_5.2.0-8+etch1.diff.gz
-rw-r--r-- 1 root src 1739 2007-03-29 16:02 php5_5.2.0-8+etch1.dsc
-rw-r--r-- 1 root src 5689 2007-03-29 16:38 php5_5.2.0-8+etch1_i386.changes
-rw-r--r-- 1 root src 8583491 2006-11-07 13:34 php5_5.2.0.orig.tar.gz
-rw-r--r-- 1 root src 4771850 2007-03-29 16:37 php5-cgi_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 2405518 2007-03-29 16:37 php5-cli_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 215058 2007-03-29 16:37 php5-common_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 24464 2007-03-29 16:37 php5-curl_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 350954 2007-03-29 16:37 php5-dev_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 33416 2007-03-29 16:37 php5-gd_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 34496 2007-03-29 16:37 php5-imap_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 44322 2007-03-29 16:37 php5-interbase_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 17232 2007-03-29 16:37 php5-ldap_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 12822 2007-03-29 16:37 php5-mcrypt_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 5046 2007-03-29 16:37 php5-mhash_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 64902 2007-03-29 16:37 php5-mysql_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 33410 2007-03-29 16:37 php5-odbc_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 50652 2007-03-29 16:37 php5-pgsql_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 8628 2007-03-29 16:37 php5-pspell_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 4756 2007-03-29 16:37 php5-recode_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 11302 2007-03-29 16:37 php5-snmp_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 34454 2007-03-29 16:37 php5-sqlite_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 18392 2007-03-29 16:37 php5-sybase_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 16478 2007-03-29 16:37 php5-tidy_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 36450 2007-03-29 16:37 php5-xmlrpc_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 12260 2007-03-29 16:37 php5-xsl_5.2.0-8+etch1_i386.deb
-rw-r--r-- 1 root src 310194 2007-03-29 16:37 php-pear_5.2.0-8+etch1_all.deb
-rw-r--r-- 1 root src 95588 2007-03-06 10:37 suhosin-patch-5.2.0-0.9.6.2.patch

Jetzt installiert man nahezu alle neuen PHP5 .deb Pakete (man muss die Erstellungszeiten vergleichen, um die neuen Pakete zu identifizieren). Auf die Installation von manchen Paketen kann man verzichten: z.B braucht man weder php5-cgi noch php5-cli, da man mod_php. benutzt Ebensowenig braucht man php-pear und libapache-mod-php5. libapache-mod-php5 ist für die Version Apache 1.3 - in diesem Beispiel wurde Apache 2.2 installiert, d.h. man wählt libapache2-mod-php5.

dpkg -i libapache2-mod-php5_5.2.0-8+etch1_i386.deb php5_5.2.0-8+etch1_all.deb php5-common_5.2.0-8+etch1_i386.deb php5-curl_5.2.0-8+etch1_i386.deb php5-dev_5.2.0-8+etch1_i386.deb php5-gd_5.2.0-8+etch1_i386.deb php5-imap_5.2.0-8+etch1_i386.deb php5-interbase_5.2.0-8+etch1_i386.deb php5-ldap_5.2.0-8+etch1_i386.deb php5-mcrypt_5.2.0-8+etch1_i386.deb php5-mhash_5.2.0-8+etch1_i386.deb php5-mysql_5.2.0-8+etch1_i386.deb php5-odbc_5.2.0-8+etch1_i386.deb php5-pgsql_5.2.0-8+etch1_i386.deb php5-pspell_5.2.0-8+etch1_i386.deb php5-recode_5.2.0-8+etch1_i386.deb php5-snmp_5.2.0-8+etch1_i386.deb php5-sqlite_5.2.0-8+etch1_i386.deb php5-sybase_5.2.0-8+etch1_i386.deb php5-tidy_5.2.0-8+etch1_i386.deb php5-xmlrpc_5.2.0-8+etch1_i386.deb php5-xsl_5.2.0-8+etch1_i386.deb

Der letzte Befehl wird Apache automatisch neu starten, deshalb muss man dies jetzt nicht selbst tun. Jetzt öffnet man wieder die Seite info.php in einem Browser (z.B. http://192.168.0.100/info.php). Wenn alles geklappt hat, sollte man Suhosin jetzt zweimal auf der Seite geöffnet sehen :



Geschafft! Wenn man möchte, kann man Suhosin konfigurieren (siehe http://www.hardened-php.net/suhosin/configuration.html), obwohl Suhosin mit den voreingestellten Konfiguration hervorragend arebiten wird! Deshalb Achtung - man sollte sich sehr sicher sein, wenn man etwas verändert!

5 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte