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!
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:
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/
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
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.
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.
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!)
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
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.
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.
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.