Provided by: manpages-de_4.15.0-9_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 …

KONFORM ZU

       Namensräume sind eine Linux-spezifische Funktionalität.

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)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  5.13  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

Ü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⟩.