1 🏢 Linux Namespaces (Die unsichtbaren Trennwände im Kernel)
1.1 1.1 🔬 DIE FUNKTIONSWEISE: VIRTUELLE ISOLATION OHNE LEISTUNGSVERLUST
Früher musste man für eine strikte Trennung von Software komplette Virtuelle Maschinen (VMs) aufsetzen. Das verbraucht jedoch enorm viel CPU und RAM, weil jede VM ein eigenes Betriebssystem booten muss.
Namespaces lösen das Problem direkt im Linux-Kernel. Die Programme teilen sich weiterhin denselben Kernel, aber der Kernel setzt den Programmen quasi eine Virtual-Reality-Brille auf, die ihnen eine völlig isolierte Umgebung vorgaukelt.
1.1.1 1.1.1 Die 7 wichtigsten Namespace-Typen im Linux-Kernel:
Der Kernel kann verschiedene Bereiche des Systems getrennt voneinander isolieren:
- PID (Process ID):
Ein Programm in diesem Namespace sieht nur seine eigenen Prozesse. Es weiß nicht, welche anderen Programme der Linux-Nutzer im Hintergrund noch geöffnet hat. - NET (Network):
Isoliert Netzwerkschnittstellen. Eine App in diesem Namespace bekommt eigene, virtuelle IP-Adressen und Firewall-Regeln. - MNT (Mount):
Erlaubt es, dem Programm eine komplett eigene Ordnerstruktur zu präsentieren. Das Programm sieht dann beispielsweise nur einen einzigen, leeren Ordner statt der gesamten Linux-Festplatte. - USER:
Ermöglicht es, dass ein Programm innerhalb seiner Sandbox die vollen Administrator-Rechte (root) besitzt, während es für das echte Linux-Hauptsystem im Hintergrund ein ganz normaler, harmloser Benutzer ohne Rechte ist. - UTS, IPC & Time:
Isolieren Hostnamen, interne Prozesskommunikation und die Systemzeit.
1.2 1.2 🛠️ NAMESPACES IM TERMINAL ANSEHEN
Alle aktuell genutzten Namespaces des Systems auflisten:
(Dieser Befehl zeigt tabellarisch an, wie viele isolierte Blasen gerade offen sind, welcher Namespace-Typ es ist und welches Programm [z.B. bwrap für Flatpaks oder dockerd] ihn erzeugt hat).
Ein Programm manuell in einem isolierten Namespace starten:
Mit dem Werkzeug unshare kann man zu Testzwecken einen neuen Raum erstellen. Um beispielsweise eine neue Terminal-Sitzung zu starten, die absolut keinen Zugriff auf das Internet hat, nutzt man diesen Befehl:
Gibt man in diesem neuen Terminal nun ping google.com ein, schlägt die Verbindung sofort fehl, obwohl das restliche Linux-System ganz normal online ist.
1.3 1.3 ⚠️ DIE KLASSISCHEN STOLPERSTEINE
1.3.1 „Mein Webbrowser oder meine Flatpak-App stürzt ab und meldet 'User Namespaces disabled'.“
Hintergrund:
Aus extremen Sicherheitsgründen (oder bei sehr speziell gehärteten Linux-Kerneln) schalten manche Administratoren oder Distributionen die Erstellung von unprivilegierten User Namespaces komplett ab. Da Programme wie Chromium, VS Code (Electron) oder Flatpak-Runtimes diese Funktion zwingend benötigen, um ihre Sandboxes aufzubauen, verweigern sie augenblicklich den Start.
Lösung:
Man kann dem Kernel über die Systemsteuerung anweisen, diese Funktion wieder zu erlauben. Gib dazu im Terminal folgenden Befehl ein:
Damit die Änderung auch nach einem PC-Neustart dauerhaft aktiv bleibt, fügt man diese Zeile in die Datei /etc/sysctl.conf oder eine separate Datei unter /etc/sysctl.d/ ein:
1.4 1.4 💡 UNTERSCHIED: NAMESPACES VS. CGROUPS
- Namespaces regeln das WAS:
Was darf das Programm sehen? (Isolation) - Cgroups (Control Groups) regeln das WIE VIEL:
Wie viel CPU, RAM oder Festplattengeschwindigkeit darf das Programm maximal verbrauchen? (Ressourcenlimitierung)
1.5 1.5 💡 FAZIT
Namespaces sind die unsichtbaren Helden von modernem Linux. Sie sorgen dafür, dass wir potenziell unsichere Software (wie Webbrowser oder isolierte Flatpaks) ausführen können, ohne Angst haben zu müssen, dass ein Exploit oder Schadcode direkt das gesamte Betriebssystem kompromittiert.