Namespaces

Veröffentlicht am:

Die wichtigsten Befehle zum Merken

  • lsns -p PID — Namespace-Zugehörigkeit eines Prozesses prüfen.
  • unshare — einen Prozess in neuen Namespaces ausführen.
  • hostname — den sichtbaren Namen im aktuellen UTS-Namespace lesen.

Befehle und Optionen

Befehl oder Syntax Bedeutung
lsns -p $$ Namespaces der Shell anzeigen; $$ ist ihre Prozess-ID.
--user --map-root-user User-Namespace erzeugen und eigene Identität darin auf root abbilden.
--uts Einen getrennten Host-/Domänennamensraum erzeugen.
sh -c '…' Zitierte Befehle in einer Kind-Shell ausführen.
hostname lab-namespace Nur den Hostnamen im neuen UTS-Namespace ändern.
hostname Den für diesen Prozess sichtbaren Hostnamen ausgeben.

Das Semikolon trennt die Kindbefehle. Root in diesem User-Namespace ist kein uneingeschränkter Host-root.

Die entscheidenden Konzepte

1. Ein Namespace gibt einem Prozess eine bestimmte Ansicht

Ein Linux-Namespace begrenzt eine Kategorie von Kernelressourcen. Prozesse in verschiedenen Namespaces können andere Hostnamen, Prozess-ID-Räume, Netzwerkstacks oder Mount-Anordnungen sehen.

Namespaces sind getrennte Mechanismen, kein einzelner Containerschalter. Ein Prozess kann einen isolierten Netzwerk-Namespace und andere gemeinsame Namespaces besitzen. Prüfe die Mitgliedschaften vor Annahmen zur Sichtbarkeit.

2. Prozesse teilen Namespaces durch Zugehörigkeit

Mitglieder desselben Namespace teilen dessen Ansicht dieses Ressourcentyps. Kinder erben normalerweise die Zugehörigkeiten ihrer Eltern, sofern Erzeugung oder spätere Einrichtung nichts anderes bestimmen.

Ein neuer UTS-Namespace ändert die Reichweite von Hostnamenoperationen, erzeugt aber kein neues Dateisystem oder Netzwerk. Eine einzelne Eigenschaft kann deshalb eine Grenze demonstrieren, ohne eine vollständige Containerumgebung aufzubauen.

3. User-Namespaces begrenzen Privilegien

Ein User-Namespace bildet Benutzer- und Gruppenkennungen ab und begrenzt Capabilities. Ein unprivilegierter Hostbenutzer kann darin als root erscheinen, ohne Host-root zu werden.

Die Abbildung ist wirksam, aber spezifisch. Gemeinsame Dateien unterliegen weiterhin Kennungsabbildung und Berechtigungen. Distributionen können unprivilegierte User-Namespaces einschränken. Eine verweigerte Operation kann deshalb Hostrichtlinie statt falschen Befehl bedeuten.

4. Isolation ist kein Ressourcenbudget

Namespaces bestimmen vor allem Sichtbarkeit und Geltungsbereich. Sie vergeben allein weder CPU-Quote noch Speicherlimit oder eigenen Kernel. Linux-Container kombinieren sie häufig mit cgroups, Capability-Einschränkungen und weiteren Kontrollen.

Der gemeinsame Kernel bleibt sicherheitsrelevant. Virtuelle Maschine und Namespace-Container besitzen daher verschiedene Isolationsstrukturen. Die Bezeichnung Container verrät noch nicht die tatsächlich angewandten Kontrollen.

Ein kleines Beispiel

Optional: Nutze dein normales Konto auf einem Host mit erlaubten Namespaces. Nur ein kurzlebiger Kindprozess erhält neue User- und UTS-Namespaces. Ändere dafür keine Hostrichtlinie.

lsns -p $$
hostname
unshare --user --map-root-user --uts sh -c 'hostname lab-namespace; hostname'
hostname

Erster und letzter Hostname sollten gleich sein. Das Kind sollte lab-namespace zeigen, ohne den Elternwert zu ersetzen. Prüfe in lsns Typen und Kennungen; Sichtbarkeit hängt von Rechten und procfs ab.

Bei fehlgeschlagenem unshare fand die Demonstration nicht statt. Ein unveränderter Hostname allein beweist keinen Erfolg. Mit Kindende werden unreferenzierte Namespaces automatisch freigegeben. Dateien und dauerhafte Namespace-Handles entstehen nicht.

Merke dir: Ein Namespace bestimmt die sichtbare Ressourceninstanz, nicht automatisch die erlaubte Verbrauchsmenge.