01.12.2012 Aufrufe

die datenschleuder. - Chaosradio - CCC

die datenschleuder. - Chaosradio - CCC

die datenschleuder. - Chaosradio - CCC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Nun wird das Gastgebersystem<br />

als NAT-Router konfiguriert. Ein<br />

Destination-NAT erlaubt z.B. <strong>die</strong><br />

Weiterleitung von Anfragen auf<br />

bestimmten Ports des Gastgebers<br />

an bestimmte Gastsysteme. Ein<br />

Source-NAT gibt dem Gast Zugriff<br />

auf das äußere Netzwerk. Natürlich<br />

kann man stattdessen auch<br />

einen Proxy aufsetzen oder Netzwerkzugriff<br />

vom Gastsystem ganz<br />

unterbinden.<br />

Gastsystem vorbereiten,<br />

Teil I: Kern<br />

Zunächst wird der jüngste UML-<br />

Patch auf passende Kernelquellen<br />

appliziert. Nun wird konfiguriert<br />

und kompiliert, z.B. mittels:<br />

make menuconfig ARCH=um<br />

make linux ARCH=um<br />

Unterstützung für SMP und SKAS lassen sich noch nicht<br />

gleichzeitig verwenden. Bis <strong>die</strong>se Funktionalität vorhanden<br />

ist, sei den Administratoren von SMP-Gastgebersystemen<br />

empfohlen sich für SKAS und gegen SMP zu entscheiden.<br />

Wird das Feature hostfs aktiviert, so kann auf dem Gastsystem<br />

jedes Verzeichnis des Gastgebers eingebunden werden,<br />

und zwar mit allen Rechten des Benutzers, unter dessen<br />

Namen der UMLinux-Prozess läuft:<br />

mount -t hostfs none /mnt -o /usr<br />

Diese Dateizugriffsmethode ist sehr effizient (siehe Tabelle),<br />

allerdings i.a. aus Sicherheitsgründen unerwünscht. Seit<br />

April steht unter dem Namen humfs ein Nachfolger von<br />

hostfs zur Verfügung, das Dateirechte intelligenter handhabt.<br />

Teil II. Wurzeldateisystem<br />

Als Wurzeldateisystem kann ein Dateisystem in einer Datei,<br />

eine Partition, ein Verzeichnis auf dem Gastgeber oder<br />

auch ein per NFS exportiertes Verzeichnis verwendet werden.<br />

Eine attraktive Spezialität sind Copy on Write Geräte.<br />

Diese bestehen aus einem Dateisystemimage und einer<br />

sogenannten Backing-Datei. Diese Gesamtheit wird auf<br />

dem Gastsystem schreibbar eingebunden. Alle Änderungen<br />

werden in der Backing-Datei gespeichert, sodass das Dateisystemimage<br />

von mehreren Gastsystemen gleichzeitig verwendet<br />

werden kann. Anfängern sei empfohlen ein fertiges<br />

Dateisystemimage herunterzuladen, später kann man<br />

ein solches auch selbst erzeugen. Rootstrap wurde getestet<br />

und für gut befunden, es stehen noch etliche andere Werkzeuge<br />

<strong>die</strong>ser Art zur Verfügung.<br />

Gastsystem starten<br />

52 52<br />

Rechenleistung<br />

MFLOPS *<br />

hostfs<br />

MB/s (CPU/%) **<br />

ext3 auf ubd<br />

MB/s (CPU/%) **<br />

nfs<br />

MB/s (CPU/%) **<br />

tcp stream<br />

Mbit/s (CPU/%)<br />

***<br />

Beim Starten von UMLinux wird <strong>die</strong> Größe des zu verwendenden<br />

Speicherbereichs angegeben (mem=xxxM). Dieser<br />

Wert sollte nicht zu groß gewählt werden, denn nicht<br />

benötigter Platz wird nicht mehr freigegeben (s.o.). Falls<br />

UMLinux mit Unterstützung für devfs kompiliert wurde,<br />

das System auf dem Rootdateisystemimage jedoch<br />

MATRJOSHKA LINUX<br />

Gastgeber Gast<br />

113,6 112,3<br />

R 19,5 (15)<br />

W 21,7 (60)<br />

#83 / 2004<br />

kein devfs unterstützt, muß mit<br />

devfs=none gestartet werden. Konsolen<br />

des virtuellen Systems können<br />

unter anderem mit ttys, ptys<br />

und xterms auf dem Host verbunden<br />

werden. Dies ist zur Konfiguration<br />

des Netzwerks und des SSH-Daemons<br />

nützlich. Später kann dann mit<br />

(con=none) gestartet werden. Ferner<br />

weist man das Gastsystem an, eth0<br />

mit einem bestimmten Tap-Gerät auf<br />

dem Gastgebersystem zu verwbinden<br />

(eth0=tuntap,tap0,...). Auf dem<br />

Gastsystem wird eth0 dann z.B. Mit<br />

ifconfig konfiguriert. Weitere (teilweise<br />

nur dort dokumentierte) Kommandozeilenoptionen<br />

finden sich auf [2].<br />

Leistungsfähigkeit<br />

Der Prozessor und <strong>die</strong> Festplatten des<br />

Gastgebersystems können ohne große<br />

Performanceeinbußen verwendet<br />

werden (siehe Tabelle 1 und Fußnoten).<br />

Tun/Tap Netzwerkgeräte brauchen Rechenleistung<br />

und können derzeit nur einen Prozessor verwenden. Wird<br />

anstelle von zwei Xeon Prozessoren mit 550 Mhz ein Athlon<br />

mit 1 GHz eingesetzt, lassen sich 100 Mbit/s erzielen.<br />

Wenn viele System Calls ausgeführt werden sollen, sind <strong>die</strong><br />

SYSEMU-Patches [3] interessant.<br />

Nicht sicher genug?<br />

Für UML-2.4.17-8 existiert ein Proof of Concept Exploit<br />

[4]. Es ist vorstellbar, auf dem UML-System root zu werden<br />

und anschließend auszubrechen. Im SKAS-Modus der<br />

heutigen UML-Kernels besteht <strong>die</strong>se konkrete Möglichkeit<br />

nicht mehr. UMLinux lässt sich außerdem statisch linken<br />

und läuft dann auch in einem schlanken Chroot-Jail.<br />

Dieses muß neben dem Wurzeldateisystemimage lediglich<br />

den Tun/Tap-Device-Node, /proc/cpuinfo und /proc/<br />

mm enthalten. Die letzteren beiden lassen sich mit mount -<br />

-bind vom Jail aus zugänglich machen, nachdem man mit<br />

touch(1) entsprechende Ziel-Inodes erstellt hat. Nicht<br />

erforderlich aber sinnvoll ist ein tmpfs um das RAM-Image<br />

aufzunehmen. Das tatsächliche Starten des Kernels lässt<br />

sich z.B. mit jail_uml aus den UML-Utilities bewerkstelligen.<br />

Fazit<br />

Ein einfaches System für Virtuelles Hosting mit User Mode<br />

Linux lässt sich innerhalb weniger Stunden aufsetzen. Auf<br />

preiswerter Hardware kann man gute Performance erzielen.<br />

Es gibt übrigens bereits etliche kommerzielle Anbieter[5].<br />

Wer trotz SKAS-Mode noch um <strong>die</strong> Sicherheit seines<br />

Systems fürchtet, hat <strong>die</strong> Möglichkeit jeden UML-Kernel in<br />

einem eigenen Chroot-Jail auszuführen.<br />

Links<br />

R 17,4 (93)<br />

W 14,8 (94)<br />

R 14,8 (84)<br />

W 10,7 (87)<br />

R 5,0 (50)<br />

W 4,9 (40)<br />

94 (3) 55 (100)<br />

* Gemessen mit FLOPS-Linux, das Gastgebersystem verfügt<br />

über zwei 550 MHz Xeon-Prozessoren, allerdings<br />

verwendet FLOPS-Linux in der vorliegenden Form nur<br />

einen davon.<br />

** Gemessen mit tiobench bei acht Threads, <strong>die</strong> insgesamt<br />

vier Gigabyte Dateien sequentiell auf einem RAID-<br />

Array lesen und schreiben. In Klammer wird <strong>die</strong> CPU-Auslastung<br />

bezogen auf einen Prozessor genannt.<br />

***Gemessen mit netperf, Modus TCP_STREAM. Gastgebersystem<br />

und Gegenstelle sind über ein geswitchtes<br />

Ethernet verbunden<br />

[1]. http://user-mode-linux.sourceforge.net<br />

[2]. http://user-mode-linux.sourceforge.net/switches.html<br />

[3]. http://perso.wanadoo.fr/laurent.vivier/UML/<br />

[4]. http://seclists.org/lists/bugtraq/2002/Jan/0338.html<br />

[5]. http://user-mode-linux.sourceforge.net/uses.html<br />

<strong>die</strong> <strong>datenschleuder</strong>

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!