AA_sandbox_pdignard_sxc_805052.jpg

© Patrick Dignard, sxc.hu

Virtualisierung mit LXC

Sandkastenspiele

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
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Frisch verpackt
    LXC-Container eignen sich nicht nur für Entwickler, sondern bieten auch ambitionierten Heimanwendern interessante Möglichkeiten.
  • Richtig gestapelt
    Mit Docker schichten Sie Systeme oder Programme in Form von Image-Dateien in einen Container und arbeiten dann in einer virtuellen Umgebung.
  • Programme in eine sichere Umgebung einschließen
    Mit Arkose verbannen Sie potenziell gefährliche Software in einen virtuellen Sandkasten und schützen so das System vor Abstürzen und Datenverlust.
  • Gast-Wirt
    Die Virtualisierungsumgebung Xen gehört inzwischen zur Standardausstattung aller großen Distributionen. Was sie alles kann und wie sie funktioniert zeigt der Artikel.
  • Datenverschlüsselung mit Truecrypt
    Sensible Daten gehören in den Datensafe: Truecrypt verschlüsselt nicht nur ganze Partitionen, sondern verbirgt sogar deren Existenz.
Kommentare

Infos zur Publikation

LU 08/2016: Multimedia

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

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

Aktuelle Fragen

Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...
Probleme beim Hochfahren der Terastaion 5400 mit Unix-Distrib
Sheldon Cooper, 10.07.2016 09:32, 0 Antworten
Hallo ihr lieben, habe seit zwei Tagen das Problem, das das NAS (Raid5) nicht mehr sauber hoch...
Mit Firewire Videos improtieren?
Werner Hahn, 09.06.2016 11:06, 5 Antworten
Ich besitze den Camcorder Panasonic NV-GS330, bei dem die Videos in guter Qualität nur über den 4...
lidl internetstick für linux mint
rolf meyer, 04.06.2016 14:17, 3 Antworten
hallo zusammen ich benötige eure hilfe habe einen lidl-internetstick möchte ihn auf linux mint i...