HowTo suPHP + Confixx auf SuSE 10.1

German HowTo! - I'll translate this as soon as my time allows it!

~~DISCUSSION~~

Autor Markus Frosch
Stand 09.10.2007
Lizenz

Dieses HowTo beschreibt die Installation und Konfiguration von suPHP auf einem SuSE Linux 10.1 mit Confixx.

In SuSE 10.1 gibt es leider Paket für suPHP und ich kenne momentan kein RPM das sich für den Einsatz eignet.

Die Anleitung sollte sich auch auf 9.3 oder 10.0 anwenden lassen, evtl. mit kleinen Änderungen.

Bitte Fragen, Anregungen und sonstige Kommentare am Ende der Seite posten!

Vorbereitung

Da suPHP die CGI Version von PHP braucht müssen wir zu allererst das Paket php5-fastcgi installieren.

Dann laden wir uns die aktuelle Version von suPHP von http://www.suphp.org herunter, bei mir war das die 0.6.2, aber das sollte für neuere Versionen genauso funktionieren.

cd /usr/src
wget http://www.suphp.org/download/suphp-0.6.2.tar.gz
tar zxvf suphp-0.6.2.tar.gz
chown -R root:root suphp-0.6.2
cd suphp-0.6.2

Diese wichtigen Pakete sollten zum Kompilieren installiert sein:

  • make
  • autoconf
  • automake
  • gcc-c++
  • apache2-devel

Vielleicht braucht man noch andere Pakete, die bei mir schon installiert waren.

Bevor man suPHP kompilieren kann müssen noch die Header Files für APR umkopiert werden, sonst werden sie beim kompilieren nicht gefunden.

cp /usr/include/apr-1/* /usr/include/apache2/

Kompilieren und Installieren

Ich bin kein Freund von Installationen nach /usr/local, also nehmen wir als Prefix direkt /usr und den Sysconfigdir /etc/suphp. Zum Glück besteht suPHP nur aus einer Binary, dem Apache-Modul und der Konfiguration und lässt sich demnach sehr einfach wieder löschen.

./configure \
   --prefix=/usr \
   --sysconfdir=/etc/suphp \
   --with-apxs=/usr/sbin/apxs2 \
   --with-apr=/usr/bin/apr-1-config

Wenn es keine Fehler gab sollte auch make sauber durchlaufen.

make
make install

Die Installation kopiert lediglich zwei Dateien, das suPHP Binary nach /usr/sbin/suphp und das Apache2 Modul nach /usr/lib/apache2/mod_suphp.so.

Jetzt kopieren wir die Konfiguration noch an die richtige Stelle.

mkdir /etc/suphp
cp doc/suphp.conf-example /etc/suphp/suphp.conf

Konfiguration

Jetzt muss die Datei /etc/suphp/suphp.conf angepasst werden.

Einstellung Wert Grund
logfile /var/log/apache2/suphp.log Einfach wegen der Ordnung :-)
allow_file_group_writeable
allow_file_others_writeable
allow_directory_group_writeable
allow_directory_others_writeable
true “Komfort” - Sonst gibt es Probleme wenn eine Datei zu viele Rechte hat
errors_to_browser true “Komfort” - Wenn false wird nur Fehlercode 500 ausgeliefert
umask 0022 Wenn dieser Wert auf 0077 (default) steht kann der Webserver Dateien die von PHP angelegt wurden nicht lesen
x-httpd-php php:/srv/www/cgi-bin/php5 WICHTIG Hier muss das php-cgi Binary stehen

Alle anderen Werte können eigentlich auf Default bleiben.

Jetzt muss das normale PHP aus Apache verschwinden, denn es könnte zu Problemen zwischen den beiden Modulen kommen.

vi /etc/sysconfig/apache2

Dort bearbeiten wir die Module (APACHE_MODULES), löschen php5 und tragen suphp ein.

Der Apache wird bis zur Umkonfiguration von Confixx nicht neustarten, da er jetzt die Direktiven php_admin_value und php_admin_flag für PHP nicht mehr kennt.

vi /etc/apache2/conf.d/suphp.conf

Inhalt:

<IfModule mod_suphp.c>
  <Directory "/srv/www">
    suPHP_Engine on
    AddHandler x-httpd-php .php .php3 .php4 .php5 .phtml
    suPHP_AddHandler x-httpd-php
    DirectoryIndex index.php index.php3 index.php4 index.php5
  </Directory>
</IfModule>

Jetzt ist der Apache soweit vorbereitet und Confixx kann umkonfiguriert werden.

Confixx umstellen

cd <confixxinstallationspfad>

Als Erstes sollte ein Wert in der confixx_main.conf von Hand angepasst werden.

vi confixx_main.conf
$suphp_paranoid = '1';

(Speichern mit ”:wq!”) Dann nutzt Confixx auch den Paranoid Mode von suPHP.

Jetzt starten wir das Admin Skript.

./admin/admin.pl

Im Menü Webserver (2) den Punkt suPHP (9) aktivieren. Dann Fortfahren (0) und weiter (1) wählen.

Wo befindet sich die globale php.ini-Datei?

Die php.ini Datei die dort angegeben wird wird als Basis für jedes Web genommen. Confixx legt automatisch für jedes Web und Confixx selbst eine php.ini an, nimmt diese als Basis und trägt unten noch zusätzliche Werte ein.

Beste Wahl: /etc/php5/fastcgi/php.ini

Wo möchten Sie die php.ini-Dateien der Benutzer ablegen?

Kann man auf /etc/apache2/confixx_phpini lassen.

Möchten Sie php-Spezial verwenden?

Wenn diese Einstellung aktiv ist werden php_admin_value und php_admin_flag aus dem httpd Spezialeinstellungen auslesen und in die einzelnen php.ini Dateien eingetragen.

Sollte auf JA bleiben.

Damit ist Confixx umgestellt und ein Reload von Apache sollte jetzt funktionieren.

rcapache2 reload

Jetzt sollten alle Webseiten auf suPHP laufen.

Wichtige Hinweise

Confixx Version

Bitte beachten: suPHP wird von Confixx erst ab Version 3.2 unterstützt, also ist ein Update anzuraten (Was eigentlich auch unabhängig von suPHP ratsam ist!)

Berechtigungen

Nach der Umstellung sollten alle Dateien im html Ordner dem User gehören. Außerdem ist wichtig, dass der Webserver (wwwrun) oder seine Gruppe (www) die Verzeichnisse und Dateien lesen kann.

Hier ein kleines Snippet. (Es sind beide nötig, da die Berechtigung für den html Ordner selbst anders sein muss)

cd /srv/www/htdocs
ls | grep -E "web[0-9]+" | xargs -n1 -ixx chown -R xx:xx xx/html/
ls | grep -E "web[0-9]+" | xargs -n1 -ixx chown xx:www xx/html

Safe Mode und Open Basedir

Durch die Umstellung ist der Safe Mode der Webs und der Open Basedir aus. D.h. man sollte verstärkt darauf achten, dass keine für die Webuser lesbaren Verzeichnisse sensible Daten enthalten.

Der Safemode kann natürlich über die php.ini Vorlage für alle Webs aktiviert werden. Oder einzeln über httpd Spezial.

phpMyAdmin

Nachdem phpMyAdmin bei vielen Servern als Alias eingebunden ist und Datei technisch dem User root gehört wird phpMyAdmin mit suPHP nicht so funktionieren.

Man sollte phpMyAdmin nach /srv/www/htdocs/confixx/html kopieren, alle Dateien dem User confixx zuweisen und dann die Alias Konfiguration aus Apache löschen.

AWStats Fehler

Dieses Problem wurde noch nicht genau überprüft! Ich teste es in Kürze genau!

Bei einem Kunden trat das Problem auf, dass AWStats nicht mehr funktioniert hat. Es handelte sich wohl dabei um einen Bug mit der Environmentvariable GATEWAY_INTERFACE.

SW-Soft hat mir dafür einen Fix zur Verfügung gestellt, der laut SW-Soft auch in der nächsten Confixxversion eingebaut ist.

Um den Fehler zu beheben mussten folgende Dateien geändert werden:

/root/confixx/admin/html/user/awstats.php
/srv/www/htdocs/confixx/html/user/awstats.php

Veränderungen zwischen awstats.php in Confixx 3.2.1 und dem Fix.

12c12,13
<
---
> putenv( 'GATEWAY_INTERFACE=' );
>
36,43d36
< /**
<  * in case if suPHP is used
<  * unset $_ENV["GATEWAY_INTERFACE"] so that awstats.pl does not think it is called directly from browser
<  */
< if( $_ENV["GATEWAY_INTERFACE"] ){
<       putenv('GATEWAY_INTERFACE=');
< }
<
58d50
<

Die “gefixte” Datei kann auch runterladen.

linux/suphp-confixx-suse.txt · Last modified: 2007/10/18 09:36 by markus