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
quelle
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.Ich schlage vor, einen Blick auf
suphp
oder PHP-FPM zu werfen .Grundsätzlich kann der PHP-Interpreter einem bestimmten Benutzer, der für diesen VirtualHost konfiguriert ist, "su". Auf diese Weise können Sie allgemeine Dateisystemberechtigungen verwenden, um jeden einzelnen VirtualHost zu isolieren.
Ich würde FPM aus Leistungsgründen empfehlen. Von der Homepage aus ist dies für Sie am interessantesten:
quelle
Schau hinein
chroot
.Einige Ausgangspunkte:
Apache Chrooting leicht gemacht
Chroot-Umgebung für Apache (Debian)
Apache Chroot Jail: Virtuelles Hosting
quelle
/var/www
, und alle Hosts müssen sich dort in einem Unterverzeichnis befinden, wobei jedes dieser Unterverzeichnisse die globale Ausführungs- / Leseberechtigung entfernt hat?chroot
, und Sie können es pro virtuellem Server tun. Hier ist ein Beispiel. In diesem Fall verwenden siemod_chroot
.