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.

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

MATRJOSHKA LINUX<br />

User Mode Linux<br />

von Timon <br />

User Mode Linux [1] ist ein Patch, der es erlaubt, Linux als Programm zu kompilieren.<br />

Dieses Programm (im Folgenden “UMLinux” genannt) verwendet Ressourcen des<br />

tatsächlichen Betriebssystems (von nun an “Gastgebersystem” genannt) und stellt<br />

sie einem virtuellen System (genannt “Gastsystem”) zur Verfügung. Vom Gastgebersystem<br />

aus betrachtet ist UMLinux ein Programm, vom Gastsystem aus betrachtet ist<br />

UMLinux ein gewöhnlicher Kernel.<br />

Was ist User Mode Linux?<br />

User Mode Linux [1] ist ein Patch, der es erlaubt, Linux als<br />

Programm zu kompilieren. Dieses Programm (im Folgenden<br />

“UMLinux” genannt) verwendet Ressourcen des tatsächlichen<br />

Betriebssystems (von nun an “Gastgebersystem”<br />

genannt) und stellt sie einem virtuellen System (genannt<br />

“Gastsystem”) zur Verfügung. Vom Gastgebersystem aus<br />

betrachtet ist UMLinux ein Programm, vom Gastsystem<br />

aus betrachtet ist UMLinux ein gewöhnlicher Kernel.<br />

Virtuelles Hosting<br />

UMLinux lässt sich verwenden um ein physikalisches System<br />

in mehrere virtuelle Systeme aufzuteilen (virtuelles<br />

Hosting), Kernel zu testen und zu debuggen, neue Distributionen<br />

auszuprobieren oder Jails und Honeypots zu implementieren.<br />

In <strong>die</strong>sem Artikel wird <strong>die</strong> Einrichtung eines<br />

Systems für virtuelles Hosting beschrieben und <strong>die</strong> Leistungsfähigkeit<br />

<strong>die</strong>ses Systems mit gängigen Benchmarks<br />

untersucht.<br />

Gastgebersystem vorbereiten I. Kern<br />

UMLinux kann entweder im “Tracing Thread”-Modus oder<br />

im “Separate Kernel Adress Space”-Modus laufen. Der<br />

SKAS-Modus erfordert den sogenannten skas-3 Patch im<br />

Gastgeberkernel. Steht <strong>die</strong>se Funktionalität nicht zur Verfügung,<br />

so fällt UMLinux in den Tracing Thread Modus<br />

zurück. Dies hat große Einbußen an Leistungsfähigkeit und<br />

Sicherheitsprobleme zur Folge und sollte auf Produktivsystemen<br />

unbedingt vermieden werden.<br />

Der von UMLinux belegte Speicherplatz läuft asymptotisch<br />

auf <strong>die</strong> vorgegebene Maximalgröße zu. Solange seine Prozesse<br />

weniger Speicherplatz belegen als verfügbar ist, wird<br />

der restliche Platz verwendet um Plattenzugriffe zu puffern.<br />

Es kann dazu kommen, dass mehrere Gastsysteme <strong>die</strong>selben<br />

Dateien in ihren Puffern halten. Unter Umständen exisitert<br />

eine weitere Kopie im Puffer das Gastgebersystems.<br />

Durch bestimmte Maßnahmen kann man UMLinux veranlassen<br />

einen Teil <strong>die</strong>ses Speicherplatzes freizugeben ( /<br />

dev/anon Hostpatch). Diese sind jedoch nicht ausgereift,<br />

in Zukunft wird vorraussichtlich eine andere Lösung implementiert<br />

werden.<br />

#83 / 2004<br />

Gastgebersystem vorbereiten II. TMP<br />

Unmittelbar nach dem Start legt UMLinux eine Datei mit<br />

der Größe des ihm zugewiesenen Arbeitsspeichers im TMP-<br />

Verzeichnis des Gastgebersystems an. Das Image wird<br />

anschließend unlinked, verschwindet aber noch nicht von<br />

der Platte, weil UMLinux es geöffnet hält (lsof(8) zeigt<br />

es weiterhin). TMP (üblicherweise /tmp) muß also groß<br />

genug sein, um <strong>die</strong>se Dateien von allen Gastsystemen aufnehmen<br />

zu können. Desweiteren ist es erstrebenswert,<br />

<strong>die</strong>se Dateien im Arbeitsspeicher des Gastgebers zu halten,<br />

solange <strong>die</strong>ser nicht anderweitig benötigt wird. Unser<br />

Setup beinhaltet ein 2 GB tmpfs in /tmp, von dem nach<br />

Bedarf in eine 4 GB Swap-Partition auf einem RAID-Array<br />

ausgelagert wird.<br />

Gastgebersystem vorbereiten III.<br />

Netzwerk<br />

Zunächst wird <strong>die</strong> jüngste Version der UML-Utilities heruntergeladen<br />

und (nur!) <strong>die</strong> benötigten Programme kompiliert<br />

und installiert. Für den Anfang benötigt man tunctl<br />

und porthelper, <strong>die</strong> Installation von uml_net (SUID-root<br />

erforderlich) ist zu vermeiden. Dieser Dämon hat <strong>die</strong> Aufgabe,<br />

von UMLinux-Prozessen angeforderte virtuelle Netzwerkgeräte<br />

auf dem Gastgebersystem zu erstellen und einzurichten.<br />

Eigene Skripte erfüllen <strong>die</strong>se Aufgabe ebenso gut<br />

und man behält <strong>die</strong> Kontrolle darüber welche Geräte für<br />

welche Benutzer zur Verfügung gestellt werden und welche<br />

IPs sie erhalten. Letzteres ist im Zusammenhang mit Routing<br />

und Paketfilterung auf dem Gastgebersystem wichtig.<br />

Zunächst wird auf dem Gastgebersystem einmalig ein<br />

Device-Node für Tun/Tap Geräte erzeugt, sofern noch<br />

nicht vorhanden:<br />

mkdir /dev/net<br />

mknod /dev/net/tun c 10 200<br />

chmod 666 /dev/net/tun<br />

Beim Start des Gastgebersystems wird für jedes Gastsystem<br />

ein eigenes Gerät <strong>die</strong>ser Art erstellt und konfiguriert.<br />

Der Zugriff auf <strong>die</strong>ses Gerät ist an den Benutzer des Gastgebersystems<br />

gebunden, unter dessen Namen das Gastsystem<br />

läuft:<br />

/usr/sbin/tunctl -u <br />

/sbin/ifconfig tap0 192.168.23.23 up<br />

51<br />

51

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!