Suphp
Suphp php handler es un módulo de apache (mod_suphp) que ejecuta scripts php con propiedad y permiso de un usuario específico.
Esto se ve como una mejora de la seguridad ya que el sistema puede realizar un seguimiento de la secuencia de comandos php del usuario que se está ejecutando (y causando problemas, si los hay).
En entornos de alojamiento compartido, suphp es muy popular ya que es muy fácil de instalar y configurar.
Suphp ejecuta php como cgi. Por lo tanto, necesita que se instale el paquete php5-cgi. Debido a esto, suphp es mucho más lento que mod_php.
Pero Suphp agrega la seguridad de identificar al usuario que ejecutó el script. Entonces, si necesita ejecutar php como cgi, entonces suphp es la forma preferida. Sin embargo, existen alternativas mucho mejores y más rápidas como fastcgi, fpm, etc. que tienen un rendimiento más alto en comparación con cgi.
Suphp consta de dos componentes:
1. mod_suphp:un módulo de Apache que reemplaza a mod_php
2. suphp:un binario setuid que reemplaza a suexec de Apache, ejecuta php con los privilegios de usuario específicos.
1. Instalar suphp en Ubuntu
1. Primero instale el módulo apache para suphp, paquete libapache2-mod-suphp
$ sudo apt-get install libapache2-mod-suphp
2. A continuación, deshabilite mod php, que es el controlador de php predeterminado en ubuntu
$ sudo a2dismod php5 Module php5 disabled. Run '/etc/init.d/apache2 restart' to activate new configuration!
3. Ahora reinicie 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 ]
Esto debería instalar y habilitar suphp. El archivo de configuración para mod php se encuentra aquí
$ cat /etc/apache2/mods-enabled/suphp.load LoadModule suphp_module /usr/lib/apache2/modules/mod_suphp.so
La configuración de suphp para apache está aquí
$ 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 configuración anterior hace que suphp sea el controlador de archivos php.
2. Establezca el ID de usuario y el ID de grupo para cada virtualhost
Para hacer que suphp ejecute los scripts php con un ID de usuario/ID de grupo específico, necesitamos establecer la configuración para cada servidor virtual en el archivo de configuración de Apache.
El archivo de configuración de apache en ubuntu se encuentra en
/etc/apache2/sites-available/default
Edite el host virtual relevante y agregue la configuración del grupo de usuarios de suphp como se muestra a continuación. La directiva suPHP_UserGroup le dice a apache que use el ID de usuario/ID de grupo para el host virtual específico.
<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>
Si no desea editar el archivo de configuración principal de Apache, cree un nuevo archivo en el mismo directorio
/etc/apache2/sites-available/
Y agregue el bloque virtualhost en ese archivo. Luego aplique la configuración usando el comando a2ensite.
$ sudo a2ensite file_name
3. Configurar permisos
Suphp también da "Error interno del servidor 500" si un archivo php se puede escribir por grupo. El registro de errores tendrá una entrada como esta
SoftException in Application.cpp:564: Directory "/var/www" is writeable by group, referer: http://localhost/index.php
Para solucionar esto, verifique los permisos y asegúrese de que ese grupo u otros no tengan ningún permiso en un archivo php que espera leer.