Open Source im professionellen Einsatz
Linux-Magazin 01/2003

Virtuelle Serverkontexte in der Praxis

Teile und herrsche

Mehrere Linux-Systeme nebeneinander auf einem Computer: Virtuelle Serverkontexte bieten diese Sicherheit stiftende Trennung ohne den Overhead von Emulatoren. Selbst Root kann aus seinem kleinen Königreich nicht ausbrechen.

789

Sicherheit durch den Sandkasten: Das mit Java bekannt gewordene Konzept funktioniert unter Linux auch für Serverprozesse. Besonders beim Hosten mehrerer Webauftritte mit aktiven Inhalten (Server-Side Scripting) möchten sicherheitsbewusste Admins ihre Klientel voneinander trennen. Auch ganz normale Server sind in einer gekapselten Umgebung so gut aufgehoben, dass ein erfolgreicher Crackangriff nur Teile des Systems in Mitleidenschaft zieht.

Virtuelle Serverkontexte (VServer,[1]) bieten genau diesen Schutz. Sie führen Programme in einer abgeschotteten Umgebung aus, die die Auswirkungen eines erfolgreichen Angriffs eingrenzt. Die Idee ist so alt wie Unix selbst: Die einfachste Variante ist, einen eigenen Benutzer für jeden Dienst einzurichten. Die Unix-Zugriffsrechte verhindern, dass ein Eindringling Dateien anderer Benutzer verändert oder auch nur liest. Einen Schritt weiter gehen Change-Root-Umgebungen (»chroot«), sie setzen das Wurzelverzeichnis für einen Prozess auf ein Unterverzeichnis. Dieser Prozess ist im Verzeichnisbaum gefangen und sieht keine Dateien außerhalb.

Bei beiden Varianten bleiben dem Angreifer die Prozesse der anderen User verborgen. Erhält er jedoch Root-Rechte, kann er aus dem »chroot«-Käfig ausbrechen, beliebige Dateien modifizieren oder sonstigen Schaden anrichten.

Diese Probleme sind bei Emulatoren nicht vorhanden. Die einfachste Variante dieser Gattung ist der User-Mode-Kernel[2]: Der zusätzliche Kernel läuft als virtuelle Maschine und verhält sich aus Sicht des echten Kernels wie eine Anwendung. Prozesse, die unter dem User-Mode-Kernel laufen, haben keinen Zugriff auf das umgebende Linux-System. Einen Schritt weiter gehen VMWare[3] oder die LGPL-lizenzierte Alternative Plex86[4], sie emulieren die komplette Peripherie eines PCs inklusive Festplatte, Netzwerk- und Grafikkarte.

Emulatoren als Alternative

Mit Emulatoren lässt sich die gleiche Installation auf unterschiedlicher Hardware einsetzen, etwa SCSI auf IDE und umgekehrt. Auf diesen virtuellen PC kann man fast beliebig Betriebssysteme und Anwendungen installieren. Da Emulatoren einen eigenen Speicherbereich sowie virtuelle Festplatten in Form von Dateien auf dem Hostsystem benötigen, ist es unmöglich, aus dem virtuellen System auszubrechen. Selbst wenn ein Angreifer einen Root-Zugang erlangt, ist das Basissystem vor ihm geschützt. Den Computer kann er nur durch CPU-, Festplatten- oder Netzwerklast stören.

Noch weiter gehen Systeme wie Bochs[5] (LGPL-Lizenz), die zusätzlich zur Peripherie auch den Prozessor emulieren. Damit fungiert beispielsweise ein Macintosh-Rechner als PC mit Athlon-Prozessor. Allerdings kostet das Emulieren viel Rechenleistung, die virtuelle Ausführungsgeschwindigkeit liegt im Bereich von wenigen MHz. Für praktische Anwendungen ist dieser Ansatz daher kaum geeignet.

Zudem belegen User-Mode-Linux und die Emulatoren sehr viel RAM, da jede virtuelle Maschine einen eigenen Kernel inklusive Puffer, Cache und freiem Speicher benötigt. Hinzu kommen noch die im Emulator laufenden Prozesse. Die Maschinen können keine dieser Ressourcen gemeinsam nutzen, sie benötigen auch jeweils den Festplattenplatz für ein komplettes Linux-System.

Listing 1: Pakete
installieren

01 #!/bin/bash
02 TARGETDIR=/vserver/suse
03 TMPDIR=/tmp/rpmdir
04 PKGLIST=/tmp/paketliste
05 SRCDIR=/media/dvd
06 ARCH=i586
07 
08 rm -rf $TMPDIR
09 mkdir -p $TMPDIR
10 cd $TMPDIR
11 for pkg in `cat $PKGLIST` ; do
12     for rpm in $SRCDIR/suse/${ARCH}/${pkg}-[0-9]*.rpm ; do
13         test -f ${rpm} && ln -s ${rpm} .
14     done
15     for rpm in $SRCDIR/suse/noarch/${pkg}-[0-9]*.rpm ; do
16         test -f ${rpm} && ln -s ${rpm} .
17     done
18 done
19 test -d $TARGETDIR || mkdir -p $TARGETDIR
20 mkdir -p $TARGETDIR/etc
21 mkdir -p $TARGETDIR/var/lib/rpm
22 cp /etc/passwd /etc/shadow /etc/group* $TARGETDIR/etc
23 rpm --root=$TARGETDIR --initdb
24 rpm --root=$TARGETDIR -hiv *.rpm

Viele Könige neben mir

Virtuelle Serverkontexte sind ein eleganter Zwischenweg. Es handelt sich dabei um Change-Root-Käfige mit wichtigen Zusätzen. Seit den 2.2er Kerneln können Root-Prozesse Teile ihrer Sonderrechte abgeben, die so genannten Capabilities. Capabilities sind zum Beispiel die Rechte, einen Port zu binden, die Uhrzeit zu ändern oder beliebige Prozesse zu beenden, weitere Beispiele zeigt Tabelle 1. Ohne die Capabilities darf ein Prozess keine dieser Aufgaben mehr ausführen. Informationen dazu finden sich in den Kernelquellen in der Datei »include/ linux/capability.h«.

Die Kombination aus reduzierten Capabilities und Change-Root-Umgebung ergibt ein recht sicheres Subsystem, in dem ein Eindringling mit (reduzierten) Root-Rechten nur wenig Unsinn anstellen kann. Der Angreifer sieht aber noch alle Prozesse auf der Maschine, auch jene, die außerhalb seiner Umgebung laufen. Das ändert VServer durch ein Kernel-Patch, das so genannte Kontexte einführt. Jeder Kontext kapselt seine eigenen Prozesse. Das verhindert, dass ein Angreifer andere Prozesse des Hostsystems stört. Trotzdem laufen alle Kontexte mit dem gleichen Kernel und benutzen das gleiche RAM, den gleichen Cache und die gleiche Festplatte.

Der Overhead dieses Verfahrens ist recht gering, ein Rechner kann bei gleicher Leistung deutlich mehr virtuelle Server ausführen, als dies mit Emulatoren möglich wäre. Für ganz Knauserige gibt es ein Skript, das die einzelnen Kontexte vergleicht und identische Dateien (bis auf Konfigurationsdateien) durch Hardlinks ersetzt. Egal wie viele Kontexte laufen, der Platz für identische Files ist nur einmal nötig.

Tabelle 1: Einige Capabilities

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • System-Parzellen

    Als eine Spielart der Virtualisierung beherrscht Linux auch die Partitionierung des Betriebssystems, was zu besonders schnellen und einfach administrierbaren virtuellen Servern führt. Wie man mit Vserver am schnellsten zum Ziel gelangt und was die Unerschiede zu OpenVZ sind, erläutert dieser Beitrag.

  • Mehrarbeit für CPUs

    Virtualisierung ist nicht gleich Virtualisierung. Es gibt verschiedene Konzepte, Projekte und Produkte mit jeweils eigenen Stärken und Schwächen. Wer sie genau kennt, kann das beste Verfahren für seine Bedürfnisse auswählen. Allen gemeinsam ist: Die CPUs bekommen mehr zu tun.

  • Container-Terminal

    Zuweilen ändert sich mit einem Releasewechsel ja kaum mehr als die Versionsnummer. Dem neuen Solaris darf man das nicht nachsagen: Über 600 Neuerungen haben Eingang in die zehnte Auflage gefunden, darunter das innovative DTrace oder das Container-Konzept, das einen Blick über den Linux-Tellerrand lohnt.

  • Projekteküche

    Auch im vergangenen Monat gab es einige Neuigkeiten in der Welt der freien Software. Wir picken die Leckerbissen heraus. Dieses Mal: Alles über XFce 4.2, PCs im PC, QBuildkde zum einfachen Kompilieren von KDE und Neuigkeiten zur Sarge-Release. Feinschmecker verwöhnen ihren Gaumen mit einem Apfelkuchen.

  • Von wegen tugendhaft

    Der Lateiner kennt "Virtus" als die Tugend, die es oft vorzutäuschen gilt, genau wie moderne Virtualisierungslösungen die Hardware. Jetzt droht auch Red Hat, mit dem Produkt RHEV mit- und die Konkurrenz aufzumischen. Doch die rote Tugend hat so manchen dunklen Fleck.

comments powered by Disqus

Ausgabe 11/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.