Namespaces bilden das Kernstück der Container-Isolation unter Linux. Alles, was wir in Podman, Kubernetes oder containerd als „Container“ bezeichnen, ist in Wahrheit nur eine reguläre Prozessgruppe, die in einer isolierten Menge von Namespaces läuft. Namespaces definieren, welchen Ausschnitt der Systemrealität ein Prozess sieht: Welche Prozesse existieren? Welches Netzwerk? Welche Mounts? Welcher Hostname? Welche Benutzer? Container sind keine Mini-VMs – sie sind Prozesse, deren Sicht auf die Welt durch Namespaces gefiltert ist.
Dieses Kapitel erläutert die sechs zentralen Namespace-Typen: User, PID, Network, Mount, UTS und IPC. Sie bilden ein Schichtmodell, das sich kombinieren lässt. Erst ihr Zusammenspiel erzeugt das isolierte Laufzeitumfeld, auf dem moderne Containerplattformen basieren.
Ein einfaches Modell zeigt die Wirkung:

Jeder Namespace isoliert einen eigenen Aspekt des Betriebssystems – zusammen bilden sie eine konsistente Sicht, die ein Prozess als „sein System“ interpretiert.
Der User Namespace ist der vielleicht wichtigste Teil der modernen Containersicherheit. Er ermöglicht die Umabbildung von Benutzer- und Gruppen-IDs zwischen Host und Container.
Kernidee:
Mapping-Beispiel:
Host-User alice (UID 1000)
Container-Root (UID 0 → mapped to 100000)
Vorteile:
Der User Namespace ist die Grundlage für Podmans Rootless Mode.
Der PID Namespace bestimmt, welche Prozesse ein Container sehen kann. Hauptmerkmale:
PID-Isolation schafft die Illusion einer eigenen Prozesshierarchie.
Beispielstruktur:

Diese Isolation verhindert, dass Container:
ps oder prlimit zum Ausbruch
nutzenDer Network Namespace definiert:
Jeder Container kann damit wie ein eigener kleiner Rechner erscheinen. Im Rootless Mode übernimmt slirp4netns die Netzwerksimulation im Userspace.
Typischer Aufbau:
eth0 → Container-interne Netzwerkkarte
vethX → Verbindung zum Host
cni0 → Bridge im Hostsystem
Ohne diesen Namespace gäbe es keine Pod-Netzwerke, keine Overlay-Netze und keine Multi-Container-Pods.
Praktisch:
Der Mount Namespace bestimmt, welche Dateisysteme und Mounts ein Prozess sieht. Container erhalten damit eine vollständig unabhängige Mount-Tabelle:
Mount Namespaces bilden die Grundlage für das Container-Filesystemmodell.
Montagebeispiel:

Wichtig:
Der Mount Namespace verhindert direkte Manipulation am System – selbst durch Container, die „root“ sind.
Der UTS Namespace isoliert Hostname und Domainname. Dadurch:
hostname konsistentBeispiel:
Host: prod-node-01
Container: web-app
Der UTS Namespace ist klein, aber wertvoll. Er schafft semantische Ordnung in verteilten Umgebungen.
Der IPC Namespace isoliert Interprozesskommunikation:
Ohne diesen Namespace könnten Container:
IPC-Isolation verhindert „stille“ Seitkanäle zwischen Containern.
Kein Namespace bietet vollständige Isolation. Erst die Kombination erzeugt ein Rahmenwerk, das robust genug für produktionsnahe Container ist.
Ein Modell:

Jeder Namespace stärkt Isolation auf einer spezifischen Achse:
Gemeinsam bilden sie das Container-Sicherheitsmodell.
Wer Namespaces beherrscht, versteht Container technisch wirklich. Tools wie Podman, containerd oder Kubernetes abstrahieren diese Mechanismen, aber sie ändern nichts an der Tatsache: Container sind keine Blackbox-Technologie, sondern klar definierte Linux-Konstrukte.
Für Architekten bedeutet das:
Namespaces sind das Betriebssystem-Substrat, auf dem alles Weitere ruht.
# Capabilities
Capabilities sind ein zentrales Sicherheitskonzept des Linux-Kernels und eines der am häufigsten missverstandenen Elemente moderner Container-Laufzeiten. Sie ersetzen das veraltete „Root oder Nicht-Root“-Modell durch eine feingranulare Privilegienmatrix. Containertechnologien wie Podman und Kubernetes nutzen Capabilities intensiv, um Dienste auszuführen, die teilweise root-artige Funktionen benötigen – ohne ihnen den vollen Root-Kontext zu geben. Wer Capabilities versteht, versteht einen der wichtigsten Bausteine für sichere und minimal privilegierte Containerumgebungen.
Historisch war Root ein binäres Konzept: Ein Prozess war entweder root (UID 0) und durfte alles, oder er war ein normaler Benutzer und durfte fast nichts. Dieses Modell ist für moderne Systeme zu grob. Der Kernel führte daher Capabilities ein – einzelne, isolierte Berechtigungsfragmente, die sich einem Prozess flexibel zuweisen lassen.
Beispielhaft:
CAP_NET_BIND_SERVICE – erlaubt das Binden an Ports <
1024CAP_SYS_TIME – erlaubt das Setzen der SystemuhrCAP_SYS_ADMIN – der „Chef aller Capabilities“CAP_NET_ADMIN – Netzwerkadministration (Routen,
Interfaces, Firewall)CAP_SYS_MODULE – Laden von KernelmodulenRoot bekommt standardmäßig alle Capabilities, aber Container erhalten nur einen minimalen Satz.
Ein diagrammatischer Überblick:

Der Container erhält also „ein bisschen Root“ – aber nur genau so viel, wie für seine Aufgabe nötig ist.
Podman und Kubernetes starten Container mit einem reduzierten Capability-Set. Typisch sind aktiv:
CAP_CHOWNCAP_DAC_OVERRIDECAP_FSETIDCAP_FOWNERCAP_MKNODCAP_SETGIDCAP_SETUIDCAP_SETFCAPCAP_SETPCAPCAP_NET_BIND_SERVICECAP_KILLCAP_AUDIT_WRITESelbst Container-Root erhält damit nur diese Teilmenge – nicht den vollen Root-Zugriff.
Nicht erlaubt sind beispielsweise:
CAP_SYS_ADMIN (hochgefährlich)CAP_NET_ADMINCAP_SYS_MODULECAP_SYS_RAWIOCAP_SYS_PTRACECAP_SYS_BOOTDiese Grenzen verhindern effektiv, dass Container tiefe Systemmodifikationen ausführen können.
Im Rootless Mode ist der Capability-Spielraum noch enger. Da der Kernel User-Namespace-Root keine tiefen Rechte gewährt, reduzieren sich die möglichen Capabilities erheblich:
CAP_NET_ADMINCAP_SYS_ADMINCAP_SYS_MODULECAP_IPC_LOCKDas führt zu einem wichtigen Punkt: rootless Container sind sicher, weil Capabilities massiv beschnitten sind.
In Podman:
podman run --cap-add=NET_ADMIN ...
podman run --cap-drop=ALL ...
Ein sehr sicheres Muster:
--cap-drop=all --cap-add=NET_BIND_SERVICE
Das erlaubt dem Container exakt eine privilegierte Funktion: Ports <1024 zu öffnen.
Podman erlaubt auch Kombinationen:
--cap-drop=all
--cap-add=chown
--cap-add=setuid
--cap-add=net_bind_service
Damit entsteht ein präziser Capability-Katalog, den der Prozess wirklich benötigt.
Kubernetes verwendet Capabilities im
securityContext:
securityContext:
capabilities:
drop: ["ALL"]
add: ["NET_BIND_SERVICE"]Empfohlene Praxis aus Security-Guidelines:
drop: ["ALL"]In Multi-Tenant-Clustern ist dies zwingend – da jeder überschüssige Capability-Vektor potenzielle Eskalationswege öffnet.
CAP_SYS_ADMIN ist berüchtigt. Sie wird oft als
„mini-root“ bezeichnet, aber das ist eine Untertreibung. Diese
Capability:
Ein Container mit CAP_SYS_ADMIN ist praktisch root in
vielerlei Hinsicht.
Erfahrungsregel:
Wenn ein Container
CAP_SYS_ADMINbraucht, ist er eigentlich keine Container-Workload, sondern ein Systemprozesse.
Capabilities wirken erst in Kombination mit anderen Kernelmechanismen richtig:

Effekt:
Capabilities sind somit der dritte Pfeiler der Container-Sicherheitsarchitektur.
Und ein wichtiger Merksatz:
Ein Container, der viele Capabilities braucht, ist meist falsch modelliert.
Capabilities bilden die feinste Ebene der Privilegsteuerung in Linux. Sie erlauben granulare Rechtezuweisung, machen Container sicherer und bilden – zusammen mit Namespaces und Seccomp – das Fundament eines sauber isolierten Containerbetriebs.