oracular (7) namespaces.7.gz

Provided by: manpages-de_4.23.1-1_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
              Namensrä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
              beizutreten. 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
       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.

   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-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:

       /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
              Lebenszeit  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-Prozesses.  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-Prozesses.  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-Namensrä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-Namensrä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änge-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
              Netzwerk-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-Namensrä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-Namensrä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
              Benutzer-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-Namensrä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
          Namensrä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
          fehlschlagen.

       •  Für  den  anfänglichen  Benutzernamensraum  ist der Vorgabewert für jede dieser Dateien die Hälfte der
          Begrenzungen 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.
          Genauer:

          •  Jeder Benutzernamensraum hat eine Ersteller-UID.

          •  Wenn  ein  Namensraum  erstellt  wird,  wird   er   gegen   die   Ersteller-UIDs   in   jedem   der
             Vorgängernamensrä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
             Beschränkungen 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 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:

       •  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_overview(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),
       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)

Ü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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.