Suphp
Il gestore php di Suphp è un modulo apache (mod_suphp) che esegue script php con la proprietà e il permesso di un utente specifico.
Questo è visto come un miglioramento della sicurezza poiché il sistema può tenere traccia di quale script php dell'utente è in esecuzione (e causando eventuali problemi).
Negli ambienti di hosting condiviso suphp è molto popolare poiché è molto facile da installare e configurare.
Suphp esegue php come cgi. Quindi ha bisogno del pacchetto php5-cgi per essere installato. Per questo motivo suphp è molto più lento di mod_php.
Ma Suphp aggiunge la sicurezza di identificare l'utente che ha eseguito lo script. Quindi, se devi eseguire php come cgi, allora suphp è il modo preferito. Tuttavia ci sono alternative molto migliori e più veloci come fastcgi, fpm ecc. che hanno prestazioni più elevate rispetto a cgi.
Suphp è costituito da due componenti:
1. mod_suphp - un modulo Apache che sostituisce mod_php
2. suphp - un binario setuid che sostituisce suexec di Apache, esegue php con i privilegi utente specifici.
1. Installa suphp su Ubuntu
1. Prima installa il modulo apache per suphp, pacchetto libapache2-mod-suphp
$ sudo apt-get install libapache2-mod-suphp
2. Quindi disabilita mod php, che è il gestore php predefinito su Ubuntu
$ sudo a2dismod php5 Module php5 disabled. Run '/etc/init.d/apache2 restart' to activate new configuration!
3. Ora riavvia Apache
$ 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 ]
Questo dovrebbe installare e abilitare suphp. Il file di configurazione per mod php si trova qui
$ cat /etc/apache2/mods-enabled/suphp.load LoadModule suphp_module /usr/lib/apache2/modules/mod_suphp.so
La configurazione di suphp per apache è qui
$ 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>
La configurazione di cui sopra rende suphp il gestore per i file php.
2. Imposta userid e groupid per ogni virtualhost
Per fare in modo che suphp esegua gli script php con uno specifico userid/groupid abbiamo bisogno di impostare la configurazione per ogni virtualhost nel file di configurazione di apache.
Il file di configurazione di apache su ubuntu si trova in
/etc/apache2/sites-available/default
Modifica l'host virtuale pertinente e aggiungi le impostazioni del gruppo utente suphp come mostrato di seguito. La direttiva suPHP_UserGroup dice ad Apache di usare l'id utente/groupid per l'host virtuale specifico.
<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>
Se non vuoi modificare il file di configurazione principale di Apache, crea un nuovo file nella stessa directory
/etc/apache2/sites-available/
E aggiungi il blocco virtualhost in quel file. Quindi applica le impostazioni usando il comando a2ensite.
$ sudo a2ensite file_name
3. Configura le autorizzazioni
Suphp fornisce anche "500 Internal Server Error" se un file php è scrivibile per gruppo. Il registro degli errori conterrà una voce come questa
SoftException in Application.cpp:564: Directory "/var/www" is writeable by group, referer: http://localhost/index.php
Per risolvere questo problema, controlla i permessi e assicurati che il gruppo o altri non abbiano alcun permesso su un file php in attesa di lettura.