Provided by: manpages-de_4.21.0-2_all bug

BEZEICHNUNG

       namespaces - Überblick über Linux-Namensräume

BESCHREIBUNG

       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.

   Namensraumtypen
       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

   Das Namensraum-API
       Neben verschiedenen, nachfolgend beschriebenen Dateien in /proc enthält 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 aufgeführten Schalter CLONE_NEW* enthält, dann werden  für  jeden  der
              Schalter  neue  Namensräume erstellt und der Kindprozess wird zum Mitglied in jedem dieser Namens‐
              räume gemacht. (Dieser Systemaufruf implementiert auch eine Reihe von Funktionalitäten ohne  Bezug
              zu Namensräumen.)

       setns(2)
              Der  Systemaufruf setns(2) erlaubt es dem aufrufenden Prozess, einem bestehenden Namensraum beizu‐
              treten. Der beizutretende Namensraum wird über 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 aufgeführten Schalter CLONE_NEW*
              enthält, dann werden für jeden der Schalter neue Namensräume erstellt und der Kindprozess wird zum
              Mitglied in jedem dieser Namensräume gemacht. (Dieser Systemaufruf implementiert auch  eine  Reihe
              von Funktionalitäten ohne Bezug zu Namensräumen.)

       ioctl(2)
              Verschiedene  ioctl(2)-Aktionen  können  zum Ermitteln von Informationen über Namensräume verwandt
              werden. Diese Aktionen sind in ioctl_ns(2) beschrieben.

       In den meisten Fällen benötigt die Erstellung neuer Namensräume mittels clone(2) und unshare(2) die Capa‐
       bility CAP_SYS_ADMIN, da der Ersteller in den neuen Namensräumen die Macht hat, globale Ressourcen zu än‐
       dern, die für andere Prozessen sichtbar sind, die nachfolgend in dem Namensraum erstellt werden oder die‐
       sem beitreten. Benutzernamensräume sind eine Ausnahme: seit Linux 3.8 werden keine  Privilegien  zur  Er‐
       stellung eines Benutzernamensraums benötigt.

   Das Verzeichnis /proc/[PID]/ns/
       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-einge‐
       hä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) weitergege‐
       ben 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 symbo‐
       lischen 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:

       /proc/PID/ns/cgroup (seit Linux 4.6)
              Diese Datei ist ein Handle für den Cgroup-Namensraum des Prozesses.

       /proc/PID/ns/ipc (seit Linux 3.0)
              Diese Datei ist ein Handle für den IPC-Namensraum des Prozesses.

       /proc/PID/ns/mnt (seit Linux 3.8)
              Diese Datei ist ein Handle für den Einhänge-Namensraum des Prozesses.

       /proc/PID/ns/net (seit Linux 3.0)
              Diese Datei ist ein Handle für den Netzwerk-Namensraum des Prozesses.

       /proc/PID/ns/pid (seit Linux 3.8)
              Diese Datei ist ein Handle für den PID-Namensraum des Prozesses. Dieses Handle ist für die Lebens‐
              zeit des Prozesses dauerhaft (d.h. die PID-Namensraumzugehörigkeit  eines  Prozesses  ändert  sich
              niemals).

       /proc/PID/ns/pid_for_children (seit Linux 4.12)
              Diese Datei ist ein Handle für den PID-Namensraum des durch diesen Prozess erstellten Kind-Prozes‐
              ses.  Dieser  kann  sich  als  Konsequenz  aus  Aufrufen von unshare(2) und setns(2) ändern (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 zurückgeben.)

       /proc/PID/ns/time (seit Linux 5.6)
              Diese Datei ist ein Handle für den Zeit-Namensraum des Prozesses.

       /proc/PID/ns/time_for_children (seit Linux 5.6)
              Diese Datei ist ein Handle für den Zeit-Namensraum des durch diesen Prozess  erstellten  Kind-Pro‐
              zesses.  Dieser  kann  sich  als Konsequenz aus Aufrufen von unshare(2) und setns(2) ändern (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 für den Benutzer-Namensraum des Prozesses.

       /proc/PID/ns/uts (seit Linux 3.0)
              Diese Datei ist ein Handle für den UTS-Namensraum des Prozesses.

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

   Das Verzeichnis /proc/sys/user
       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:

       max_cgroup_namespaces
              Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung für die Anzahl der  Cgroup-Na‐
              mensräume, die in dem Benutzernamensraum erstellt werden können.

       max_ipc_namespaces
              Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung für die Anzahl der IPC-Namens‐
              räume, die in dem Benutzernamensraum erstellt werden können.

       max_mnt_namespaces
              Der  Wert  in  dieser  Datei definiert eine benutzerbezogene Begrenzung für die Anzahl der Einhän‐
              ge-Namensräume, die in dem Benutzernamensraum erstellt werden können.

       max_net_namespaces
              Der Wert in dieser Datei definiert eine benutzerbezogene  Begrenzung  für  die  Anzahl  der  Netz‐
              werk-Namensräume, die in dem Benutzernamensraum erstellt werden können.

       max_pid_namespaces
              Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung für die Anzahl der PID-Namens‐
              räume, die in dem Benutzernamensraum erstellt werden können.

       max_time_namespaces (seit Linux 5.7)
              Der  Wert  in  dieser Datei definiert eine benutzerbezogene Begrenzung für die Anzahl der Zeit-Na‐
              mensräume, die in dem Benutzernamensraum erstellt werden können.

       max_user_namespaces
              Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung  für  die  Anzahl  der  Benut‐
              zer-Namensräume, die in dem Benutzernamensraum erstellt werden können.

       max_uts_namespaces
              Der Wert in dieser Datei definiert eine benutzerbezogene Begrenzung für die Anzahl der UTS-Namens‐
              räume, die in dem Benutzernamensraum erstellt werden können.

       Beachten Sie die folgenden Details über diese Dateien:

       •  Die Werte in diesen Dateien können von privilegierten Prozessen verändert werden.

       •  Die  in  diesen Dateien offengelegten Werte sind die Begrenzungen für die Benuzernamensräume, in denen
          sich der öffnende Prozess befindet.

       •  Die Begrenzungen gelten pro Benutzer. Jeder Benutzer in dem gleichen Benutzernamensraum  kann  Namens‐
          räume bis zu der definierten Begrenzung erstellen.

       •  Die Begrenzungen gelten für alle Benutzer, einschließlich UID 0.

       •  Diese Begrenzungen gelten zusätzlich zu anderen, auf Namensräume bezogenen Begrenzungen (wie diese für
          PID- und Benutzernamensräume), die durchgesetzt werden könnten.

       •  Beim  Erreichen  dieser Beschränkungen werden clone(2) und unshare(2) mit dem Fehler ENOSPC fehlschla‐
          gen.

       •  Für den anfänglichen Benutzernamensraum ist der Vorgabewert für jede dieser Dateien die Hälfte der Be‐
          grenzungen für die Anzahl der Threads, die erstellt werden dürfen  (/proc/sys/kernel/threads-max).  In
          allen abgeleiteten Benutzernamensräumen ist der Vorgabewert in jeder Datei MAXINT.

       •  Wenn ein Namensraum erstellt wird, wird das Objekt auch gegen die Vorgängernamensräume verrechnet. Ge‐
          nauer:

          •  Jeder Benutzernamensraum hat eine Ersteller-UID.

          •  Wenn  ein  Namensraum erstellt wird, wird er gegen die Ersteller-UIDs in jedem der Vorgängernamens‐
             räume verrechnet und der Kernel stellt sicher, dass die entsprechende Namensraumbegrenzung für  die
             Ersteller-UID in den Vorgängernamensräumen nicht überschritten wird.

          •  Der vorgehend erwähnte Punkt stellt sicher, dass das Erzeugen eines neuen Benutzernamensraums nicht
             als  Mittel  verwandt  werden  kann,  um den im aktuellen Benutzernamensraum in Kraft gesetzten Be‐
             schränkungen zu entfliehen.

   Namensraum-Lebensdauer
       Falls keine weiteren Faktoren vorliegen, wird ein Namensraum automatisch entsorgt, wenn der  letzte  Pro‐
       zess  in dem Namensraum beendet wird oder den Namensraum verlässt. Allerdings gibt es eine Reihe von wei‐
       teren Faktoren, die einen Namensraum in der Existenz halten können, obwohl er keine Mitgliedprozesse hat.
       Zu diesen Faktoren gehören die folgenden:

       •  Ein offener Dateideskriptor oder eine Bind-Einhängung für die entsprechende Datei /proc/PID/ns/*.

       •  Der Namensraum ist hierarchisch (d.h. ein PID- oder Benutzernamensraum) und hat einen Kindnamensraum.

       •  Es ist ein Benutzernamensraum, der einen oder mehrere nicht-Benutzer-Namensräume besitzt.

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

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

       •  Es ist ein IPC-Namensraum und eine entsprechende Einhängung eines mqueue-Dateisystems (siehe  mq_over‐
          view(7)) bezieht sich auf diesen Namensraum.

       •  Es  ist  ein  PID-Namensraum und eine entsprechende Einhängung 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_ns(2),  setns(2),  unshare(2),  proc(5),  capabili‐
       ties(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)

ÜBERSETZUNG

       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.

Linux man-pages 6.03                             5. Februar 2023                                   namespaces(7)