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.
<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