die datenschleuder. - Chaosradio - CCC
die datenschleuder. - Chaosradio - CCC
die datenschleuder. - Chaosradio - CCC
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>