Provided by: manpages-de_4.26.0-1_all bug

BEZEICHNUNG

       cgroup_namespaces - Überblick über Linux-Cgroup-Namensräume

BESCHREIBUNG

       Für einen Überblick über Namensräume, siehe namespaces(7).

       Cgroup-Namensräume  virtualisieren  den  Blick auf die Cgroups eines Prozesses (siehe cgroups(7)), wie er
       mittels /proc/PID/cgroup und /proc/PID/mountinfo gesehen wird.

       Jeder Cgroup-Namensraum hat seine eigene Gruppe an Cgroup-Wurzelverzeichnissen. Diese Wurzelverzeichnisse
       sind  die  Basispunkte  der  relativen  Orte,  die  in  den  entsprechenden  Datensätzen  in  der   Datei
       /proc/PID/cgroup  angezeigt  werden.  Wenn  ein Prozess mittels clone(2) oder unshare(2) mit dem Schalter
       CLONE_NEWCGROUP einen neuen Cgroup-Namensraum erstellt, werden seine aktuellen  Cgroup-Verzeichnisse  das
       Cgroup-Wurzelverzeichnis  des  neuen Namensraumes. (Dies gilt sowohl für die Cgroup-Version-1-Hierarchien
       als auch die vereinigte Cgroup-Version-2-Hierarchie.)

       Wenn die Cgroup-Mitgliedschaft eines »Ziel«-Prozesses aus /proc/PID/cgroup  gelesen  wird,  wird  der  im
       dritten  Feld  jedes  Datensatzes angezeigte Pfadname relativ zu dem Wurzelverzeichnis der entsprechenden
       Cgroup-Hierarchie des lesenden Prozesses sein. Falls das Cgroup-Verzeichnis des  Zielprozesses  außerhalb
       des  Wurzelverzeichnisses  des  Cgroup-Namensraums  des  lesenden Prozesses liegt, dann wird der Pfadname
       ../-Einträge für jede Vorgängerstufe in der Cgroup-Hierarchie anzeigen.

       Die folgende Shell-Sitzung zeigt die Auswirkung der Erstellung eines neuen Cgroup-Namensraumes.

       Zuerst wird (als Systemverwalter) in einer Shell im anfänglichen Cgroup-Namensraum eine Nachfolger-Cgroup
       in der freezer-Hierarchie erstellt  und  ein  Prozess  in  dieser  Cgroup  abgelegt,  der  als  Teil  der
       nachfolgenden Vorstellung verwandt wird:

           # mkdir -p /sys/fs/cgroup/freezer/sub2
           # sleep 10000 &     # Erzeugung eines Unterprozesses, der eine Zeit lebt
           [1] 20124
           # echo 20124 > /sys/fs/cgroup/freezer/sub2/cgroup.procs

       Dann wird eine andere Cgroup in der freezer-Hierachie erstellt und die Shell in diese Gruppe versetzt:

           # mkdir -p /sys/fs/cgroup/freezer/sub
           # echo $$                      # PID dieser Shell zeigen
           30655
           # echo 30655 > /sys/fs/cgroup/freezer/sub/cgroup.procs
           # cat /proc/self/cgroup | grep freezer
           7:freezer:/sub

       Als  nächstes  wird  unshare(1)  verwandt,  um einen Prozess zu erzeugen, der in einer neuen Shell in dem
       neuen Cgroup- und Einhängenamensraum läuft:

           # PS1="sh2# " unshare -Cm bash

       Von der neuen durch unshare(1) gestarteten Shell werden  dann  die  Dateien  /proc/PID/cgroup  der  neuen
       Shell,  eines  Prozesse in dem anfänglichen Cgroup-Namensraum ((init mit PID 1) bzw. des Prozesses in der
       benachbarten Cgroup (sub2) untersucht:

           sh2# cat /proc/self/cgroup | grep freezer
           7:freezer:/
           sh2# cat /proc/1/cgroup | grep freezer
           7:freezer:/..
           sh2# cat /proc/20124/cgroup | grep freezer
           7:freezer:/../sub2

       In der Ausgabe des ersten Befehls kann gesehen werden, dass die Freezer-Cgroup-Mitgliedschaft  der  neuen
       Shell  (die  in  der  gleichen  Cgroup  wie  die anfängliche Shell ist) relativ zum Wurzelverzeichnis der
       Freezer-Cgroup definiert angezeigt wird, die etabliert wurde, als  der  neue  Cgroup-Namensraum  erstellt
       wurde.  (Absolut  gesehen  ist  die  neue  Shell in der Freezer-Cgroup /sub und das Wurzelverzeichnis der
       Freezer-Cgroup-Hierarchie in dem neuen Cgroup-Namensraum auch /sub. Daher wird die  Cgroup-Mitgliedschaft
       der neuen Shell als »/« angezeigt.)

       Wird allerdings in /proc/self/mountinfo geschaut, taucht folgende Anomalie auf:

           sh2# cat /proc/self/mountinfo | grep freezer
           155 145 0:32 /.. /sys/fs/cgroup/freezer …

       Das  vierte  Feld  dieser  Zeile (/..) sollte das Verzeichnis in dem Cgroup-Dateisystem anzeigen, das die
       Wurzel  dieser   Einhängung   formt.   Da   per   Definition   von   Cgroup-Namensräumen   das   aktuelle
       Freezer-Cgroup-Verzeichnis  des  aktuellen Prozesses sein Wurzel-Freezer-Cgroup-Verzeichnis wurde, sollte
       in diesem Feld »/« auftauchen. Das Problem hier ist, dass ein Einhängeeintrag für das  Cgroup-Dateisystem
       gezeigt wird, das dem anfänglichen Cgroup-Namensraum entspricht (dessen Cgroup-Dateisystem tatsächlich am
       übergeordneten   Verzeichnis   von   sub  verwurzelt  ist).  Um  dieses  Problem  zu  beheben,  muss  das
       Freezer-Cgroup-Dateisystem aus der neuen Shell neu eingehängt werden (d.h. die Einhängung muss von  einem
       Prozess  durchgeführt werden, der in dem neuen Cgroup-Namensraum ist). Danach kann das erwartete Ergebnis
       gesehen werden:

           sh2# mount --make-rslave /     # Einhänge-Ereignisse nicht in
                                          # andere Namensräume weiterleiten
           sh2# umount /sys/fs/cgroup/freezer
           sh2# mount -t cgroup -o freezer freezer /sys/fs/cgroup/freezer
           sh2# cat /proc/self/mountinfo | grep freezer
           155 145 0:32 / /sys/fs/cgroup/freezer rw,relatime …

STANDARDS

       Linux.

ANMERKUNGEN

       Die Verwendung  von  Cgroup-Namensräumen  benötigt  einen  Kernel,  der  mit  der  Option  CONFIG_CGROUPS
       konfiguriert ist.

       Die durch Cgroup-Namensräume bereitgestellte Virtualisierung dient einer Reihe von Zwecken:

       •  Sie  verhindert  Informationslecks,  durch  die  Cgroup-Verzeichnispfade  außerhalb  eines  Containers
          andernfalls für Prozesse innerhalb des Containers sichtbar sind. Solche Lecks  könnten  beispielsweise
          Informationen über das umgebende Container-System an Anwendungen innerhalb von Containern offenlegen.

       •  Sie  erleichtern  Aufgaben  wie  Container-Migration.  Die  durch  Cgroup-Namensräume  bereitgestellte
          Virtualisierung erlaubt es,  Container  vom  Wissen  über  die  Pfadnamen  von  Vorgängern-Cgroups  zu
          isolieren.   Ohne  solche  Isolierungen  müssten  die  vollständigen  Cgroup-Pfadnamen  (angezeigt  in
          /proc/self/cgroups) auf dem Zielsystem bei der Migration eines  Containers  repliziert  werden;  diese
          Pfadnamen  müssten  auch  eindeutig sein, so dass sie nicht zu anderen Pfadnamen auf dem Zielsystem in
          Konflikt stehen.

       •  Sie  erlauben  bessere  Einsperrungen  von  Prozessen  in  Containern,  da   es   möglich   ist,   das
          Cgroup-Dateisystem des Containers so einzuhängen, dass der Prozess im Container keinen Zugriff auf die
          Vorgänger-Cgroup-Verzeichnisse erlangen kann. Betrachten Sie beispielsweise folgendes Szenario:

          •  Es gibt ein Cgroup-Verzeichnis /cg/1, das der Benutzerkennung 9000 gehört.

          •  Es  gibt einen Prozess X, der auch der Benutzerkennung 9000 gehört, der im Namensraum unterhalb der
             Cgroup /cg/1/2 ist (d.h. X wurde in einen neuen Cgroup-Namensraum mittels clone(2) oder  unshare(2)
             mit dem Schalter CLONE_NEWCGROUP gebracht).

          Da  das  Cgroup-Verzeichnis  /cg/1 der UID 9000 gehört (und für sie schreibbar ist) und X auch der UID
          9000 gehört, wäre der Prozess X, in Abwesenheit von Cgroup-Namensräumen, in der Lage, die Inhalte  der
          Cgroup-Dateien  zu  verändern (d.h. die Cgroup-Einstellungen zu ändern), nicht nur in /cg/1/2, sondern
          auch  in  dem  Vorgänger-Cgroup-Verzeichnis  /cg/1.  Da  der  Prozess  X  im  Namensraum   unter   dem
          Cgroup-Verzeichnis  /cg/1/2  ist,  wird,  in  Zusammenhang  mit  geeigneten  Einhängeaktionen  für das
          Cgroup-Dateisystem (wie oben gezeigt), verhindert, dass er Dateien in  /cg/1  verändert,  da  er  noch
          nicht     einmal    die    Inhalte    dieses    Verzeichnisses    (oder    von    weiter    entfernten
          Cgroup-Vorgänger-Verzeichnissen) sehen kann. In  Zusammenspiel  mit  der  korrekten  Durchsetzung  von
          hierarchischen  Beschränkungen  verhindert  dies,  dass  Prozess  X  diesen  von den Vorgänger-Cgroups
          auferlegten Beschränkungen entkommt.

SIEHE AUCH

       unshare(1),  clone(2),  setns(2),  unshare(2),  proc(5),   cgroups(7),   credentials(7),   namespaces(7),
       user_namespaces(7)

Ü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.9.1                              2. Mai 2024                              cgroup_namespaces(7)