.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2016 by Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH CGROUP_NAMESPACES 7 "1. November 2020" Linux Linux\-Programmierhandbuch .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/[PID]/cgroup\fP und \fI/proc/[PID]/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/[PID]/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/[PID]/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/[PID]/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 "KONFORM ZU" Namensräume sind eine Linux\-spezifische Funktionalität. .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 * 2 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 * 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 * 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 4 .IP \(bu 2 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) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux\-\fIman\-pages\fP. 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/. .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 .