namespaces(7) Miscellaneous Information Manual namespaces(7) BEZEICHNUNG namespaces - Uberblick uber Linux-Namensraume BESCHREIBUNG Ein Namensraum hullt 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 hatten. Anderungen an der globalen Ressource sind fur andere Prozesse, die Mitglied des Namensraums sind, sichtbar, sind aber fur alle anderen Prozesse unsichtbar. Ein Anwendungsfall fur Namensraume ist die Implementierung von Containern. Diese Seite stellt Verweise auf Informationen uber die verschiedenen Namensraumtypen bereit, beschreibt die zugehorigen Dateien in /proc und fasst das API zum Arbeiten mit Namensraumen zusammen. Namensraumtypen Die nachfolgende Tabelle zeigt die unter Linux verfugbaren 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 uber 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) Netzwerkgerate, Stacks, Ports, usw. Einhangungen CLONE_NEWNS mount_namespaces(7) Einhangepunkte PID CLONE_NEWPID pid_namespaces(7) Prozesskennungen Zeit CLONE_NEWTIME time_namespaces(7) Systemstart- und monotone Uhren User CLONE_NEWUSER user_namespaces(7) Benutzer- und Gruppenkennungen UTS CLONE_NEWUTS uts_namespaces(7) Rechnername und NIS-Domain-Name Das Namensraum-API Neben verschiedenen, nachfolgend beschriebenen Dateien in /proc enthalt das Namensraum-API die folgenden Systemaufrufe: clone(2) Der Systemaufruf clone(2) erstellt einen neuen Prozess. Falls das Argument Schalter des Aufrufs einen oder mehrere der oben aufgefuhrten Schalter CLONE_NEW* enthalt, dann werden fur jeden der Schalter neue Namensraume erstellt und der Kindprozess wird zum Mitglied in jedem dieser Namensraume gemacht. (Dieser Systemaufruf implementiert auch eine Reihe von Funktionalitaten ohne Bezug zu Namensraumen.) setns(2) Der Systemaufruf setns(2) erlaubt es dem aufrufenden Prozess, einem bestehenden Namensraum beizutreten. Der beizutretende Namensraum wird uber einen Dateideskriptor festgelegt, der sich auf eine der nachfolgend beschriebenen Dateien in /proc/PID/ns bezieht. unshare(2) Der Systemaufruf unshare(2) verschiebt den aufrufenden Prozess in einen neuen Namensraum. Falls das Argument Schalter des Aufrufs einen oder mehrere der oben aufgefuhrten Schalter CLONE_NEW* enthalt, dann werden fur jeden der Schalter neue Namensraume erstellt und der Kindprozess wird zum Mitglied in jedem dieser Namensraume gemacht. (Dieser Systemaufruf implementiert auch eine Reihe von Funktionalitaten ohne Bezug zu Namensraumen.) ioctl(2) Verschiedene ioctl(2)-Aktionen konnen zum Ermitteln von Informationen uber Namensraume verwandt werden. Diese Aktionen sind in ioctl_nfs(2) beschrieben. In den meisten Fallen benotigt die Erstellung neuer Namensraume mittels clone(2) und unshare(2) die Capability CAP_SYS_ADMIN, da der Ersteller in den neuen Namensraumen die Macht hat, globale Ressourcen zu andern, die fur andere Prozessen sichtbar sind, die nachfolgend in dem Namensraum erstellt werden oder diesem beitreten. Benutzernamensraume sind eine Ausnahme: seit Linux 3.8 werden keine Privilegien zur Erstellung eines Benutzernamensraums benotigt. Das Verzeichnis /proc/PID/ns/ Jeder Prozess verfugt uber ein Unterverzeichnis /proc/PID/ns/, das einen Eintrag fur jeden Namensraum enthalt, der die Manipulation mittels setns(2) erlaubt: $ ls -l /proc/$$/ns | awk '{print $1, $9, $10, $11}' total 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-Einhangungen (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. Offnen einer der Dateien in diesem Verzeichnis (oder einer Datei, die auf eine dieser Dateien bind-eingehangt ist) liefert einen Datei-Handle auf den Namensraum zuruck, 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 alter 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 Geratekennungen und Inode-Nummern ihrer symbolischen Links /proc/PID/ns/xxx identisch sein; die Anwendung kann dies mittels der von stat(2) zuruckgelieferten Felder stat.st_dev und stat.st_ino uberprufen. Der Inhalt dieses symbolischen Links ist eine Zeichenkette, die den Namensraumtyp und die Inode-Nummer wie im folgenden Beispiel enthalt: $ readlink /proc/$$/ns/uts uts:[4026531838] Die symbolischen Links in diesem Unterverzeichnis sind wie folgt: /proc/PID/ns/cgroup (seit Linux 4.6) Diese Datei ist ein Handle fur den Cgroup-Namensraum des Prozesses. /proc/PID/ns/ipc (seit Linux 3.0) Diese Datei ist ein Handle fur den IPC-Namensraum des Prozesses. /proc/PID/ns/mnt (seit Linux 3.8) Diese Datei ist ein Handle fur den Einhange-Namensraum des Prozesses. /proc/PID/ns/net (seit Linux 3.0) Diese Datei ist ein Handle fur den Netzwerk-Namensraum des Prozesses. /proc/PID/ns/pid (seit Linux 3.8) Diese Datei ist ein Handle fur den PID-Namensraum des Prozesses. Dieses Handle ist fur die Lebenszeit des Prozesses dauerhaft (d.h. die PID-Namensraumzugehorigkeit eines Prozesses andert sich niemals). /proc/PID/ns/pid_for_children (seit Linux 4.12) Diese Datei ist ein Handle fur den PID-Namensraum des durch diesen Prozess erstellten Kind-Prozesses. Dieser kann sich als Konsequenz aus Aufrufen von unshare(2) und setns(2) andern (siehe pid_namespaces(7)), daher kann sich die Datei von /proc/PID/ns/pid unterscheiden. Der symbolische Link wird erst nach der Erstellung des ersten Kindprozesses in den Namensraum wertvoll. (Vorher wird ein readlink(2) von dem symbolischen Link einen leeren Puffer zuruckgeben.) /proc/PID/ns/time (seit Linux 5.6) Diese Datei ist ein Handle fur den Zeit-Namensraum des Prozesses. /proc/PID/ns/time_for_children (seit Linux 5.6) Diese Datei ist ein Handle fur den Zeit-Namensraum des durch diesen Prozess erstellten Kind-Prozesses. Dieser kann sich als Konsequenz aus Aufrufen von unshare(2) und setns(2) andern (siehe time_namespaces(7)), daher kann sich die Datei von /proc/PID/ns/time unterscheiden. /proc/PID/ns/user (seit Linux 3.8) Diese Datei ist ein Handle fur den Benutzer-Namensraum des Prozesses. /proc/PID/ns/uts (seit Linux 3.0) Diese Datei ist ein Handle fur den UTS-Namensraum des Prozesses. Die Berechtigungen, diese symbolischen Links zu dereferenzieren oder zu lesen (readlink(2)) werden durch eine Ptrace-Zugriffsmodusuberprufung PTRACE_MODE_READ_FSCREDS gesteuert; siehe ptrace(2). Das Verzeichnis /proc/sys/user Die Dateien im Verzeichnis /proc/sys/user (das seit Linux 4.9 vorhanden ist) legen die Begrenzungen fur die Anzahl der Namensraume der verschiedenen Typen fest, die erstellt werden konnen. Die Dateien sind wie folgt: max_cgroup_namespaces Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung fur die Anzahl der Cgroup-Namensraume, die in dem Benutzernamensraum erstellt werden konnen. max_ipc_namespaces Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung fur die Anzahl der IPC-Namensraume, die in dem Benutzernamensraum erstellt werden konnen. max_mnt_namespaces Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung fur die Anzahl der Einhange-Namensraume, die in dem Benutzernamensraum erstellt werden konnen. max_net_namespaces Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung fur die Anzahl der Netzwerk-Namensraume, die in dem Benutzernamensraum erstellt werden konnen. max_pid_namespaces Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung fur die Anzahl der PID-Namensraume, die in dem Benutzernamensraum erstellt werden konnen. max_time_namespaces (seit Linux 5.7) Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung fur die Anzahl der Zeit-Namensraume, die in dem Benutzernamensraum erstellt werden konnen. max_user_namespaces Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung fur die Anzahl der Benutzer-Namensraume, die in dem Benutzernamensraum erstellt werden konnen. max_uts_namespaces Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung fur die Anzahl der UTS-Namensraume, die in dem Benutzernamensraum erstellt werden konnen. Beachten Sie die folgenden Details uber diese Dateien: o Die Werte in diesen Dateien konnen von privilegierten Prozessen verandert werden. o Die in diesen Dateien offengelegten Werte sind die Begrenzungen fur die Benuzernamensraume, in denen sich der offnende Prozess befindet. o Die Begrenzungen gelten pro Benutzer. Jeder Benutzer in dem gleichen Benutzernamensraum kann Namensraume bis zu der definierten Begrenzung erstellen. o Die Begrenzungen gelten fur alle Benutzer, einschliesslich UID 0. o Diese Begrenzungen gelten zusatzlich zu anderen, auf Namensraume bezogenen Begrenzungen (wie diese fur PID- und Benutzernamensraume), die durchgesetzt werden konnten. o Beim Erreichen dieser Beschrankungen werden clone(2) und unshare(2) mit dem Fehler ENOSPC fehlschlagen. o Fur den anfanglichen Benutzernamensraum ist der Vorgabewert fur jede dieser Dateien die Halfte der Begrenzungen fur die Anzahl der Threads, die erstellt werden durfen (/proc/sys/kernel/threads-max). In allen abgeleiteten Benutzernamensraumen ist der Vorgabewert in jeder Datei MAXINT. o Wenn ein Namensraum erstellt wird, wird das Objekt auch gegen die Vorgangernamensraume verrechnet. Genauer: o Jeder Benutzernamensraum hat eine Ersteller-UID. o Wenn ein Namensraum erstellt wird, wird er gegen die Ersteller-UIDs in jedem der Vorgangernamensraume verrechnet und der Kernel stellt sicher, dass die entsprechende Namensraumbegrenzung fur die Ersteller-UID in den Vorgangernamensraumen nicht uberschritten wird. o Der vorgehend erwahnte Punkt stellt sicher, dass das Erzeugen eines neuen Benutzernamensraums nicht als Mittel verwandt werden kann, um den im aktuellen Benutzernamensraum in Kraft gesetzten Beschrankungen zu entfliehen. Namensraum-Lebensdauer Falls keine weiteren Faktoren vorliegen, wird ein Namensraum automatisch entsorgt, wenn der letzte Prozess in dem Namensraum beendet wird oder den Namensraum verlasst. Allerdings gibt es eine Reihe von weiteren Faktoren, die einen Namensraum in der Existenz halten konnen, obwohl er keine Mitgliedprozesse hat. Zu diesen Faktoren gehoren die folgenden: o Ein offener Dateideskriptor oder eine Bind-Einhangung fur die entsprechende Datei /proc/PID/ns/*. o Der Namensraum ist hierarchisch (d.h. ein PID- oder Benutzernamensraum) und hat einen Kindnamensraum. o Es ist ein Benutzernamensraum, der einen oder mehrere nicht-Benutzer-Namensraume besitzt. o Es ist ein PID-Namensraum und es gibt einen Prozess, der sich mittels eines symbolischen Links /proc/PID/ns/pid_for_children auf einen Namensraum bezieht. o Es ist ein Zeitnamensraum und es gibt einen Prozess, der sich mittels eines symbolischen Links /proc/PID/ns/time_for_children auf einen Namensraum bezieht. o Es ist ein IPC-Namensraum und eine entsprechende Einhangung eines mqueue-Dateisystems (siehe mq_overview(7)) bezieht sich auf diesen Namensraum. o Es ist ein PID-Namensraum und eine entsprechende Einhangung eines proc(5)-Dateisystems bezieht sich auf diesen Namensraum. BEISPIELE Siehe clone(2) und user_namespaces(7). SIEHE AUCH 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) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer: . Linux man-pages 6.15 17. Mai 2025 namespaces(7)