11 votos

Aislar los VirtualHost de Apache del resto del sistema

Estoy configurando un servidor web que será el anfitrión de un número de diferentes sitios web como Apache VirtualHosts, cada una de ellas tendrá la posibilidad de ejecutar scripts (principalmente PHP, possiblu otros).

Mi pregunta es cómo puedo aislar cada uno de estos VirtualHosts de simpatia y desde el resto del sistema? No quiero que por ejemplo, sitio web de X para leer la configuración de la página web Y o cualquiera de los del servidor "privado" de los archivos.

En el momento en el que me han puesto hasta los VirtualHosts con FastCGI, PHP y SUExec como se describe aquí (http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec-easy-way.html), pero la SUExec sólo impide que los usuarios de la edición/ejecución de archivos que no sean sus propios - los usuarios pueden leer la información sensible, tales como archivos de configuración.

He pensado en quitar el UNIX global permiso de lectura para todos los archivos en el servidor, ya que esto podría solucionar el problema anterior, pero no estoy seguro de si puedo hacerlo con seguridad sin interrumpir la función de servidor.

También he mirado en el uso de chroot, pero parece que esto sólo puede ser hecho por el servidor de base, y no por virtual-host.

Estoy buscando cualquier sugerencia de que va a aislar mi VirtualHosts del resto del sistema.

PS yo estoy usando Ubuntu 12.04 server

Mi RESPUESTA: he terminado con casi después de mi configuración actual, sino de hacer un chroot a la cárcel por todos los hosts virtuales, como por ejemplo tener el chroot jail en /var/www y luego de tener todos los datos de los usuarios en las subcarpetas de cada grupo/otros r/w/x permisos de movilidad. Esta opción era deseable, sobre todo porque todo es posible, sin ningún tipo de modificaciones en el código fuente.

He seleccionado @Chris respuesta, porque estaba completamente escrito y también se considera SELinux y FTP

6voto

gertvdijk Puntos 2040

Sugiero echar un vistazo a suphp o PHP-FPM.

Es básicamente permitir el intérprete de PHP a 'su' a algunos de usuario configurado para que VirtualHost. Que les permitirá utilizar el archivo general de sistema de permisos para aislar cada VirtualHost.

Yo recomendaría FPM para consideraciones de rendimiento. Desde la página de inicio esto es lo que es de mayor interés para usted:

También de interés son la de cada grupo de usuario y de grupo de opciones, que permiten ejecutar específico fpm piscina en el uid y gid; adiós suphp!

4voto

nojak Puntos 824

Buscar en chroot.

Algunos puntos de partida:

Apache enjaulamiento hecho simple

Entorno Chroot para Apache (Debian)

Apache Cárcel Chroot: Hosting Virtual

4voto

Chris Puntos 198

Esto se puede hacer mediante la activación de la mod_users módulo en Apache.

Usted necesitará el programa de instalación de UserDir en tu configuración de apache. Sugiero hacer esto en un archivo de configuración independiente y la incluyen. Envuelva la incluyen en

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

Te puedo dar todo el tutorial, pero esto debe empezar por la configuración de Apache: http://www.techytalk.info/enable-userdir-apache-module-ubuntu-debian-based-linux-distributions/

Sugerencia si está ejecutando SELinux (y debe) tendría que dar Apache acceso de lectura para el usuario de los hogares. Usted puede hacer esto mediante el establecimiento de:

sudo setsebool -P httpd_enable_homedirs=On

También las necesidades de los permisos de archivo para el usuario dirs directorio public_html y r-x permisos en los directorios padre hasta la root.

Obviamente, usted necesita el programa de instalación de chroot para los usuarios, por ejemplo, en vsftpd. Instalar:

apt-get vsftpd

Para configurar enjaulamiento abra /etc/vsftpd/vsftpd.conf con vi o nano. Encuentre y elimine o agregue: chroot_local_user=yes

Usted puede conseguir el mismo comportamiento para sftp que recomiendo a través de FTP, abra /etc/ssh/sshd_config y agregar un Partido de bloque y esta línea:

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

Esto chroot cualquier usuario en el web_users grupo. También sería necesario para denegar el acceso a la shell de configuración a /sbin/nologin:

useradd -G "web_users" -s /sbin/nologin new_user

Si esto va a ser un público servidor de producción, además recomiendo aplicar algunas de endurecimiento en el sistema operativo, OpenSSH, Apache, PHP, vsftpd y aplicar algunas estricta iptables y los wrappers TCP. Yo recomiendo dejar de SELinux en el lugar también.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: