Suphp
Der Suphp-php-Handler ist ein Apache-Modul (mod_suphp), das PHP-Skripte im Besitz und mit der Erlaubnis eines bestimmten Benutzers ausführt.
Dies wird als Sicherheitsverbesserung angesehen, da das System nachverfolgen kann, welches PHP-Skript des Benutzers ausgeführt wird (und ggf. Probleme verursacht).
In Shared-Hosting-Umgebungen ist suphp sehr beliebt, da es sehr einfach zu installieren und zu konfigurieren ist.
Suphp führt PHP als CGI aus. Daher muss das php5-cgi-Paket installiert werden. Aus diesem Grund ist suphp viel langsamer als mod_php.
Aber Suphp fügt die Sicherheit hinzu, den Benutzer zu identifizieren, der das Skript ausgeführt hat. Wenn Sie also PHP als CGI ausführen müssen, ist suphp der bevorzugte Weg. Es gibt jedoch viel bessere und schnellere Alternativen wie fastcgi, fpm usw., die im Vergleich zu cgi eine höhere Leistung haben.
Suphp besteht aus zwei Komponenten:
1. mod_suphp - ein Apache-Modul, das mod_php ersetzt
2. suphp - eine setuid-Binärdatei, die Apaches suexec ersetzt, sie führt php mit den spezifischen Benutzerrechten aus.
1. Installieren Sie suphp auf Ubuntu
1. Installieren Sie zuerst das Apache-Modul für suphp, Paket libapache2-mod-suphp
$ sudo apt-get install libapache2-mod-suphp
2. Deaktivieren Sie als Nächstes mod php, das der standardmäßige PHP-Handler auf Ubuntu ist
$ sudo a2dismod php5 Module php5 disabled. Run '/etc/init.d/apache2 restart' to activate new configuration!
3. Starten Sie nun Apache neu
$ sudo /etc/init.d/apache2 restart * Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName [ OK ]
Dies sollte suphp installieren und aktivieren. Die Konfigurationsdatei für mod php befindet sich hier
$ cat /etc/apache2/mods-enabled/suphp.load LoadModule suphp_module /usr/lib/apache2/modules/mod_suphp.so
Die suphp-Konfiguration für Apache ist hier
$ cat /etc/apache2/mods-enabled/suphp.conf <IfModule mod_suphp.c> AddType application/x-httpd-suphp .php .php3 .php4 .php5 .phtml suPHP_AddHandler application/x-httpd-suphp <Directory /> suPHP_Engine on </Directory> # By default, disable suPHP for debian packaged web applications as files # are owned by root and cannot be executed by suPHP because of min_uid. <Directory /usr/share> suPHP_Engine off </Directory> # # Use a specific php config file (a dir which contains a php.ini file) # suPHP_ConfigPath /etc/php4/cgi/suphp/ # # Tells mod_suphp NOT to handle requests with the type <mime-type>. # suPHP_RemoveHandler <mime-type> </IfModule>
Die obige Konfiguration macht suphp zum Handler für PHP-Dateien.
2. Legen Sie die Benutzer- und Gruppen-ID für jeden virtuellen Host fest
Damit suphp die PHP-Skripte mit einer bestimmten Benutzer-ID/Gruppen-ID ausführt, müssen wir die Konfiguration für jeden virtuellen Host in der Apache-Konfigurationsdatei einrichten.
Die Apache-Konfigurationsdatei auf Ubuntu befindet sich unter
/etc/apache2/sites-available/default
Bearbeiten Sie den relevanten virtuellen Host und fügen Sie die suphp-Benutzergruppeneinstellungen wie unten gezeigt hinzu. Die Direktive suPHP_UserGroup weist Apache an, die Benutzer-ID/Gruppen-ID für den spezifischen virtuellen Host zu verwenden.
<VirtualHost 64.131.72.23:80> ServerName some-site.com ServerAlias www.some-site.com DocumentRoot /home/mike/public_html <IfModule mod_suphp.c> suPHP_UserGroup mike mike </IfModule> </VirtualHost>
Wenn Sie die Apache-Hauptkonfigurationsdatei nicht bearbeiten möchten, erstellen Sie eine neue Datei im selben Verzeichnis
/etc/apache2/sites-available/
Und fügen Sie den virtualhost-Block in dieser Datei hinzu. Wenden Sie dann die Einstellungen mit dem Befehl a2ensite an.
$ sudo a2ensite file_name
3. Berechtigungen konfigurieren
Suphp gibt auch "500 Internal Server Error" aus, wenn eine PHP-Datei von Gruppen beschreibbar ist. Das Fehlerprotokoll enthält einen Eintrag wie diesen
SoftException in Application.cpp:564: Directory "/var/www" is writeable by group, referer: http://localhost/index.php
Um dies zu beheben, überprüfen Sie die Berechtigungen und stellen Sie sicher, dass die Gruppe oder andere Personen keine Berechtigung zum Lesen einer PHP-Datei haben.