Suse mit Plesk 8.1, Apache2, suPHP 0.6.2 und PHP5
suPHP erhöht die Sicherheit beim Ausführen von PHP-Scripts dadurch, dass es ähnlich suExec die Scripts mit den Berechtigungen des Eigentümers anstatt des Webserver-Benutzers ausführt.
Hier erkläre ich am Beispiel eines VPS Servers mit Suse 10.0 mit Plesk 8.1 die benötigten Schritte um das suphp Modul einzubinden.
Vorbedingungen:
- Ein geeigneter C++ Compiler muss installiert sein.
- apache2-devel muss installiert sein (wg. apxs2).
1.) Installation von php5.1-fastcgi von Plesk
Dieses Paket kann entweder über den Plesk Update installiert werden, indem man das Sitebuilder-Paket installiert oder indem man die RPMs von Hand installiert.
Die php5.1-fastcgi Pakete befinden sich im Installationsarchiv unter “/opt/sitebuilder/” und können über
rpm -i php5*
installiert werden.
2.) Installation von suPHP
Wir gehen wie folgt vor:
cd /usr/local/src
wget http://www.suphp.org/download/suphp-0.6.2.tar.gz
tar -zxvf suphp-0.6.2.tar.gz
Nun müssen wir noch den Quelltext anpassen, andernfalls erhalten wir später den Fehler:
Forcing reload of web server: Apache2Syntax error on line 28 of /etc/apache2/conf.d/suphp.conf: suPHP_AddHandler not allowed here
Dazu öffnen wir die Datei ./src/apache2/mod_suphp.c
vi src/apache2/mod_suphp.c
und suchen nach den Einträgen
AP_INIT_ITERATE(”suPHP_AddHandler”, suphp_handle_cmd_add_handler, NULL, ACCESS_CONF, “Tells mod_suphp to handle these MIME-types”),
AP_INIT_ITERATE(”suPHP_RemoveHandler”, suphp_handle_cmd_remove_handler, NULL, ACCESS_CONF, “Tells mod_suphp not to handle these MIME-types”),
und ersetzen ACCESS_CONF durch RSRC_CONF | ACCESS_CONF
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”),
Diese Anweisungen befinden sich bei der Version 0.6.2 in den Zeilen 316 und 317.
Anschliessend kompilieren wir das Modul mit dem Befehl:
./configure –with-setid-mode=owner –sysconfdir=/etc –with-apxs=/usr/bin/apxs2
make
make install
Wenn alles ohne Fehler durchläuft, haben wir nun das suphp Modul erfolgreich kompiliert und können uns an die Konfiguration machen.
3.) Konfiguration von Apache
Wir erstellen die Datei “/etc/apache2/conf.d/suphp.conf” mit diesem Inhalt:
LoadModule suphp_module /usr/lib/apache2/mod_suphp.so
suPHP_Engine On
<IfModule mod_php5.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php4.c>
php_admin_flag engine off
</IfModule>AddHandler x-httpd-php .php .php4 .php3 .phtml
suPHP_ConfigPath /opt/php51/etc/php5/fastcgi/
suPHP_AddHandler x-httpd-php
4.) Konfiguration von suphp
Die Konfiguration von suphp erfolgt in “/etc/suphp.conf”:
[global]
;Path to logfile
logfile=/var/log/suphp.log;Loglevel
loglevel=info;User Apache is running as
webserver_user=wwwrun;Path all scripts have to be in
docroot=/srv/www/vhosts/;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=true
allow_directory_others_writeable=true;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=0033; Minimum UID
min_uid=10000; Minimum GID
min_gid=10000[handlers]
;Handler for php-scriptsx-httpd-php=php:/opt/php51/cgi-bin/php5
;Handler for CGI-scripts
x-suphp-cgi=execute:!self
5.) Aktivierung und Test
Mit dem Befehl
rcapache2 restart
starten wir nun den Webserver neu. Sollten keine Fehler auftreten (auch nicht in den einschlägigen Logfiles) erstellen wir eine Datei “test.php” mit dem Inhalt:
<?php
php_info();
?>
und rufen die Seite auf.
Nun sollte die aktuelle PHP Version erscheinen.
Parallel dazu überprüfen wir mit dem Linux Befehl “top” unter welchem Benutzer die Datei test.php aufgerufen wird. Dort sollte nun nicht mehr der Benutzer des Apache aufgeführt werden, sondern der Benutzer mit dem die Datei “test.php” erstellt wurde.
Nun sollten die php Einstellungen noch an die eigenen Bedürfnisse angepasst werden und die “test.php” Datei sollte nach dem Test wieder entfernt werden.
6.) Webmail anpassen
Damit Horde-Webmail wieder funktioniert erstellen wir eine Datei “/etc/apache2/conf.d/suphp_exclude.conf”
Hier kopieren wir aus der bestehenden Datei zz010_psa_httpd.conf die Webmail Sektion und ergänzen Sie um die folgenden Angaben:
suPHP_Engine off
AddHandler application/x-httpd-php.php
Somit greift der Webmail Bereich auf die reguläre php Version zurück.
Weitere Informationen:
- Homepage von suphp
- Howtoforge: How to set up suPHP with PHP4 and PHP5
- Hardened PHP Projekt
- PHP Security Blog










am 20. März 2007 um 12:18 Uhr.
Hallo
Schönes howto ich hab das schon auch so am laufen nur frage ich mich warum man hier in der mod_suphp.c überhaupt was ändern muss
Was bewirken die änderungen bzw vielleicht eine kleine erkährung dazu bitte
denn ich benutze suphp eigentlich generell fürs hosting den sitebuilder eigentlich gar nicht.
Gruss
Gerhard
am 20. März 2007 um 19:28 Uhr.
Hallo Gerhard,
vielen Dank für die Blumen
Zunächst einmal zu der Änderung in der mod_suphp.c: oder Containern. oder Bereiche einschliesst.
In diesem Teil des Codes werden dem Apache die neuen Konfigurationsdirektiven bekannt gemacht, sowie die Positionen an denen Sie verwendet werden.
Standardmäßig sind die Direktiven “suPHP_AddHandler” und “suPHP_RemoveHandler” in dem Bereich “ACCESS_CONF” vorgesehen, das ist jeweils innerhalb von allen .conf Dateien in den
Da wir diese Einstellung Global verwenden ergänzen wir es um den Bereich “RSRC_CONF” was alle Bereiche in den .conf Dateien ausserhalb der
Das Plesk Sitebuilder Paket habe nur verwendet, weil es eine recht aktuelle php5.1 mitgebracht hat. Ansonsten verwende ich den Sitebuilder auch nicht.
Grüße
Sascha
am 8. Juli 2007 um 15:02 Uhr.
Hallo!
Nach langem rumsuchen, selber kompilieren und fluchen bin ich auf diese Seite hier gestoßen und die Anleitung hat auf Anhieb funktioniert.
Deshalb vielen vielen vielen Dank für dieses HowTo!
Farewell,
Tobi
am 8. Juli 2007 um 15:32 Uhr.
Vielen Dank für das Feedback! Gern geschehen!
Liebe Grüße
Sascha
am 26. Januar 2008 um 18:50 Uhr.
[…] einiger Zeit habe ich die Installation bereits für ältere Versionen beschrieben. Da diese Konfiguration mittlerweile jedoch veraltet ist und sich dadurch geringfügige […]