.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2016 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH cgroup_namespaces 7 "30. März 2023" "Linux man\-pages 6.05.01" .SH BEZEICHNUNG cgroup_namespaces \- Überblick über Linux\-Cgroup\-Namensräume .SH BESCHREIBUNG Für einen Überblick über Namensräume, siehe \fBnamespaces\fP(7). .PP Cgroup\-Namensräume virtualisieren den Blick auf die Cgroups eines Prozesses (siehe \fBcgroups\fP(7)), wie er mittels \fI/proc/\fPPID\fI/cgroup\fP und \fI/proc/\fPPID\fI/mountinfo\fP gesehen wird. .PP 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 \fI/proc/\fPPID\fI/cgroup\fP angezeigt werden. Wenn ein Prozess mittels \fBclone\fP(2) oder \fBunshare\fP(2) mit dem Schalter \fBCLONE_NEWCGROUP\fP 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.) .PP Wenn die Cgroup\-Mitgliedschaft eines »Ziel«\-Prozesses aus \fI/proc/\fPPID\fI/cgroup\fP 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 \&\fI../\fP\-Einträge für jede Vorgängerstufe in der Cgroup\-Hierarchie anzeigen. .PP Die folgende Shell\-Sitzung zeigt die Auswirkung der Erstellung eines neuen Cgroup\-Namensraumes. .PP Zuerst wird (als Systemverwalter) in einer Shell im anfänglichen Cgroup\-Namensraum eine Nachfolger\-Cgroup in der \fIfreezer\fP\-Hierarchie erstellt und ein Prozess in dieser Cgroup abgelegt, der als Teil der nachfolgenden Vorstellung verwandt wird: .PP .in +4n .EX # \fBmkdir \-p /sys/fs/cgroup/freezer/sub2\fP # \fBsleep 10000 &\fP # Erzeugung eines Unterprozesses, der eine Zeit lebt [1] 20124 # \fBecho 20124 > /sys/fs/cgroup/freezer/sub2/cgroup.procs\fP .EE .in .PP Dann wird eine andere Cgroup in der \fIfreezer\fP\-Hierachie erstellt und die Shell in diese Gruppe versetzt: .PP .in +4n .EX # \fBmkdir \-p /sys/fs/cgroup/freezer/sub\fP # \fBecho $$\fP # PID dieser Shell zeigen 30655 # \fBecho 30655 > /sys/fs/cgroup/freezer/sub/cgroup.procs\fP # \fBcat /proc/self/cgroup | grep freezer\fP 7:freezer:/sub .EE .in .PP Als nächstes wird \fBunshare\fP(1) verwandt, um einen Prozess zu erzeugen, der in einer neuen Shell in dem neuen Cgroup\- und Einhängenamensraum läuft: .PP .in +4n .EX # \fBPS1="sh2# " unshare \-Cm bash\fP .EE .in .PP Von der neuen durch \fBunshare\fP(1) gestarteten Shell werden dann die Dateien \fI/proc/\fPPID\fI/cgroup\fP der neuen Shell, eines Prozesse in dem anfänglichen Cgroup\-Namensraum ((\fIinit\fP mit PID 1) bzw. des Prozesses in der benachbarten Cgroup (\fIsub2\fP) untersucht: .PP .in +4n .EX sh2# \fBcat /proc/self/cgroup | grep freezer\fP 7:freezer:/ sh2# \fBcat /proc/1/cgroup | grep freezer\fP 7:freezer:/.. sh2# \fBcat /proc/20124/cgroup | grep freezer\fP 7:freezer:/../sub2 .EE .in .PP 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 \fI/sub\fP und das Wurzelverzeichnis der Freezer\-Cgroup\-Hierarchie in dem neuen Cgroup\-Namensraum auch \fI/sub\fP. Daher wird die Cgroup\-Mitgliedschaft der neuen Shell als »/« angezeigt.) .PP Wird allerdings in \fI/proc/self/mountinfo\fP geschaut, taucht folgende Anomalie auf: .PP .in +4n .EX sh2# \fBcat /proc/self/mountinfo | grep freezer\fP 155 145 0:32 /.. /sys/fs/cgroup/freezer … .EE .in .PP Das vierte Feld dieser Zeile (\fI/..\fP) 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 \fIsub\fP 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: .PP .in +4n .EX sh2# \fBmount \-\-make\-rslave /\fP # Einhänge\-Ereignisse nicht in # andere Namensräume weiterleiten sh2# \fBumount /sys/fs/cgroup/freezer\fP sh2# \fBmount \-t cgroup \-o freezer freezer /sys/fs/cgroup/freezer\fP sh2# \fBcat /proc/self/mountinfo | grep freezer\fP 155 145 0:32 / /sys/fs/cgroup/freezer rw,relatime … .EE .in .\" .SH STANDARDS Linux. .SH ANMERKUNGEN Die Verwendung von Cgroup\-Namensräumen benötigt einen Kernel, der mit der Option \fBCONFIG_CGROUPS\fP konfiguriert ist. .PP Die durch Cgroup\-Namensräume bereitgestellte Virtualisierung dient einer Reihe von Zwecken: .IP \[bu] 3 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. .IP \[bu] 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 \fI/proc/self/cgroups\fP) 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. .IP \[bu] 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: .RS .IP \[bu] 3 Es gibt ein Cgroup\-Verzeichnis \fI/cg/1\fP, das der Benutzerkennung 9000 gehört. .IP \[bu] Es gibt einen Prozess \fIX\fP, der auch der Benutzerkennung 9000 gehört, der im Namensraum unterhalb der Cgroup \fI/cg/1/2\fP ist (d.h. \fIX\fP wurde in einen neuen Cgroup\-Namensraum mittels \fBclone\fP(2) oder \fBunshare\fP(2) mit dem Schalter \fBCLONE_NEWCGROUP\fP gebracht). .RE .IP Da das Cgroup\-Verzeichnis \fI/cg/1\fP der UID 9000 gehört (und für sie schreibbar ist) und \fIX\fP auch der UID 9000 gehört, wäre der Prozess \fIX\fP, 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 \fI/cg/1/2\fP, sondern auch in dem Vorgänger\-Cgroup\-Verzeichnis \fI/cg/1\fP. Da der Prozess \fIX\fP im Namensraum unter dem Cgroup\-Verzeichnis \fI/cg/1/2\fP ist, wird, in Zusammenhang mit geeigneten Einhängeaktionen für das Cgroup\-Dateisystem (wie oben gezeigt), verhindert, dass er Dateien in \fI/cg/1\fP 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 \fIX\fP diesen von den Vorgänger\-Cgroups auferlegten Beschränkungen entkommt. .SH "SIEHE AUCH" \fBunshare\fP(1), \fBclone\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBproc\fP(5), \fBcgroups\fP(7), \fBcredentials\fP(7), \fBnamespaces\fP(7), \fBuser_namespaces\fP(7) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .