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