AA_sandbox_pdignard_sxc_805052.jpg

© Patrick Dignard, sxc.hu

Sandkastenspiele

Virtualisierung mit LXC

22.05.2012
Mithilfe von LXC lagern Sie mit wenigen Handgriffen unsichere Applikationen oder Testsysteme einfach in einen virtuellen Container aus.

Der Markt für Software zum Virtualisieren wächst seit Jahren stetig. Namen wie VMware, Virtualbox, Xen, Qemu oder KVM sind jedem ernsthaften Anwender geläufig. Mit den Linux Containers (LXC, [1]) gesellt sich der Gattung ein noch recht junger Vertreter hinzu, der einige Annehmlichkeiten bietet.

Das System gleicht dabei in etwa den sogenannten Jails unter BSD oder den Containern unter Solaris. Im laufenden System, dem Host, richten Sie damit für den Gast einen abgeschotteten und gesicherten Bereich ein, innerhalb dessen Sie einzelne Dienste oder ganze Systeme virtualisieren. Im LXC-Jargon heißt diese Umgebung wie bei Solaris Container.

Im Vergleich zu vielen anderen Lösungen arbeitet LXC dabei direkt auf der Ebene des Betriebssystems. Während VMware oder Virtualbox einen vollständigen PC samt BIOS und Hardware emulieren und sich daher ideal zum Installieren von anderen Betriebssystemen eignen, nutzt LXC die bereits vorhandene Hardware und den bestehenden Kernel, um entsprechende Container bereitzustellen.

Dieses Verfahren spart durch das Weglassen zahlreicher Abstraktionsebenen viele Ressourcen. Dafür ermöglicht es aber nur ein "Linux im Linux", denn es stellt keine virtuelle Maschine bereit, sondern lediglich eine virtuelle Umgebung. Möchten Sie beispielsweise einen Windows-Gast innerhalb eines Linux-Hosts virtualisieren, müssen Sie auf andere Lösungen ausweichen [2].

LXC eignet sich sowohl für Umgebungen, die aus Sicherheitsgründen getrennte Instanzen mit eigenen Ressourcen erfordern, als auch für Bereiche, in denen es eine gewisse Flexibilität zu gewährleisten gilt. Bei Bedarf ziehen Sie einen Container mit wenigen Handgriffen auf einen anderen Host um. Der Ansatz eignet sich unter anderem für den Einsatz bei Providern, die kostengünstig virtuelle Server bereitstellen wollen, sowie für Software-Entwickler, die in definierten Umgebungen arbeiten müssen.

LXC bringt aber auch zwei Nachteile mit sich: Zum einen steigt durch das Virtualisieren auf Betriebssystemebene das Risiko, dass virtuelle Hosts bei Sicherheitslücken im Kernel oder bei schlechter Konfiguration einen Zugang zum eigentlichen Host erhalten. Zum anderen fallen das erste Einrichten und die Konfiguration bisweilen noch recht schwer.

Das Testsystem

Als Testsystem für diesen Artikel nutzten wir Ubuntu 11.10 "Oneiric Ocelot" in der 64-Bit-Variante für Server. Als Hardware diente ein Root-Server eines deutschen Hosters, ausgestattet mit Intel-Xeon-Prozessor.

Vorarbeiten

Einer der großen Vorteile von LXC liegt darin, dass neuere Kernel-Versionen (in der Regel ab 2.6.31) es direkt integrieren – ein aufwändiges Übersetzen von Modulen oder gar Patchen des Systems entfällt. Die Inbetriebnahme erfordert lediglich drei Schritte: Das Einrichten der Programme zum Verwalten (also der Tools, mit denen Sie die Container erstellen und bearbeiten), das Einrichten eines solchen Containers, und zu guter Letzt das Konfigurieren der Netzwerkanbindung.

Vor der eigentlichen Installation von LXC stellen Sie zunächst sicher, dass Sie das Host-System ausreichend abgesichert haben. Soll die virtuelle Maschine später online gehen, empfiehlt es sich, eine zusätzliche IPv4-Adresse bereit zu halten. Diese schalten Sie zwar nicht auf den Host selbst auf, haben sie aber idealerweise beim Einrichten der virtuellen Umgebung bereits zur Hand.

Sind diese Voraussetzungen erfüllt, installieren Sie die eigentlichen Pakete über die Kommandzeile mittels sudo apt-get install lxc cgroup-lite debootstrap libcap2-bin libvirt-bin bridge-utils. Anschließend zeigt der Befehl lxc-checkconfig, ob das System alle Anforderungen erfüllt.

Schutzverpackung

LXC kennt zwei Betriebsmodi: Das Virtualisieren eines einzelnen Programms wie etwa einer Bash-Shell oder aber die Installation eines kompletten Basissystems in einem Container. Ersteres eignet sich unter anderem dazu, um einzelne Dienste und Programme in einer gesicherten Umgebung ("Sandbox") zu starten. Letzteres erweist sich insbesondere dann als ideal, wenn Sie verschiedene virtuelle Server planen.

Der Start eines einzelnen Programms innerhalb eines Containers zeigt sehr schön das Prinzip hinter LXC. Rufen Sie am Host-System den Befehl w auf, erhalten Sie – gesetzt den Fall, dass Sie keinen speziell präparierten Sicherheits-Kernel einsetzen – eine Übersicht aller angemeldeten Nutzer (Listing 1, oben). Zudem fördert ein beherztes ps auxw alle Prozesse zutage, die insgesamt auf dem System aktiv sind (Listing 1, unten).

Listing 1

$ w
 13:37:48 up 2 days,  1:36,  2 users,  load average: 0,02, 0,03, 0,05
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
floeff   pts/0    188-1-2-3-dynip. 13:31   23.00s  0.29s  0.29s -bash
mmuster  pts/16   188-4-5-6-dynip. 13:37    0.00s  0.27s  0.00s w
$ ps auxw
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
proftpd    561  0.0  0.0  98312  2128 ?        SNs  Feb19   0:00 proftpd: (accepting connections)
root       810  0.0  0.0  47272  9560 ?        Ss   Feb18   0:06 /usr/sbin/munin-node
daemon    1572  0.0  0.0  16776   380 ?        Ss   Feb18   0:00 atd
polw      1713  0.0  0.0  55104 12848 ?        Ss   Feb18   0:00 policyd-weight (master)
postfw    1718  0.0  0.0  62436 15756 ?        Ss   Feb18   0:03 /usr/sbin/postfwd
clamav    2005  0.0  0.8 195516 137080 ?       Ssl  Feb18   0:11 /usr/sbin/clamd
...

Nun geht es an das Einrichten einer virtuellen Instanz. Starten Sie nun (dazu benötigen Sie administrative Rechte) unter Zuhilfenahme des Befehls

# lxc-execute -n RestrictedShell /bin/bash

einen Container namens RestrictedShell, der nichts anderes macht, als /bin/bash aufzurufen. Sie befinden sich anschließend direkt auf der Kommandozeile dieser LXC-Instanz.

Der Container (der Gast) erbt vom System (dem Host) nahezu die gesamte Umgebung. Dazu zählen unter anderem das Dateisystem samt Benutzern, Gruppen und Quotas, der Kernel samt zugehöriger Module sowie der Zugriff auf die Hardware. Dennoch bleibt der Container in weiten Teilen vom übrigen System isoliert, wie ein Blick auf die vollkommene leere Übersicht beweist, die der Befehl w zutage fördert (Listing 2, oben). Ein ps auxw zeigt ebenfalls nicht gerade viel (Listing 2, unten).

Listing 2

# w
 14:24:47 up 2 days,  2:23,  1 user,  load average: 0,03, 0,11, 0,08
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
# ps auxw
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  10496   632 pts/0    S    14:16   0:00 /usr/lib/lxc/lxc-init -- /bin/bash
root         2  0.0  0.0  30372  5552 pts/0    S    14:16   0:00 /bin/bash
root        70  0.0  0.0  22060  1244 pts/0    R+   14:25   0:00 ps auxw

Noch deutlicher erscheint das Ganze im Vergleich der Ausgabe von Htop: Der Container (Abbildung 1) sieht die Prozesse des Hosts (Abbildung 2) nicht. An dieser Stelle beenden Sie das Experiment durch die Eingabe von exit, um wieder zur Kommandozeile des physikalischen Systems zu gelangen.

Abbildung 1: Im Container zeigt Htop eine deutlich verkürzte Prozessliste …
Abbildung 2: … auf dem Host dagegen sehen Sie die vollständige Prozessliste.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 1 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare

Infos zur Publikation

title_2014_10

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...