Ich richte einen Webserver ein, der eine Reihe verschiedener Websites als Apache VirtualHosts hostet. Jede dieser Websites bietet die Möglichkeit, Skripte auszuführen (hauptsächlich PHP, möglicherweise andere).
Meine Frage ist, wie ich jeden dieser VirtualHosts voneinander und vom Rest des Systems isoliere. Ich möchte nicht, dass beispielsweise Website X die Konfiguration von Website Y oder einer der "privaten" Dateien des Servers liest.
Im Moment habe ich die VirtualHosts mit FastCGI, PHP und SUExec wie hier beschrieben eingerichtet ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec) -easy-way.html ), aber die SUExec verhindert nur, dass Benutzer andere als ihre eigenen Dateien bearbeiten / ausführen. Die Benutzer können weiterhin vertrauliche Informationen wie Konfigurationsdateien lesen.
Ich habe darüber nachgedacht, die globale UNIX-Leseberechtigung für alle Dateien auf dem Server zu entfernen, da dies das oben genannte Problem beheben würde, bin mir jedoch nicht sicher, ob ich dies sicher tun kann, ohne die Serverfunktion zu stören.
Ich habe mich auch mit der Verwendung von chroot befasst, aber es scheint, dass dies nur pro Server und nicht pro virtuellem Host möglich ist.
Ich suche nach Vorschlägen, die meine VirtualHosts vom Rest des Systems isolieren.
PS Ich verwende Ubuntu 12.04 Server
Meine ANTWORT: Ich endete damit, dass ich fast meiner aktuellen Konfiguration folgte, aber ein Chroot-Gefängnis für alle virtuellen Hosts durchführte, z. B. das Chroot-Gefängnis in /var/www
und dann alle Benutzerdaten in Unterordnern mit Gruppen- / anderen R / W / X-Berechtigungen deaktiviert. Diese Option war besonders deshalb wünschenswert, weil alles ohne Änderungen am Quellcode möglich ist.
Ich habe die Antwort von @Chris ausgewählt, weil sie gründlich geschrieben wurde und auch FTP und SELinux berücksichtigt
mod_userdir
virtuelles Hosting von separaten Domains angeboten wird. Außerdem habe ich Bedenken hinsichtlich der Sicherheit in Bezug auf die Isolation, da ich zwischen den Benutzerverzeichnissen in Apache nichts darüber finden kann. Es scheint diese Funktion einfach nicht zu bieten.