Apache, suexec, PHP, suPHP

13

Si bien estoy bastante cómodo como usuario de Linux , mi Linux Admin-fu es un poco débil. Por lo tanto, estoy aquí buscando orientación con un servidor CentOS que estoy a punto de construir.

Necesito configurar un servidor web Apache2 para algunos de nuestros clientes. Quiero que el contenido web de cada cliente esté bajo su directorio de inicio ( USERDIRen apache.conf, ¿verdad?) Para los sitios HTML estáticos. Quiero que Apache se ejecute como cliente ( suexec?). Algunas de sus cosas serán aplicaciones PHP y tengo la impresión de que también querré verlas suphp.

Básicamente, quiero parecer una versión pequeña de una empresa de alojamiento web compartido. Teniendo en cuenta lo común que las personas son pensé que iba a encontrar fácilmente una corriente agradable guía de instrucciones sobre cómo configurar esta todo para arriba, pero hasta ahora he tenido muy poca suerte. Sospecho que mis palabras de búsqueda están apagadas.

Entonces, las preguntas (siéntase libre de responder cualquiera o todas):

  1. ¿Alguien tiene algunos enlaces sólidos a guías actuales / modernas que me ayudarían a configurar todo esto? No, el sitio de documentación de apache no es una guía ;-)
  2. Dado que tengo una combinación de sitios estáticos y aplicaciones PHP, ¿quiero / necesito instalar suexec y suphp? Si es así, ¿eso presenta algún desafío que debería tener en cuenta?
  3. ¿Debería buscar otras opciones en lugar de suexec y suphp?

Planeo dar a los usuarios finales SSH, SFTP o SCP acceso a sus cosas (si eso afecta algo).

Gracias de antemano por tu ayuda.

[Editar] Debería haber mencionado esto antes: un objetivo clave de mi búsqueda para emular un proveedor de alojamiento compartido relacionado con permisos de archivos y propiedad. Realmente me gustaría tener que evitar enseñar a los usuarios sobre la necesidad de cambiar esas cosas solo para ver sus adiciones / cambios.

Chris_K
fuente

Respuestas:

15

El uso de suexec y suphp impone un tipo de separación de privilegios diferente al predeterminado.

El valor predeterminado es separar el permiso del usuario del servidor web. Es decir, el usuario posee los archivos y debe otorgarle al servidor web permiso para verlos y cambiarlos.

El modelo suexec / suphp es que el servidor web (cuando ejecuta scripts) se ejecuta bajo la cuenta del usuario, por lo que el sitio web tiene permiso para hacer cualquier cosa que el usuario tenga permiso para hacer. Hasta cierto punto, esto elimina la separación entre el usuario y el servidor web, pero a cambio impone una separación DIFERENTE: es decir, entre el sitio web de un usuario y el sitio web de un usuario diferente en la misma casilla.

De forma predeterminada, PHP siempre se ejecuta bajo la cuenta de usuario de Apache, por lo que los scripts PHP de un sitio web pueden acceder a cualquier archivo que los scripts PHP de otro sitio puedan tener. Por lo tanto, si una cuenta en el servidor es pirateada, la infección puede extenderse a las otras. SuPHP previene esto.

Ni suexec ni suphp afectarán la forma en que apache sirve contenido estático . Todas las viejas reglas todavía se aplican. En cambio, suexec y suphp cambian la cuenta bajo la cual se ejecutarán CGI y PHP (respectivamente). Suexec hace que el ejecutable CGI se ejecute bajo la cuenta del propietario, mientras que SuPHP hace que los scripts PHP se ejecuten bajo la cuenta del propietario.

Suexec y SuPHP no son necesariamente mejores . Solo son diferentes . No evitarán que un sitio web sea pirateado (y posiblemente podría hacer que el sitio sea ​​más fácil de hackear), pero evitarán que un compromiso en un sitio se propague a todos los demás. Para el administrador del sitio, este aislamiento es posiblemente más importante, por lo que algunos sistemas de alojamiento compartido hacen que suexec y suphp sean los predeterminados.

Una "trampa" extremadamente común es que SuPHP verifica la propiedad y los permisos de un script antes de que se ejecute, y devolverá un error 500 si los permisos no son apropiados.

En particular:

  • El propietario y el grupo del archivo deben coincidir con el propietario del sitio web (como se establece en la configuración de apache)
  • El archivo no debe poder escribirse en todo el mundo
  • El directorio principal no debe ser de escritura mundial
tylerl
fuente
Entonces, saber que quiero emular un modelo de alojamiento compartido (como usted señaló, mantener a los usuarios separados) es el modelo suexec / suphp la forma en que quiero ir o ¿cree que hay mejores opciones? También he editado la publicación para indicar que un objetivo clave es evitar enseñar a los usuarios sobre la necesidad de modificar los permisos de los archivos o los propietarios solo para ver sus cambios o adiciones.
Chris_K
2
suexec / suphp es una buena solución para lo que buscas.
tylerl
Preferiría suphp a suexec. Es más seguro, creo.
Vladislav Rastrusny
@FractalizeR: Normalmente usas ambos al mismo tiempo. SuPHP es para PHP, suexec es para CGI. Puede ejecutar PHP sobre suexec ejecutando PHP como CGI, pero eso es un poco innecesario ya que existen mejores opciones (más seguras, más eficientes) para PHP.
tylerl
@tylerl: Muchas gracias por tu respuesta. ¿Cuáles son las soluciones más seguras / eficientes para PHP a las que se refiere?
benjamin