O'Reilly logo

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren by Stefan Esser, Christopher Kunz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

21710.6 suExec
Pfad /home/www/cgi/. Danach legen Sie in der httpd.conf ein Alias für
dieses Verzeichnis an und aktivieren die Ausführung von CGIs:
ScriptAlias /cgi-php /home/www/cgi
<Location /cgi-php/>
Options ExecCGI
</Location>
Als Nächstes richten Sie nur noch den passenden Dateityp ein, damit
PHP-Dateien auch korrekt ausgeführt werden:
AddType application/x-httpd-php .php4 .php
Action application/x-httpd-php /cgi-bin/php
Nach einem Neustart des Webservers sollte Ihre PHP-Installation
funktionieren.
Ein großer Pluspunkt ist, dass jeder Ihrer Kunden oder jedes Pro-
jekt eine eigene
php.ini bekommen kann, die eine sehr viel feinere Ein-
stellung aller PHP-Parameter an einer Stelle erlaubt. Das ist auch not-
wendig, denn die von mod_php gewohnte Konfiguration mittels
Direktiven wie
php_value ist bei einem CGI nicht mehr möglich.
Die Installation von PHP als CGI ist – insbesondere mit dem im nächs-
ten Abschnitt vorgestellten suExec – die sicherste Installationsvariante
und wird von den Autoren als »Best Practice« empfohlen.
10.6 suExec
Der zentrale Vorteil in einer Installation von PHP als CGI liegt darin,
dass Sie hier die Sicherheitsmechanismen von Apaches suExec
2
nutzen
können. Dieses Programm dient als Wrapper, um CGI-Skripte unter
einer anderen UID und GID als der des Webservers ausführen zu kön-
nen. Praktisch bedeutet das, dass der Administrator für jeden virtuel-
len Host im Webserver einen eigenen Nutzer und eine Gruppe festle-
gen kann, in die der Webserver mit einem Aufruf der Betriebssystem-
funktion
setuid() vor der Skriptausführung wechselt. Nur Dateien, die
diesem Benutzer gehören, darf das CGI-Skript dann manipulieren,
womit die typischen PHP-Sicherheitsprobleme weitgehend gelöst wer-
den können. Vor der Ausführung des CGI führt suExec noch einige
zusätzliche Sicherheitsüberprüfungen durch, um Missbrauch zu ver-
/3    5J88/8 5?8./8=:/D303=-2/ 38=>/66?81/8 8?< K,/< php.ini
@9<1/8977/8A/<./8
2. http://httpd.apache.org/docs/1.3/suexec.html
10 PHP intern218
hindern. Dazu gehört die Überprüfung, ob das auszuführende Pro-
gramm (in diesem Falle das PHP-Binary) dem ausführenden Nutzer
gehört, ob alle Verzeichnisse auf dem Weg lesbar sind und ob das CGI
nicht mehr Rechte hat als unbedingt notwendig. Insbesondere in Ver-
bindung mit
open_basedir können Sie den Webserver so fast wasser-
dicht absichern.
suExec gehört nicht zur Standardinstallation von Apache und
muss separat vor der Übersetzung aktiviert werden. Mit einigen Direk-
tiven für das Apache-Konfigurationsskript können Sie die notwendi-
gen Grundeinstellungen für suExec vornehmen – die wichtigsten
möchten wir kurz vorstellen:
--enable-suexec aktiviert die suExec-Funktion. Diese Direktive
muss von einer der anderen suExec-Konfigurationsdirektiven
gefolgt werden.
--suexec-caller=<username> ist der Benutzername, von dem das
suExec-Binary aufgerufen wird. Hier sollten Sie den Benutzerna-
men eintragen, der von Ihrem Webserver verwendet wird, also
httpd oder www-data. Mit dem Unix-Befehl grep User httpd.conf
respektive grep Group httpd.conf können Sie herausfinden, mit wel-
chem Benutzer- und Gruppennamen Ihr Webserver betrieben wird.
--suexec-docroot=<path> ist die wichtigste Einstellung bei der
Konfiguration von suExec. Mit der Pfadangabe, die in dieser
Option enthalten sein muss, definieren Sie das Basisverzeichnis,
unter dem suExec arbeitet. In der Regel geben Sie hier das spätere
Document Root an – z.B.
/home/www oder /usr/local/apach/htdocs.
--suexec-logfile=<file>: Normalerweise legt suExec seine Log-
Dateien an derselben Stelle wie Apache ab. Möchten Sie, dass dies
an anderer Stelle geschieht, können Sie den voll qualifizierten Pfad
zur Log-Datei an dieser Stelle angeben.
--suexec-uidmin=<uid> und --suexec-gidmin=<gid> legen fest, wel-
che Benutzer- und Gruppen-ID ein suExec-Benutzer mindestens
haben muss. So können Sie verhindern, dass durch einen Konfigu-
rationsfehler ein virtueller Host mit dem Root- oder einem anderen
hoch berechtigten Benutzer ausgestattet wird.
Möchten Sie nur bestimmte Teile der Umgebungsvariablen
PATH an
CGI-Skripte übergeben, dann können Sie diese mit
--suexec-safe-
path=<path>
festlegen. Standardeinstellung ist »/usr/bin:/usr/local/
bin
« – mehrere Pfade werden stets per »:« voneinander getrennt.
Nach dieser einleitenden Konfiguration, die leider nach dem Kom-
pilieren nicht mehr geändert werden kann, kompilieren und installie-
ren Sie Apache wie gewohnt. Im Binärverzeichnis des Webservers fin-
den Sie nach der Installation nun zusätzlich die Datei
suexec, die fortan

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required