session_start - ¿Qué recomiendas para configurar un servidor compartido con php
session_start php ejemplos (4)
¿Qué recomienda para configurar un servidor compartido con php desde un punto de vista de seguridad / rendimiento?
- Apache mod_php (¿cómo se asegura eso? Que no sea safe_mode ya que no estará en PHP6)
- Apache CGI + suexec
- Lighttpd y genera un FastCGI por usuario
LE: No estoy interesado en usar un panel de control ya hecho porque estoy tratando de escribir el mío, así que quiero saber cuál es la mejor manera de configurarlo yo mismo. Estaba pensando en usar Lighttpd y engendrar un fastcgi para cada usuario alojado haciendo que el proceso fcgi se ejecute bajo sus credenciales (hay un tutorial para esto en la wiki de lighttpd). Esto sería algo seguro, pero ¿afectaría esto el rendimiento (muchos usuarios / memoria necesarios para cada fcgi) tanto que no es una solución viable?
Con respecto a PHP + FastCGI y seguridad, consulte esta publicación en el blog .
El desafío de asegurar un servidor de alojamiento compartido es cómo proteger el sitio web de ataques tanto desde el exterior como desde el interior. PHP tiene funciones incorporadas para ayudar, pero en última instancia es el lugar equivocado para abordar el problema.
Ya he escrito sobre varias soluciones que funcionan, pero una de las opciones que se me ha pedido una y otra vez es utilizar PHP + FastCGI. La creencia es que usar FastCGI superará los problemas de rendimiento de suexec o mod_suphp de Apache, ya que los procesos de FastCGI persisten entre vistas de página.
Pero antes de que podamos ver el rendimiento, la primera pregunta es: ¿cómo hacemos exactamente que PHP y FastCGI se ejecuten como usuarios diferentes en el servidor web en primer lugar?
Recomiendo Suhosin
Personalmente, mientras que Lighttpd está bien, iría con Nginx + FastCGI si terminas yendo con un servidor web liviano + solución FastCGI. He ejecutado pruebas comparativas y he leído todo el código, y Nginx es un orden de magnitud más rápido / más estable bajo carga, es muy bueno.
Pero, eso no es lo que preguntaste. Esencialmente, yo diría que hay un espectro de compensaciones de seguridad / escalabilidad vs. velocidad en las tres opciones que enumera, y solo necesita decidir dónde quiere estar. Si eres un proveedor de alojamiento compartido con usuarios que no son de confianza y que instalan aplicaciones de Dios sabe qué, te inclinarás más hacia la seguridad, si esto se comparte entre usuarios más confiables, podrías inclinarte hacia el rendimiento. Aquí están mis pensamientos:
CGI + suexec: Este es, de lejos, el más seguro y eficiente / escalable para usted en términos de cantidad de usuarios / sitios en un entorno de alojamiento compartido. Los procesos se generan y la memoria se usa solo cuando entran solicitudes. Por supuesto, el CGI-spawn hace que este sea el más lento para el tiempo de ejecución de scripts individuales. Cuanto mas lento? Debería tener un punto de referencia, pero generalmente si las personas ejecutan aplicaciones de larga ejecución (es decir, algo como WordPress que tarda 0.25-0.5 segundos solo para cargar sus libs e inicializar en cada solicitud), entonces la penalización de CGI-spawn comienza a verse bonita insignificante en contexto.
FastCGI: el problema aquí (y no importa si su servidor web es Apache, Lighttpd o Nginx) es averiguar cuántos procesos hijos FCGI deja que cada usuario deje en ejecución, porque cada proceso come memoria igual al tamaño del intérprete PHP (En Linux no todo está conectado, por supuesto, pero estoy divagando). Y, a diferencia de mod_php, estos procesos no se comparten entre los usuarios, por lo que debe limitarse por usuario. Por ejemplo, Dreamhost limita esto a 3 para sus clientes: ahora, para un cliente que ejecuta un sitio web que obtiene ráfagas de más de 2-5 páginas por segundo, eso es bastante malo porque esas solicitudes simplemente se acumulan y el sitio se cuelga. Ahora, me gusta FastCGI con un servidor web liviano cuando estoy ejecutando aplicaciones en un servidor / clúster dedicado , cuando puedo darle a la aplicación cientos de hijos de FCGI (todos con privilegios de servidor web, por supuesto, a la vista de Apache / prefork + mod_php). Pero, no creo que tenga sentido para el alojamiento compartido en el que tiene que asignar / limitar los hijos de FCGI por usuario.
Apache + mod_php: menos seguro ya que todo se ejecuta con los privilegios del servidor web, pero su grupo de procesos PHP en vivo se comparte, por lo que es mejor para el rendimiento final. Desde la perspectiva de un desarrollador, no puedo tolerar el modo php_safe, y desde una perspectiva de administrador de sistemas realmente es solo una ilusión de seguridad (mitiga contra usuarios estúpidos pero no protege de un ataque real) así que preferiría tener CGI si mi Otra opción debe incluir safe_mode.
Dreamhost es una especie de híbrido, hacen Apache CGI + suexec por defecto, pero dejan que el (pequeño) porcentaje de sus usuarios más sofisticados elija hacer FCGI si lo desean, sujeto a un tope y a su propio monitoreo de uso de memoria. . Eso ahorra una tonelada de recursos de memoria frente a habilitar FCGI para todos de forma predeterminada.
Otro problema si hablamos de hosting compartido comercial estándar es que Apache tiene todas las funciones, tiene módulos para casi cualquier cosa (incluyendo cosas como mod_security que pueda desear) y les gustará a sus usuarios porque todas sus configuraciones de .htaccess funcionarán. etc. - se encontrará con dolores de cabeza de soporte con cualquier otra cosa cuando vayan a instalar Drupal o WordPress o lo que sea (mucho menos un problema si estamos hablando de usuarios internos).
Personalmente, recomendaría simplemente mantenerlo simple para comenzar e ir con CGI + suexec para una mejor seguridad y escalabilidad. Si tus usuarios quieren FCGI o mod_php y tienes un buen canal abierto para sugerencias / comunicación con ellos, lo solicitarán, pero cualquiera de estos es un dolor de cabeza mucho más grande para ti, con solo mejoras de rendimiento marginales para ellos, así que mi sugerencia sería no hacer ninguno de los dos al principio, sino ser receptivos si claman por ello.
Simpatizo con el deseo de hacer algo "interesante" como Lighttpd + FCGI en lugar del Apache + CGI + suexec estándar, pero en el fondo no puedo recomendarlo.
Si está ejecutando múltiples servidores, podría terminar poniendo CGI en algunos y algo más para los usuarios avanzados en los demás. ¡Y asegúrese de tener cron grep todos los dir de www para cosas como versiones antiguas de phpBB!