PHP einrichten ============== Admin Alfred will User Ulrich PHP für die Domain example.net konfigurieren. 0. Inhalt --------- 1. PHP/CGI vs. mod_php 2. Handler installieren 3. Apache konfigurieren 4. PHP Einschränkungen 4.1 Programme ausführen 5. Warum PHP/CGI und nicht mod_php? 6. Für Interessierte: Was passiert beim Seitenabruf? 7. Kontakt 1. PHP/CGI vs. mod_php ---------------------- Die Kurzfassung: Wir benutzen PHP/CGI. mod_php ist nicht gut in einer Multiuserumgebung wie gnuher.de. Die etwas ausführlichere Erklärung gibt's unten. Damit nicht alle PHP Dateien ein #!/usr/bin/php4 als erste Zeile brauchen wird ein Handler benutzt. 2. Handler installieren ----------------------- Jeder User braucht einen eigenen Handler, der mit seinen Rechten ausgestattet ist. * Ordner für den Handler anlegen cd /home/www/handler/ mkdir -m 755 www-ulrich * Handler kopieren. cp php-handler.template www-ulrich/php-handler chmod 755 www-ulrich/php-handler * Owner anpassen chown -R www-ulrich.www-ulrich www-ulrich/ 3. Apache konfigurieren ----------------------- In /etc/apache2/sites-available/_template_ sind die nötigen Zeilen zur Aktivierung des Handlers schon vorhanden aber auskommentiert. Hier die Kurzfassung: [...] ScriptAlias /handler /var/www/handler/www-ulrich/ AddHandler myphp .php Action myphp /handler/php-handler Änderungen ins SVN einchecken, Apache neu starten /etc/init.d/apache2 restart Gucken, ob der Apache auch richtig hoch fährt. Ein Fehler in der Konfig führt dazu, dass der ganze Apache nicht mehr startet. 4. PHP Einschränkungen ---------------------- PHP läuft im safe_mode. Dadurch ergeben sich einige Einschränkungen, die u.a. unter http://php.net/features.safe-mode aufgeführt sind. 4.1 Programme ausführen ---------------------- Im safe_mode können nur die Programme ausgeführt werden, die sich im Ordner /usr/local/bin/php-root/ befinden bzw. dort drin verlinkt sind. Bitte 3x nachdenken bevor ein Programm da drin verlinkt wird, ob's auch wirklich gebraucht wird. 5. Warum PHP/CGI und nicht mod_php? ----------------------------------- mod_php führt PHP Seiten stets mit der Berechtigung des Apache Users (www-data) aus. Das ist ok, wenn man alleine auf der Maschine ist aber gnuher.de ist eine Multiuser Umgebung. Häufig sind in den PHP Skripten Passwörter o.ä. hinterlegt und die gehen die anderen User auf der Kiste nix an. mod_php ist nicht angemessen. Statt dessen wird PHP/CGI benutzt, d.h. PHP wird als CGI aufgerufen. Dabei kommt der suexec Mechanismus vom Apache zum tragen und die Seite wird mit den richtigen Rechten ausgeführt. Beabsichtigter Nebeneffekt: Programmierfehler wirken sich nur auf diesen und nicht auf alle User aus. Das gilt für versehentliche "rm -rf *" genauso wie für Hackversuche aufgrund unsauberer Programmierung. 6. Für Interessierte: Was passiert beim Seitenabruf? ---------------------------------------------------- Es wird eine Seite mit der Endung .php aufgerufen. * Apache merkt, dass dafür der php-handler zuständig ist * via suexec wird der Handler mit der UID/GID ausgeführt, die in SuexecUserGroup eingestellt ist. * suexec führt die üblichen Sicherheitschecks durch, u.a. werden die Dateirechte und Owner der auszuführenden Datei (hier: php-handler) geprüft. Deshalb muss jeder User einen eigenen Handler haben * Der Handler bekommt den Namen der ursprünglich abgefragten PHP-Datei * schließlich wird die PHP Datei durch den Interpreter gejagt und das Ergebnis vom Apache an den Client ausgeliefert 7. Kontakt ---------- Achim Settelmeier 2005-04-17, settel