| namespaces(7) | Miscellaneous Information Manual | namespaces(7) |
namespaces - Überblick über Linux-Namensräume
Ein Namensraum hüllt eine globale Systemressource in eine Abstraktion ein, so dass es den Prozessen innerhalb des Namensraums so erscheint, als ob sie ihre eigene, isolierte Instanz der globalen Ressource hätten. Änderungen an der globalen Ressource sind für andere Prozesse, die Mitglied des Namensraums sind, sichtbar, sind aber für alle anderen Prozesse unsichtbar. Ein Anwendungsfall für Namensräume ist die Implementierung von Containern.
Diese Seite stellt Verweise auf Informationen über die verschiedenen Namensraumtypen bereit, beschreibt die zugehörigen Dateien in /proc und fasst das API zum Arbeiten mit Namensräumen zusammen.
Die nachfolgende Tabelle zeigt die unter Linux verfügbaren Namensraumtypen. Die zweite Spalte der Tabelle zeigt den Schalterwert, der zur Angabe des Namensraumtyps in verschiedenen APIs verwandt wird. Die dritte Spalte identifiziert die Handbuchseite, die Details über den Namensraumtyp bereitstellt. Die letzte Spalte ist eine Zusammenfassung der Ressourcen, die durch den Namensraumtyp isoliert werden.
| Namensraum | Schalter | Seite | isoliert |
| Cgroup | CLONE_NEWCGROUP | cgroup_namespaces(7) | Cgroup-Wurzelverzeichnis |
| IPC | CLONE_NEWIPC | ipc_namespaces(7) | System V IPC, POSIX-Nachrichtenwarteschlangen |
| Netzwerk | CLONE_NEWNET | network_namespaces(7) | Netzwerkgeräte, Stacks, Ports, usw. |
| Einhängungen | CLONE_NEWNS | mount_namespaces(7) | Einhängepunkte |
| PID | CLONE_NEWPID | pid_namespaces(7) | Prozesskennungen |
| Zeit | CLONE_NEWTIME | time_namespaces(7) | Startzeit und monotone Uhren |
| User | CLONE_NEWUSER | user_namespaces(7) | Benutzer- und Gruppenkennungen |
| UTS | CLONE_NEWUTS | uts_namespaces(7) | Rechnername und NIS- Domain-Name |
Neben verschiedenen, nachfolgend beschriebenen Dateien in /proc enthält das Namensraum-API die folgenden Systemaufrufe:
In den meisten Fällen benötigt die Erstellung neuer Namensräume mittels clone(2) und unshare(2) die Capability CAP_SYS_ADMIN, da der Ersteller in den neuen Namensräumen die Macht hat, globale Ressourcen zu ändern, die für andere Prozessen sichtbar sind, die nachfolgend in dem Namensraum erstellt werden oder diesem beitreten. Benutzernamensräume sind eine Ausnahme: seit Linux 3.8 werden keine Privilegien zur Erstellung eines Benutzernamensraums benötigt.
Jeder Prozess verfügt über ein Unterverzeichnis /proc/PID/ns/, das einen Eintrag für jeden Namensraum enthält, der die Manipulation mittels setns(2) erlaubt:
$ ls -l /proc/$$/ns | awk '{print $1, $9, $10, $11}'
insgesamt 0
lrwxrwxrwx. cgroup -> cgroup:[4026531835]
lrwxrwxrwx. ipc -> ipc:[4026531839]
lrwxrwxrwx. mnt -> mnt:[4026531840]
lrwxrwxrwx. net -> net:[4026531969]
lrwxrwxrwx. pid -> pid:[4026531836]
lrwxrwxrwx. pid_for_children -> pid:[4026531834]
lrwxrwxrwx. time -> time:[4026531834]
lrwxrwxrwx. time_for_children -> time:[4026531834]
lrwxrwxrwx. user -> user:[4026531837]
lrwxrwxrwx. uts -> uts:[4026531838]
Durch Bind-Einhängungen (siehe mount(2)) einer der Dateien in diesem Verzeichnis an einen anderen Platz im Dateisystem wird der entsprechende Namensraum des durch PID festgelegten Prozesses am Leben erhalten, selbst wenn alle derzeit im Namensraum befindlichen Prozesse beendet werden.
Öffnen einer der Dateien in diesem Verzeichnis (oder einer Datei, die auf eine dieser Dateien bind-eingehängt ist) liefert einen Datei-Handle auf den Namensraum zurück, der dem durch PID festgelegten Prozess entspricht. Solange dieser Dateideskriptor offen bleibt, wird der Namensraum am Leben bleiben, selbst falls alle Prozesse in diesem Namensraum beendet werden. Der Dateideskriptor kann an setns(2) weitergegeben werden.
Unter Linux 3.7 und älter waren diese Dateien als harte Links sichtbar. Seit Linux 3.8 erscheinen sie als symbolische Links. Falls zwei Prozesse im gleichen Namensraum sind, dann werden die Gerätekennungen und Inode-Nummern ihrer symbolischen Links /proc/PID/ns/xxx identisch sein; die Anwendung kann dies mittels der von stat(2) zurückgelieferten Felder stat.st_dev und stat.st_ino überprüfen. Der Inhalt dieses symbolischen Links ist eine Zeichenkette, die den Namensraumtyp und die Inode-Nummer wie im folgenden Beispiel enthält:
$ readlink /proc/$$/ns/uts uts:[4026531838]
Die symbolischen Links in diesem Unterverzeichnis sind wie folgt:
Die Berechtigungen, diese symbolischen Links zu dereferenzieren oder zu lesen (readlink(2)) werden durch eine Ptrace-Zugriffsmodusüberprüfung PTRACE_MODE_READ_FSCREDS gesteuert; siehe ptrace(2).
Die Dateien im Verzeichnis /proc/sys/user (das seit Linux 4.9 vorhanden ist) legen die Begrenzungen für die Anzahl der Namensräume der verschiedenen Typen fest, die erstellt werden können. Die Dateien sind wie folgt:
Beachten Sie die folgenden Details über diese Dateien:
Falls keine weiteren Faktoren vorliegen, wird ein Namensraum automatisch entsorgt, wenn der letzte Prozess in dem Namensraum beendet wird oder den Namensraum verlässt. Allerdings gibt es eine Reihe von weiteren Faktoren, die einen Namensraum in der Existenz halten können, obwohl er keine Mitgliedprozesse hat. Zu diesen Faktoren gehören die folgenden:
Siehe clone(2) und user_namespaces(7).
nsenter(1), readlink(1), unshare(1), clone(2), ioctl_nsfs(2), setns(2), unshare(2), proc(5), capabilities(7), cgroup_namespaces(7), cgroups(7), credentials(7), ipc_namespaces(7), network_namespaces(7), pid_namespaces(7), user_namespaces(7), uts_namespaces(7), lsns(8), switch_root(8)
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.
| 13. Juni 2024 | Linux man-pages 6.9.1 |