Wie man suPHP mit PHP4 und PHP5 einrichtet

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man suPHP mit PHP4 und PHP5 installiert und anwendet. suPHP ist ein Tool für die Ausführung von PHP Skripten mit den Berechtigungen der Besitzer anstatt des Apache Benutzers. Außerdem können PHP4 und PHP5 zur gleichen Zeit installiert sein, was am Ende dieser Anleitung beschrieben wird.

suPHP ist als Modul in Apach2 integriert. Als diese Anleitung verfasst worden ist, funktionierte suPHP mit Apache2. Die Version 2.2 wird noch nicht unterstützt.

Diese Anleitung wurde mit Hilfe eines Debian Sarge System geschrieben. Da ich suPHP hier jedoch aus den Quellen kompiliere und keine Distributions-spezifische suPHP Pakete installiere, sollten die meisten Schritte auch bei anderen Distributionen die gleichen sein.

Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Installation von Apache

Wenn Du Apache2 noch nicht installiert hast, dann installiere es wie folgt:

apt-get install apache2 apache2-doc


2 Das Apache PHP Modul deaktivieren

Falls Du Apache2 mit PHP4 als Modul bereits installiert hattest, musst Du dieses Modul jetzt deaktivieren, da suPHP die CGI Version von PHP verwendet (wenn Du nicht genau weißt, ob Du PHP4 als Modul installiert hast, kannst Du auch diesen Befehl ausführen - es schadet nicht):

a2dismod php4

Führe das Gleiche für PHP5 aus, wenn Du das PHP5 Modul installiert hast (die offiziellen Debain Sarge Paketdatenbanken haben keine PHP5 Pakete, es kann jedoch sein, dass Du PHP5 Pakete von Drittanbietern instlliert hast, wie die von http://www.dotdeb.org):

a2dismod php5

Starte Apache dann neu:

/etc/init.d/apache2 restart


3 Installation von apxs

Aus dem suPHP Installationsmanual:

The easiest way to install mod_suphp is to compile it as a dynamically loadable module (DSO). If your Apache was compiled with DSO support and "apxs" is either in your path or you specified the path to it when running "configure", mod_suphp will automatically be compiled when doing "make" and installed to your Apache server (when doing "make install").

Wir möchten suPHP als DSO installieren, dazu müssen wir apxs installieren (auf Debian Sarge ist es apxs2). Es wird vom apache2-prefork-dev Paket bereit gestellt, das wir jetzt installieren:

apt-get install apache2-prefork-dev


4 Installation von PHP4-CGI

Ich werde zunächst beschreiben, wie man suPHP mit PHP4 anwendet und dann später wie man es mit PHP5 verwendet. Am Ende dieser Anleitung werde ich dann zeigen, wie man es mit beiden verwendet (gleichzeitig installiert).

Wie bereits erwähnt, benötigt suPHP PHP als CGI anstelle des Apache Moduls. Daher installieren wir das php4-cgi Paket wie folgt:

apt-get install php4-cgi


5 Installation von suPHP

Als Nächstes laden wir die suPHP Quellen runer und entpacken sie. Als diese Anleitung verfasst wurde, war die neuste Version 0.6.1:

cd /tmp
wget http://www.suphp.org/download/suphp-0.6.1.tar.gz
tar xvfz suphp-0.6.1.tar.gz
cd suphp-0.6.1

Nun müssen wir src/apache2/mod_suphp.c bearbeiten, da Du sonst eine Fehlermeldung wie diese erhältst:

Forcing reload of web server: Apache2Syntax error on line 49 of /etc/apache2/sites-enabled/000-default:
suPHP_AddHandler not allowed here
wenn Du einige suPHP Direktiven in Deine Apache vhosts setzt. Öffne die Datei, in der Zeile 316 und 317 (wenn Du eine andere suPHP Version als 0.6.1 verwendest, kann die Zeilenzahl anders sein) findest Du die Zeichenfolge ACCESS_CONF. Ersetze sie mit RSRC_CONF | ACCESS_CONF so dass die beiden Zeilen wie folgt aussehen:

vi src/apache2/mod_suphp.c


    AP_INIT_ITERATE("suPHP_AddHandler", suphp_handle_cmd_add_handler, NULL, RSRC_CONF | ACCESS_CONF, "Tells mod_suphp to handle these MIME-types"),
AP_INIT_ITERATE("suPHP_RemoveHandler", suphp_handle_cmd_remove_handler, NULL, RSRC_CONF | ACCESS_CONF, "Tells mod_suphp not to handle these MIME-types"),
(Wenn Du die Datei lieber auf Deinem Windows System bearbeitest, dann denke daran, dass Du sie mit Unix Zeilenumbrüchen anstelle von Windows Zeilenumbrüchen speicherst, bevor Du die Datei wieder ins Linux System überführst!)

Dann kompilieren wir suPHP und installieren es:

./configure --prefix=/usr --sysconfdir=/etc --with-apache-user=www-data --with-setid-mode=paranoid --with-apxs=/usr/bin/apxs2
make
make install

Nun müssen wir die Konfigurationsdatei /etc/suphp.conf erstellen. Dazu kopieren wir einfach die Vorlage, die in den Quellen enthalten ist:

cp /tmp/suphp-0.6.1/doc/suphp.conf-example /etc/suphp.conf

Wir müssen ein paar Änderungen an /etc/suphp.conf vornehmen. Setze den Wert von webserver_user zu www-data (das ist der Benutzername des Apache Benutzers in Debians Standard Apache Paket) und für x-httpd-php müssen wir unsere php4-cgi Binärdatei, die /usr/bin/php4-cgi ist, festlegen, also sieht die endgültige Datei wie folgt aus:

vi /etc/suphp.conf


[global]
;Path to logfile logfile=/var/log/suphp.log ;Loglevel loglevel=info ;User Apache is running as webserver_user=www-data ;Path all scripts have to be in docroot=/ ;Path to chroot() to before executing script ;chroot=/mychroot ; Security options allow_file_group_writeable=false allow_file_others_writeable=false allow_directory_group_writeable=false allow_directory_others_writeable=false ;Check wheter script is within DOCUMENT_ROOT check_vhost_docroot=true ;Send minor error messages to browser errors_to_browser=false ;PATH environment variable env_path=/bin:/usr/bin ;Umask to set, specify in octal notation umask=0077 ; Minimum UID min_uid=100 ; Minimum GID min_gid=100 [handlers] ;Handler for php-scripts x-httpd-php=php:/usr/bin/php4-cgi ;Handler for CGI-scripts x-suphp-cgi=execute:!self
Dann müssen wir das suPHP Modul der Apache Konfiguration anhängen. Füge folgende Zeile /etc/apache2/httpd.conf hinzu:

vi /etc/apache2/httpd.conf


LoadModule suphp_module       /usr/lib/apache2/modules/mod_suphp.so
Starte dann Apache neu:

/etc/init.d/apache2 restart


6 Apache Konfiguration

In diesem Abschnitt gehe ich davon aus, dass wir eine Webseite www.example.com auf der IP Adresse 1.2.3.4 mit dem Dokumenten-Root /var/www und folgender vhost Konfiguration haben:
<VirtualHost 1.2.3.4>
ServerName www.example.com ServerAdmin webmaster@example.com DocumentRoot /var/www </VirtualHost>
Um suPHP für den vhost www.example.com aktivieren zu können und ihn PHP Skripte als Benutzer testuser und Gruppe test, ausführen zu lassen, modifizieren wir den vhost wie folgt:
<VirtualHost 1.2.3.4>
ServerName www.example.com ServerAdmin webmaster@example.com DocumentRoot /var/www suPHP_Engine on suPHP_UserGroup testuser test AddHandler x-httpd-php .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-php </VirtualHost>
AddHandler x-httpd-php verweist auf suPHP_AddHandler x-httpd-php was wiederum auf die x-httpd-php Zeile in /etc/suphp.conf verweist, was bedeutet, dass Skripte mit den Endungen .php, .php3, .php4 und .php5 von /usr/bin/php4-cgi interpretiert werden.

Starte Apache neu:

/etc/init.d/apache2 restart

Jetzt erstellen wir ein einfaches phpinfo() Skript und greifen in unserem Browser darauf zu:

vi /var/www/info.php


<?php
phpinfo(); ?>
Gehe in Deinem Browser zu http://www.example.com/info.php und Du müsstest sehen, dass PHP4 ausgeführt wird:


Falls Du auf Probleme stößt, überprüfe bitte /var/log/suphp.log und /var/log/apache2/error.log auf Fehler. Meistens kannst Du sie beheben, indem Du die entsprechende Option in /etc/suphp.conf oder die Berechtigungen von Dateien/Verzeichnissen änderst.

7 suPHP und PHP5

In diesem Abschnitt installieren wir PHP5 und sorgen dafür, dass es mit suPHP funktioniert. Das PHP4-CGI wird damit nicht entfernt!

7.1 Installation von PHP5

Da es für Debian Sarge kein offizielles PHP5 Paket gibt, müssen wir Pakete von Drittanbietern installieren. Es gibt einige Paketdatenbanken wie backports.org oder dotdeb.org, die solche Pakete bereitstellen. Im Folgenden werden wir das PHP5-CGI Paket von otdeb.org installieren.

Füge folgende Zeilen der /etc/apt/sources.list hinzu (entferne nicht die anderen Paketdatenbanken!):

vi /etc/apt/sources.list


deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all
Führe dann dies aus

apt-get update

Installiere php5-cgi wie folgt:

apt-get install php5-cgi


7.2 Konfiguration von Apache

Die Überschrift ist etwas irreführend. Eigentlich müssen wir die Apache Konfiguration nicht ändern. Wir haben immer noch unseren vhost wie oben:
<VirtualHost 1.2.3.4>
ServerName www.example.com ServerAdmin webmaster@example.com DocumentRoot /var/www suPHP_Engine on suPHP_UserGroup testuser test AddHandler x-httpd-php .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-php </VirtualHost>
Damit unser www.example.com vhost PHP5 verwendet, müssen wir nur die x-httpd-php Zeile in /etc/suphp.conf ändern. Sie muss nun auf unsere php5-cgi Binärdatei verweisen:

vi /etc/suphp.conf


[handlers]
;Handler for php-scripts x-httpd-php=php:/usr/bin/php5-cgi
Du musst Apache nicht einmal neu starten! Gehe mit Deinem Browser erneut zu http://www.example.com/info.php und Du müsstest feststellen, dass PHP5 ausgeführt wird:

8 PHP4 und PHP5 gleichzeitig

Nun haben wir php4-cgi und php5-cgi auf unserem Server installiert. Falls Du auf Deinem Server mehrere vhosts hast, kann zur gleichen Zeit einer von ihnen PHP4 und ein anderer PHP5 verwenden. Dafür definieren wir in /etc/suphp.conf zwei handler. Bearbeite den [handlers] Bereich, so dass es wie folgt aussieht:

vi /etc/suphp.conf


[handlers]
;Handler for php-scripts x-httpd-php=php:/usr/bin/php4-cgi x-httpd-php5=php:/usr/bin/php5-cgi
Wenn Du in Deinem vhost PHP4 verwenden möchtest, verwende den x-httpd-php handler:
<VirtualHost 1.2.3.4>
ServerName www.example.com ServerAdmin webmaster@example.com DocumentRoot /var/www suPHP_Engine on suPHP_UserGroup testuser test AddHandler x-httpd-php .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-php </VirtualHost>
Wenn Du PHP5 verwenden möchtest, verwende den x-httpd-php5 handler:
<VirtualHost 1.2.3.4>
ServerName www.example.com ServerAdmin webmaster@example.com DocumentRoot /var/www suPHP_Engine on suPHP_UserGroup testuser test AddHandler x-httpd-php5 .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-php5 </VirtualHost>
Vergiss nicht, Apache nach den Änderungen in Deinem vhost neu zu starten:

/etc/init.d/apache2 restart


9 Links

1 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: planet_fox

die configure zeile muss so heißen

./configure --prefix=/usr --sysconfdir=/etc --with-apache-user=www-data --with-setid-mode=paranoid --with-apxs=/usr/bin/apxs2