SuSE 10.1 mit Plesk 8.3, 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.

Vor einiger Zeit habe ich die Installation bereits für ältere Versionen beschrieben. Da diese Konfiguration mittlerweile jedoch veraltet ist und sich dadurch geringfügige Veränderungen ergeben haben erscheint hier eine aktualisierte Anleitung.

Vorbedingungen:

  • Ein geeigneter C++ Compiler muss installiert sein.
  • apache2-devel muss installiert sein (wg. apxs2).

1.) Installation von php5.2-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.2-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 –with-apr=/usr/bin/apr-1-config –includedir=/usr/include/apr-1/ –sysconfdir=/etc –with-apxs=/usr/sbin/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 /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-scripts

x-httpd-php=php:/srv/www/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


Teile und genieße
Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.

  • Digg
  • del.icio.us
  • Technorati
  • MisterWong
  • Netscape
  • blogmarks
  • Ma.gnolia
  • Reddit
  • StumbleUpon
  • YahooMyWeb

Ein Kommentar zu “SuSE 10.1 mit Plesk 8.3, Apache2, suPHP 0.6.2 und PHP5”

  1. mascvip

    Müssen da noch Anpassungen in /etc/sysconfig/apache2 vorgenommen werden? Nach dieser Anleitung bekommen ich einen Apache Error 500 wenn ich meine Seiten aufrufe.

Einen Kommentar schreiben: