====== Grundlagen ====== ====== Virtuelle Maschinen (VM), LXC Container (privilegiert und unprivilegiert) in Proxmox ====== In diesem Dokument werden die grundlegenden Konzepte von virtuellen Maschinen (VM) sowie privilegierten und unprivilegierten LXC Containern im Kontext der Virtualisierungsplattform [Proxmox](https://www.proxmox.com) erläutert. Zudem werden Vor- und Nachteile dargestellt und Entscheidungshilfen gegeben, wann welche Technologie eingesetzt werden sollte. ===== Was ist eine Virtuelle Maschine (VM)? ===== Eine Virtuelle Maschine ist eine vollständig isolierte Umgebung, die ein komplettes Betriebssystem inklusive eigener Kernel-Instanz ausführt. Die Virtualisierung erfolgt in der Regel durch einen Hypervisor (bei Proxmox KVM-basiert). VMs erhalten dedizierte virtuelle Hardware (CPU, RAM, virtuelle Festplatten, virtuelle Netzwerkadapter), auf welcher ein Gastbetriebssystem wie Linux, Windows oder BSD installiert werden kann. **Eigenschaften einer VM:** * Volle Virtualisierung von Hardware-Ressourcen (CPU, Speicher, Netzwerk, Speichergeräte) * Läuft in einem isolierten Software-Container, der durch den Hypervisor kontrolliert wird * Betriebssystemunabhängig (kann verschiedenste OS-Typen nutzen) * Höherer Overhead, da vollständige virtuelle Hardware emuliert wird Beispiel: Auf einem Proxmox-Host wird eine VM mit 4 vCPUs, 8 GB RAM und 100 GB virtuellem Speicherplatz erstellt, auf der ein vollständiges Ubuntu Server OS läuft. ===== Was ist ein LXC Container? ===== LXC (Linux Containers) ist eine leichtgewichtige Virtualisierungs- bzw. Containerisierungstechnologie, die auf Betriebssystem-Ebene arbeitet. Anstatt eine komplette Hardware-Umgebung zu emulieren, nutzen LXC Container den Kernel des Host-Systems direkt, teilen sich also denselben Kernel. Jeder Container ist jedoch in Bezug auf Prozesse, Dateisystem, Netzwerk und Ressourcen weitgehend isoliert. **Eigenschaften von LXC Containern:** * Betriebssystem-Ebene-Isolation (kein eigener Kernel im Container) * Niedriger Overhead, da keine volle Hardwarevirtualisierung stattfindet * Sehr schnelle Start- und Stoppzeiten * In Proxmox direkt unterstützt LXC Container sind in zwei Varianten verfügbar: **privilegiert** und **unprivilegiert**. ==== Privilegierte LXC Container ==== Ein privilegierter Container läuft mit root-Rechten im Kontext des Host-Systems (UID 0 im Container entspricht UID 0 auf dem Host). Dies macht ihn konzeptionell einfacher, birgt aber gewisse Sicherheitsrisiken, da ein Fehler in einem privilegierten Container theoretisch einfacher auf den Host übergreifen kann. **Eigenschaften privilegierter Container:** * Einfachere Verwaltung von Berechtigungen und Ressourcen * Höheres Sicherheitsrisiko bei Exploits oder Fehlkonfigurationen, da "root" im Container auch "root" auf dem Host ist * Noch immer geringerer Overhead als eine VM ==== Unprivilegierte LXC Container ==== Unprivilegierte Container verwenden eine UID/GID-Map (Benutzer- und Gruppen-ID-Zuordnungen) im Host, um sicherzustellen, dass "root" im Container nicht dasselbe wie "root" im Host ist. Der Container-"root" ist hierbei im Host lediglich ein normaler unprivilegierter User, was die Sicherheit deutlich erhöht. **Eigenschaften unprivilegierter Container:** * Höhere Sicherheit, da Host-Root-Rechte nicht direkt auf den Container-Root abgebildet werden * Etwas aufwändigere Einrichtung, da UID/GID-Maps korrekt konfiguriert sein müssen * Sicherheit steht hier klar im Vordergrund ===== Vergleich zwischen VM und LXC ===== ^ Technologie ^ Virtualisierungsebene ^ Kernel-Nutzung ^ Overhead ^ Startzeit ^ Anwendungsfälle ^ | VM (KVM) | Hardware-Ebene | Eigener Kernel im Gast | Höher | Langsamer (Sekunden bis Minuten) | Vollständige OS-Isolation, heterogene Betriebssysteme (z. B. Windows, Linux gemischt) | | LXC Container (priv./unpriv.) | Betriebssystem-Ebene | Teilt sich den Kernel mit dem Host | Sehr gering | Sehr schnell (Sekundenbruchteile) | Homogene Linux-Workloads, schnelle Bereitstellung, leichtgewichtige Services | ===== Vor- und Nachteile ===== === Virtuelle Maschinen === **Vorteile:** * Volle Isolation, vollständige virtuelle Hardwareumgebung * Beliebige Betriebssysteme können installiert werden * Stabiler und etablierter Standard für viele Einsatzzwecke **Nachteile:** * Höherer Ressourcenverbrauch * Längere Boot-Zeiten * Komplexere Verwaltung, da eigenes OS gepflegt werden muss === Privilegierte LXC Container === **Vorteile:** * Sehr geringe Ressourcenbelastung * Schnelle Startzeiten * Einfache Einrichtung im Vergleich zu unprivilegierten Containern **Nachteile:** * Geringere Sicherheit als unprivilegierte Container * Risiko von Privilege Escalation, falls Lücken ausgenutzt werden === Unprivilegierte LXC Container === **Vorteile:** * Höchste Sicherheit unter den Container-Varianten * Geringe Ressourcenbelastung, schnelle Startzeiten **Nachteile:** * Etwas komplexere Einrichtung durch UID/GID-Mapping * Teilweise Einschränkungen bei Zugriffen und Berechtigungen, die man im privilegierten Modus nicht hat ===== Wann was verwenden? ===== **Virtuelle Maschinen:** Setze VMs ein, wenn * Verschiedene Betriebssysteme (z. B. Windows und Linux) auf demselben Host laufen sollen * Eine vollständige Hardwarevirtualisierung und maximale Isolation erforderlich ist * Eine stabil etablierte und flexible Lösung benötigt wird, unabhängig vom Host-Kernel **Privilegierte LXC Container:** Setze privilegierte Container ein, wenn * Du schnell und ressourcensparend Linux-basierte Services bereitstellen willst * Du weniger Aufwand bei der Verwaltung von UID/GID-Maps betreiben möchtest * Sicherheitsrisiko tolerierbar ist (z. B. interne Entwicklungsumgebung) **Unprivilegierte LXC Container:** Setze unprivilegierte Container ein, wenn * Sicherheit oberste Priorität hat * Du nur Linux-Workloads betreibst, die im gleichen Kernelumfeld funktionieren * Du die Vorteile der Containerisierung nutzen willst, ohne die Host-Sicherheit zu kompromittieren ===== Zusammenfassung ===== Proxmox bietet mit KVM-VMs und LXC-Containern zwei Hauptvirtualisierungsansätze. VMs sind ideal für heterogene, vollständig isolierte Umgebungen und bieten maximale Flexibilität, aber auf Kosten von Ressourcen und Startzeiten. LXC Container bieten leichtgewichtigere, schnellere Umgebungen für Linux-basierte Workloads. Unprivilegierte Container erhöhen dabei die Sicherheit erheblich. Durch die gezielte Wahl der passenden Technologie kannst Du Deine Ressourcen effizient nutzen und Deine Sicherheits- und Performanzanforderungen optimal ausbalancieren.