Estoy configurando un servidor web que alojará varios sitios web diferentes como Apache VirtualHosts, cada uno de ellos tendrá la posibilidad de ejecutar scripts (principalmente PHP, posiblemente otros).
Mi pregunta es cómo aislar cada uno de estos VirtualHosts entre sí y del resto del sistema. No quiero, por ejemplo, que el sitio web X lea la configuración del sitio web Y o cualquiera de los archivos "privados" del servidor.
Por el momento, he configurado 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 SUExec solo impide que los usuarios editen / ejecuten archivos que no sean los suyos; los usuarios aún pueden leer información confidencial como archivos de configuración.
He pensado en eliminar el permiso de lectura global de UNIX para todos los archivos en el servidor, ya que esto solucionaría el problema anterior, pero no estoy seguro de si puedo hacerlo sin interrumpir la función del servidor.
También examiné el uso de chroot, pero parece que esto solo se puede hacer por servidor y no por host virtual.
Estoy buscando sugerencias que aislen mis VirtualHosts del resto del sistema.
PD: estoy ejecutando el servidor Ubuntu 12.04
Mi RESPUESTA: Terminé casi siguiendo mi configuración actual, pero haciendo una cárcel chroot para todos los hosts virtuales, por ejemplo, tener la cárcel chroot /var/www
y luego tener todos los datos de los usuarios en subcarpetas, cada uno con permisos de grupo / otros r / w / x discapacitado. Esta opción era deseable, especialmente porque todo es posible sin modificaciones en el código fuente.
Seleccioné la respuesta de @Chris porque estaba completamente escrita y también consideraba FTP y SELinux
fuente
mod_userdir
ofrece alojamiento virtual de dominios separados. Además, me preocupa la seguridad en términos de aislamiento, ya que no puedo encontrar nada sobre eso entre los directorios de usuarios dentro de Apache. Parece que no ofrece esa característica.Sugiero a echar un vistazo a
suphp
o PHP-FPM .Básicamente permitirá que el intérprete de PHP 'su' a algún usuario específico configurado para ese VirtualHost. Eso le permitirá utilizar los permisos generales del sistema de archivos para aislar cada VirtualHost.
Recomendaría FPM por consideraciones de rendimiento. Desde la página de inicio, esto es lo que más le interesa:
fuente
Mira dentro
chroot
.Algunos puntos de partida:
Chrooting Apache hecho simple
Entorno Chroot para Apache (Debian)
Apache Chroot Jail: Alojamiento virtual
fuente
/var/www
, y hacer que todos los hosts estén en un subdirectorio allí, cada uno de estos subdirectorios haya eliminado el permiso global de ejecución / lectura.chroot
, y puedes hacerlo por servidor virtual. Aquí hay un ejemplo. En este caso, están usandomod_chroot
.