misterunknown: Apache: Viele VHosts, wenig Sicherheit?

Moin,

ich habe auf meinem Server aktuell 5 produktive Webseiten laufen. Außerdem gibt es noch eine Reihe weiterer Subdomains, die ich für mich brauche. Insgesamt sind damit über 20 VHosts aktiv. Nun ist es ja so, dass der Apache immer unter _einem_ Benutzer läuft. PHP ist meistens auch aktiviert, da es für die Wordpress-Systeme beispielsweise nötig ist.

Damit bräuchte ein Hacker aber nur ein schädliches PHP-Skript auf _einen_ der VHosts bringen und könnte damit den Server lahm legen, inklive _aller_ anderen Seiten. Nun kann man schlecht 20 Apache-Instanzen auf einem Server laufen lassen, und ich kann innerhalb des Servers auch keine 20 VMs anlegen. Die Frage ist aber dennoch: Wie kann ich das Risiko, dass mir jemand alles zerlegt minimieren?

Massenhoster müssen ja das selbe Problem haben: Viele Kunden auf einem Server. Wenn eine Seite gehackt wird (oder der Kunde selbst auf den Kopf gefallen ist) dürfen die anderen Kundenseiten davon nicht betroffen sein.

Weiß jemand wie das bei Strato & Co. gelöst wird? Weiß jemand wie eventuell eine Lösung für mich aussehen könnte?

Ich würde mich über ein paar Anregungen freuen :)

Grüße Marco

--
Ich spreche Spaghetticode - fließend.
  1. Hallo,

    mit deinen paar Servern spielst du nicht mal annähernd in der Liga der von dir genannten Provider.

    Die benutzen ganz andere Apache-Versionen, die zudem noch "täglich" individuell angepasst werden, auch um Angriffe abzuwehren.

    Deren Lösungen kannst du also nicht mit deinen Möglichkeiten als User der Freeware-Version vergleichen.

    Lese dir schlicht die offiziellen Tutorials oder auch Beiträge im Internet durch und befolge sie. Dann hast du schon mehr getan als 99% aller Apache-User und dein System ist hinreichend sicher. Alles andere ist Übertreibung und Panikmache. Das bei dir vernünftige Firewalls laufen setze ich mal voraus.

    Gruss

    MrMurphy

  2. Hello Marco,

    ich habe auf meinem Server aktuell 5 produktive Webseiten laufen. Außerdem gibt es noch eine Reihe weiterer Subdomains, die ich für mich brauche. Insgesamt sind damit über 20 VHosts aktiv. Nun ist es ja so, dass der Apache immer unter _einem_ Benutzer läuft. PHP ist meistens auch aktiviert, da es für die Wordpress-Systeme beispielsweise nötig ist.

    Damit bräuchte ein Hacker aber nur ein schädliches PHP-Skript auf _einen_ der VHosts bringen und könnte damit den Server lahm legen, inklive _aller_ anderen Seiten. Nun kann man schlecht 20 Apache-Instanzen auf einem Server laufen lassen, und ich kann innerhalb des Servers auch keine 20 VMs anlegen. Die Frage ist aber dennoch: Wie kann ich das Risiko, dass mir jemand alles zerlegt minimieren?

    Massenhoster müssen ja das selbe Problem haben: Viele Kunden auf einem Server. Wenn eine Seite gehackt wird (oder der Kunde selbst auf den Kopf gefallen ist) dürfen die anderen Kundenseiten davon nicht betroffen sein.

    Weiß jemand wie das bei Strato & Co. gelöst wird? Weiß jemand wie eventuell eine Lösung für mich aussehen könnte?

    Der Apache kann mit unterschiedlichen Verfahren das Scripting bereitstellen.

    • Scriptinterpreter als Modul des Webservers (bei PHP weit verbreitet)
    • Zugriff über CGI,
    • Zugriff per Fast-CGI

    Die CGI-Varianten erlauben den Zugriff aus einer Change-Root-Umgebung heraus. Jedem VirtHost wird also ein eigener User zugewiesen. Dies ermöglicht eine Abgrenzung gegeneinander.

    Die Modul-Variante von PHP hat dafür die Einstellung "open_basedir" eingeführt, die nur dann zuverlässig arbeitet, wenn man sie für alle Virtual Hosts auch benutzt und zwar in der Admin-Variante, also per htaccess keine Änderungen mehr zulässt. Außerdem müssen die Verzeichnisse für tmp und sessions und möglichst auch logs auch getrennt werden, was über entsprechende Einstellungen ebenfalls geht.

    Jeder Request führt bei allen Varianten zu einem eigenen Worker-Thread, also einem eigenen Child. Die Speichernutzung ist damit auch gegeneinander abgegrenzt.

    Den Children kann man im Apachen ebenfalls Limitationen auferlegen, sodass ein Child nicht alle anderen platt machen kann.

    Spannend wird es jetzt erst bei Benutzung von Websockets, die der Apache noch nicht kennt und die daher parallel installiert werden müssen. Um die Kontrolle aber trotzdem per Apache-Einstellungen (wenigstens teilweise) durchführen zu können, kann man das Modul mod_proxy_wstunnel benutzen, das dann wenigstens ein kontrollierbares Routing auf den parallel laufenden Websocket-Server ermöglicht.

    Da ist die Entwicklung aber noch in den Startlöchern.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    Die ultimative Seite für Selbermacher
  3. Tach!

    Insgesamt sind damit über 20 VHosts aktiv. Nun ist es ja so, dass der Apache immer unter _einem_ Benutzer läuft. PHP ist meistens auch aktiviert, da es für die Wordpress-Systeme beispielsweise nötig ist.

    Es gibt die Möglichkeit, suEXEC zu verwenden und PHP als FCGI zu betreiben. Dann kann jedes Projekt unter einem eigenen Nutzer laufen.

    Massenhoster müssen ja das selbe Problem haben: Viele Kunden auf einem Server. Wenn eine Seite gehackt wird (oder der Kunde selbst auf den Kopf gefallen ist) dürfen die anderen Kundenseiten davon nicht betroffen sein.

    Die guten haben die genannte Variante, die schlechten haben PHP als Apache-Modul und versuchten früher mit dem Safe Mode was hinzudeichseln. Den gibts aber nicht mehr. open_base_dir ist die einzige verbliebene Abschottung. Die Empfehlung lautet .. siehe oben.

    Weiß jemand wie das bei Strato & Co. gelöst wird?

    Bei 1&1 kenne ich seit jeher nur die FCGI-Variante.

    dedlfix.

  4. Hello Marco,

    außerdem könntest Du dir auch mal
    http://linux-vserver.org/Welcome_to_Linux-VServer.org
    ansehen.

    Virtual Server sind sicherlich noch eine Stufe besser getrennt, als ChRoot-Umgebungen. Aber von gelegentlichen Löchern im System habe ich da auch schon gelesen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    Die ultimative Seite für Selbermacher
  5. Moin,

    ich danke euch sehr für eure Antworten. Ich habe mich jetzt für die Lösung mit SuExec und FCGI entschieden. Die Einrichtung war recht einfach, da ich im Wiki von Hetzner eine sehr brauchbare Anleitung gefunden habe.

    @Tom (zum Vorschlag Virtualisierung): Virtualisierung ist sicherlich noch etwas abgeschotteter, braucht aber auch mehr Rechenleistung, als ich zur Verfügung habe ;) Außerdem ist die Verwaltung so vieler virtueller Maschinen sicherlich viel Aufwand, den ich nur ungern betreiben will.

    Grüße Marco

    --
    Ich spreche Spaghetticode - fließend.