Namespaces
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.