Im Web gibt es unendlich viele PHP-Programme: Web-Fotogalerien, -Groupware und sogar Applikationen, die direkt auf der grafischen Oberfläche laufen. Den PHP-Interpreter zu installieren und zu konfigurieren, ist manchmal recht aufwändig.
Wer PHP-Programme benutzen will, muss sich zuerst den Interpreter installieren. Je nach gewünschter Konfiguration kommen Anwender aber kaum umhin, PHP aus dem Quellcode zu kompilieren. Außerdem bleiben bei Binärpaketen manche (Security-) Updates auf der Strecke, da die Distributoren nicht so schnell neue Pakete bauen, wie Updates erscheinen. Wer sich trotzdem nicht an den Quellcode wagt, findet eine Anleitung für Suse und Debian in Kasten 1.
Die aktuelle stabile PHP-Version ist 4.3.7 [1]. Version 5 befindet sich noch in der Entwicklung und die meisten Applikationen sind noch für PHP 4 geschrieben. Kasten 2 gibt einige Infos über die Neuerungen von PHP 5. Den Sourcecode der aktuellsten stabilen Version gibt es unter [2] als gepacktes Tar-Archiv. Mit knapp 4 MB ist die Datei nicht allzu groß. Der Befehl tar xzf php-4.3.7.tar.gz beziehungsweise tar xjf php-4.3.7.tar.bz2 entpackt die Sourcen.
Kasten 1: Vorkompilierte Pakete
Die meisten Distributionen bringen bereits alle nötigen Pakete mit, um PHP auf dem Rechner zu installieren. Bei Suse Linux Professional sorgt die Auswahl des Pakets apache2-mod_php4 über Anhängigkeiten für die Installation aller Bibliotheken und Programme (wie Apache 2). Außerdem ist es möglich, die Zusatzmodule von PHP einzeln zu installieren. Suse hat jedes Modul in ein eigenes Paket gesteckt. Die Namen beginnen alle mit php4-. So hat es der Anwender leicht, die nötigen Funktionen auf seinem System zu installieren.
Standardmäßig ist der Apache Webserver bei Suse deaktiviert. In Yast lässt er sich über das Kontrollfeld Netzwerkdienste | HTTP-Server starten. Das PHP-Modul ist bereits aktiviert. Suse 9.1 hat allerdings Probleme, Apache nach der Installation zu starten. Die Eingabe von /etc/init.d/apache2 start als Benutzer Root schafft Abhilfe.
In Debian Woody (3.0) installiert der Befehl aptitude install php4 apache oder apt-get install php4 apache PHP in Version 4.1.2 und den Apache Webserver 1.3.26. Bei der Installation fragt Debian, ob der User das Skript apacheconfig starten will, um PHP zu aktivieren. Leider hat das im Test nicht funktioniert, und es ist nötig, die Datei /etc/apache/conf/httpd.conf von Hand zu editieren. Dort ist das #-Zeichen in der Zeile LoadModule php4_module /usr/lib/apache/1.3/libphp4.so zu entfernen. Ein /etc/init.d/apache restart startet den Apache neu.
Auch die Debianer haben Zusatzmodule von PHP in eigene Pakete ausgelagert, die mit dem Namen php4- beginnen. Der Befehl apt-cache search php4- befördert die Namen der Pakete zutage.
Um die Konfiguration von Apache und PHP zu testen, legt der Benutzer ein Skript mit dem Inhalt aus Listing 1 in das Verzeichnis public_html in seinem Home-Verzeichnis ab. Im Browser sollte die Eingabe von http://localhost/skript.php die PHP-Konfiguration anzeigen.
Vorkompilierte Pakete für PHP 5 gibt es übrigens noch nicht. Das wird sich aber wahrscheinlich mit der Release von Version 5.0.0 schnell ändern.
Für jeden etwas
Nach einem Wechsel ins Verzeichnis php-4.3.7 eröffnet der Aufruf ./configure --help dem Anwender eine Übersicht über alle Erweiterungen, die PHP unterstützt – von XML über FTP bis hin zu Grafikfunktionen für Jpeg, PNG und andere Formate. Viele PHP-Programme benötigen außerdem die Anbindung an eine MySQL-Datenbank. Die Option --with-mysql=/PFAD/ZU/MYSQL aktiviert die nötigen Funktionen. Eine Einführung in MySQL gibt der Artikel auf Seite 24 ff.
Die meisten Benutzer setzen wahrscheinlich den Apache Webserver ein. Sie konfigurieren PHP mit der Option --with-apxs für Apache 1.3 oder --with-apxs2 für Apache 2. Alle anderen Optionen sind davon abhängig, welche Applikationen auf dem Server laufen sollen. Auf den configure-Aufruf folgt ein make und make install, dann ist PHP schon installiert.
Die oben genannten Optionen bei der Konfiguration kompilieren den Interpreter als sogenanntes Dynamic Shared Object (DSO) für Apache. PHP ändert bei der Installation bereits Apaches Konfigurationsdatei http://httpd.conf und fügt folgende Zeile ein:
LoadModule php4_module \ modules/libphp4.so
Damit der Webserver aber die PHP-Dateien korrekt interpretiert und Dateien mit dem Namen index.php als Indexdateien benutzt, sind noch zwei weitere Zeilen hinzuzufügen:
AddType application/x-httpd\ -php .php DirectoryIndex index.php
Um das ganze zu testen, legt der Benutzer die Datei index.php mit dem Inhalt aus Listing 1 ins Dokumentenverzeichnis des Webservers.
Listing 1
PHP-Installation testen
01 <?php 02 phpinfo(); 03 ?>
Der Funktionsaufruf phpinfo() gibt eine HTML-Seite aus, die eine komplette Übersicht über die Konfiguration des PHP-Interpreters liefert. Abbildung 1 zeigt ein Beispiel.
Kasten 2: PHP 5
Die neueste Version von PHP befindet sich noch in der Entwicklung. Aktuell ist der Release-Kandidat 3, auf den bald die stabile Version 5.0.0 folgen soll.
Wer PHP nur verwendet, um Web-Applikationen wie Online-Foren zu betreiben, der wird kaum Änderungen bemerken. Die meisten Neuerungen haben unter der Haube stattgefunden. Die Zend-Engine, der Kern von PHP, kommt in der neuen Version 2 und bietet ein komplett neues objektorientiertes Interface.
Die Installation ist fast identisch zu der von Version 4. Der übliche Dreischritt ./configure, make und make install installiert PHP 5 und passt auch die httpd.conf an. Aber Vorsicht: Die Installationsroutine von PHP 5 fügt die Zeile LoadModule php5_module modules/libphp5.so in die Apache-Konfiguration ein. Die alte Zeile der PHP-4-Installation muss der Anwender dann auskommentieren (ein # an die erste Stelle setzen) oder löschen.
Die Konfiguration
Über die Konfigurationsdatei php.ini ist es möglich, das Verhalten von PHP sehr detailliert festzulegen. Wie Abbildung 1 zeigt, ist der Standardpfad für diese Datei /usr/local/lib. Wer sie an einem anderen Ort ablegen will, muss beim configure-Aufruf die Option --with-config-file-path=PFAD angeben. PFAD ist der Pfad zur Ini-Datei, beispielsweise /etc.
Im Sourcecode-Archiv von PHP liegen bereits zwei Beispieldateien (php.ini-dist und php.ini-recommended). Eine dieser Dateien kopiert der Anwender dann ins Konfigurationsverzeichnis, allerdings ohne die Zusätze -dist oder -recommended. Für welche der beiden man sich entscheidet, ist Geschmackssache, da beide voll funktionsfähig sind. Die Datei mit der Endung -recommended ist lediglich etwas mehr “getuned” als die andere.
Die einzelnen Konfigurations-Optionen sind in der php.ini selbst bereits genau erklärt. Für die meisten Anwendungen ist es nicht nötig, die Voreinstellungen zu ändern. Eine wichtige Variable ist safe_mode, sie ist standardmäßig abgeschaltet.
In Umgebungen, in denen nicht vertrauenswürdige Skripte laufen, sollte die Variable eingeschaltet werden. Falls der Benutzer lediglich PHP-Skripte auf seinem eigenen System einsetzen will, kann er sie auch ausgeschaltet lassen. Eine Beschreibung der anderen Konfigurations-Optionen gibt es unter [3].
Abgehärtet
Wer um die Sicherheit seines Rechners besorgt ist, und wer vor allem fremde Skripte auf seinem Computer startet, sollte einen Blick auf das Hardened-PHP-Projekt [4] werfen. Der Autor des Projekts hat Patches geschrieben, mit denen er die PHP-Umgebung absichert.
Wer Binärpakete von seiner Distribution installiert hat, profitiert leider nicht von Hardened PHP, da es noch keine Pakete gibt, die die Patches schon enthalten. Es ist also nötig, PHP aus den Sourcen zu kompilieren. Hardened PHP bietet mehrere Absicherungen. Es schützt einerseits den PHP-Interpreter selbst, andererseits bietet es Schutz gegen die typischen Fehler in PHP-Skripten – und unsichere PHP-Programme gibt es schließlich wie Sand am Meer.
Viele Programme binden beispielsweise per include-Anweisung andere Skripte ein, um deren Funktionen zu nutzen. Angreifer machen sich fehlerhafte Programme zunutze, um ihre eigenen Funktionen einbinden zu lassen. Darüber hinaus haben viele PHP-Skripte so genannte Dot-Bugs, mit denen sich ebenfalls fremder Code einschleusen lässt.
Aber Achtung: Auch ein gehärtetes PHP ist kein Freibrief für schlampiges Programmieren.
Glossar
-
Interpreter
-
Im Gegensatz zu kompilierten Sprachen wie C übersetzen Interpreter den Sourcecode zur Laufzeit. Der Vorteil dieser Sprachen ist, dass die Programme direkt unter allen Plattformen laufen, für die es einen Interpreter gibt. Ein Nachteil ist, dass interpretierte Programme langsamer laufen.
-
Patch
-
Ein Patch erweitert Programme um Funktionen oder modifiziert die vorhandenen. Patches werden direkt an den Sourcecode angewendet. Wer also binäre Pakete von seiner Distribution installiert hat, kann Patches nicht verwenden.
Infos
[1] PHP: http://www.php.net
[2] PHP-Downloads: http://www.php.net/downloads.php
[3] PHP-Konfiguration: http://www.php.net/configuration
[4] Hardened-PHP: http://www.hardened-php.net
[5] PHP-GTK: http://gtk.php.net/






