.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2013, 2016, 2017 by Michael Kerrisk .\" and Copyright (c) 2012 by Eric W. Biederman .\" .\" %%%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 NAMESPACES 7 "1. November 2020" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG namespaces \- Überblick über Linux\-Namensräume .SH 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. .PP .\" Diese Seite stellt Verweise auf Informationen über die verschiedenen Namensraumtypen bereit, beschreibt die zugehörigen Dateien in \fI/proc\fP und fasst das API zum Arbeiten mit Namensräumen zusammen. .SS 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. .TS lB lB lB lB l1 lB1 l1 l. Namensraum Schalter Seite isoliert Cgroup CLONE_NEWCGROUP \fBcgroup_namespaces\fP(7) Cgroup\-Wurzelverzeichnis IPC CLONE_NEWIPC \fBipc_namespaces\fP(7) T{ System V IPC, .br POSIX\-Nachrichtenwarteschlangen T} Netzwerk CLONE_NEWNET \fBnetwork_namespaces\fP(7) T{ Netzwerkgeräte .br stacks, Ports, usw. T} Einhängungen CLONE_NEWNS \fBmount_namespaces\fP(7) Einhängepunkte PID CLONE_NEWPID \fBpid_namespaces\fP(7) Prozesskennungen Zeit CLONE_NEWTIME \fBtime_namespaces\fP(7) T{ Startzeit und monotone .br Uhren T} User CLONE_NEWUSER \fBuser_namespaces\fP(7) Benutzer\- und Gruppenkennungen UTS CLONE_NEWUTS \fButs_namespaces\fP(7) T{ Rechnername und NIS\- .br Domain\-Name T} .TE .\" .\" ==================== The namespaces API ==================== .\" .SS "Das Namensraum\-API" Neben verschiedenen, nachfolgend beschriebenen Dateien in \fI/proc\fP enthält das Namensraum\-API die folgenden Systemaufrufe: .TP \fBclone\fP(2) Der Systemaufruf \fBclone\fP(2) erstellt einen neuen Prozess. Falls das Argument \fISchalter\fP des Aufrufs einen oder mehrere der unten aufgeführten Schalter \fBCLONE_NEW*\fP 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.) .TP \fBsetns\fP(2) Der Systemaufruf \fBsetns\fP(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 \fI/proc/[PID]/ns\fP bezieht. .TP \fBunshare\fP(2) Der Systemaufruf \fBunshare\fP(2) verschiebt den aufrufenden Prozess in einen neuen Namensraum. Falls das Argument \fISchalter\fP des Aufrufs einen oder mehrere der unten aufgeführten Schalter \fBCLONE_NEW*\fP 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.) .TP \fBioctl\fP(2) Verschiedene \fBioctl\fP(2)\-Aktionen können zum Ermitteln von Informationen über Namensräume verwandt werden. Diese Aktionen sind in \fBioctl_ns\fP(2) beschrieben. .PP .\" .\" ==================== The /proc/[pid]/ns/ directory ==================== .\" In den meisten Fällen benötigt die Erstellung neuer Namensräume mittels \fBclone\fP(2) und \fBunshare\fP(2) die Capability \fBCAP_SYS_ADMIN\fP, 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. .SS "Das Verzeichnis /proc/[PID]/ns/" .\" See commit 6b4e306aa3dc94a0545eb9279475b1ab6209a31f Jeder Prozess verfügt über ein Unterverzeichnis \fI/proc/[PID]/ns/\fP, das einen Eintrag für jeden Namensraum enthält, der die Manipulation mittels \fBsetns\fP(2) erlaubt: .PP .in +4n .EX $ \fBls \-l /proc/$$/ns | awk \(aq{print $1, $9, $10, $11}\(aq\fP 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] .EE .in .PP Durch Bind\-Einhängungen (siehe \fBmount\fP(2)) einer der Dateien in diesem Verzeichnis an einen anderen Platz im Dateisystem wird der entsprechende Namensraum des durch \fIPID\fP festgelegten Prozesses am Leben erhalten, selbst wenn alle derzeit im Namensraum befindlichen Prozesse beendet werden. .PP Ö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 \fIPID\fP 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 \fBsetns\fP(2) weitergegeben werden. .PP .\" commit bf056bfa80596a5d14b26b17276a56a0dcb080e5 .\" Eric Biederman: "I reserve the right for st_dev to be significant .\" when comparing namespaces." .\" https://lore.kernel.org/lkml/87poky5ca9.fsf@xmission.com/ .\" Re: Documenting the ioctl interfaces to discover relationships... .\" Date: Mon, 12 Dec 2016 11:30:38 +1300 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 \fI/proc/[PID]/ns/xxx\fP identisch sein; die Anwendung kann dies mittels der von \fBstat\fP(2) zurückgelieferten Felder \fIstat.st_dev\fP und \fIstat.st_ino\fP überprüfen. Der Inhalt dieses symbolischen Links ist eine Zeichenkette, die den Namensraumtyp und die Inode\-Nummer wie im folgenden Beispiel enthält: .PP .in +4n .EX $ \fBreadlink /proc/$$/ns/uts\fP uts:[4026531838] .EE .in .PP Die symbolischen Links in diesem Unterverzeichnis sind wie folgt: .TP \fI/proc/[PID]/ns/cgroup\fP (seit Linux 4.6) Diese Datei ist ein Handle für den Cgroup\-Namensraum des Prozesses. .TP \fI/proc/[PID]/ns/ipc\fP (seit Linux 3.0) Diese Datei ist ein Handle für den IPC\-Namensraum des Prozesses. .TP \fI/proc/[PID]/ns/mnt\fP (seit Linux 3.8) .\" commit 8823c079ba7136dc1948d6f6dcb5f8022bde438e Diese Datei ist ein Handle für den Einhänge\-Namensraum des Prozesses. .TP \fI/proc/[PID]/ns/net\fP (seit Linux 3.0) Diese Datei ist ein Handle für den Netzwerk\-Namensraum des Prozesses. .TP \fI/proc/[PID]/ns/pid\fP (seit Linux 3.8) .\" commit 57e8391d327609cbf12d843259c968b9e5c1838f 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). .TP \fI/proc/[PID]/ns/pid_for_children\fP (seit Linux 4.12) .\" commit eaa0d190bfe1ed891b814a52712dcd852554cb08 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 \fBunshare\fP(2) und \fBsetns\fP(2) ändern (siehe \fBpid_namespaces\fP(7)), daher kann sich die Datei von \fI/proc/[PID]/ns/pid\fP unterscheiden. Der symbolische Link wird erst nach der Erstellung des ersten Kindprozesses in den Namensraum wertvoll. (Vorher wird ein \fBreadlink\fP(2) von dem symbolischen Link einen leeren Puffer zurückgeben.) .TP \fI/proc/[PID]/ns/time\fP (seit Linux 5.6) Diese Datei ist ein Handle für den Zeit\-Namensraum des Prozesses. .TP \fI/proc/[PID]/ns/time_for_children\fP (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 \fBunshare\fP(2) und \fBsetns\fP(2) ändern (siehe \fBtime_namespaces\fP(7)), daher kann sich die Datei von \fI/proc/[PID]/ns/time\fP unterscheiden. .TP \fI/proc/[PID]/ns/user\fP (seit Linux 3.8) .\" commit cde1975bc242f3e1072bde623ef378e547b73f91 Diese Datei ist ein Handle für den Benutzer\-Namensraum des Prozesses. .TP \fI/proc/[PID]/ns/uts\fP (seit Linux 3.0) Diese Datei ist ein Handle für den UTS\-Namensraum des Prozesses. .PP .\" .\" ==================== The /proc/sys/user directory ==================== .\" Die Berechtigungen, diese symbolischen Links zu dereferenzieren oder zu lesen (\fBreadlink\fP(2)) werden durch eine Ptrace\-Zugriffsmodusüberprüfung \fBPTRACE_MODE_READ_FSCREDS\fP gesteuert; siehe \fBptrace\fP(2). .SS "Das Verzeichnis \fI/proc/sys/user\fP" Die Dateien im Verzeichnis \fI/proc/sys/user\fP (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: .TP \fImax_cgroup_namespaces\fP 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. .TP \fImax_ipc_namespaces\fP 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. .TP \fImax_mnt_namespaces\fP 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. .TP \fImax_net_namespaces\fP 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. .TP \fImax_pid_namespaces\fP 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. .TP \fImax_time_namespaces\fP (seit Linux 5.7) .\" commit eeec26d5da8248ea4e240b8795bb4364213d3247 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. .TP \fImax_user_namespaces\fP 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. .TP \fImax_uts_namespaces\fP 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. .PP Beachten Sie die folgenden Details über diese Dateien: .IP * 3 Die Werte in diesen Dateien können von privilegierten Prozessen verändert werden. .IP * Die in diesen Dateien offengelegten Werte sind die Begrenzungen für die Benuzernamensräume, in denen sich der öffnende Prozess befindet. .IP * Die Begrenzungen gelten pro Benutzer. Jeder Benutzer in dem gleichen Benutzernamensraum kann Namensräume bis zu der definierten Begrenzung erstellen. .IP * Die Begrenzungen gelten für alle Benutzer, einschließlich UID 0. .IP * 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. .IP * Beim Erreichen dieser Beschränkungen werden \fBclone\fP(2) und \fBunshare\fP(2) mit dem Fehler \fBENOSPC\fP fehlschlagen. .IP * 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 (\fI/proc/sys/kernel/threads\-max\fP). In allen abgeleiteten Benutzernamensräumen ist der Vorgabewert in jeder Datei \fBMAXINT\fP. .IP * Wenn ein Namensraum erstellt wird, wird das Objekt auch gegen die Vorgängernamensräume verrechnet. Genauer: .RS .IP + 3 Jeder Benutzernamensraum hat eine Ersteller\-UID. .IP + 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. .IP + 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. .RE .\" .SS 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: .IP * 3 Ein offener Dateideskriptor oder eine Bind\-Einhängung für die entsprechende Datei \fI/proc/[PID]/ns/*\fP. .IP * Der Namensraum ist hierarchisch (d.h. ein PID\- oder Benutzernamensraum) und hat einen Kindnamensraum. .IP * Es ist ein Benutzernamensraum, der einen oder mehrere nicht\-Benutzer\-Namensräume besitzt. .IP * Es ist ein PID\-Namensraum und es gibt einen Prozess, der sich mittels eines symbolischen Links \fI/proc/[PID]/ns/pid_for_children\fP auf einen Namensraum bezieht. .IP * Es ist ein Zeitnamensraum und es gibt einen Prozess, der sich mittels eines symbolischen Links \fI/proc/[PID]/ns/time_for_children\fP auf einen Namensraum bezieht. .IP * Es ist ein IPC\-Namensraum und eine entsprechende Einhängung eines \fImqueue\fP\-Dateisystems (siehe \fBmq_overview\fP(7)) bezieht sich auf diesen Namensraum. .IP * Es ist ein PID\-Namensraum und eine entsprechende Einhängung eines \fIproc\fP(5)\-Dateisystems bezieht sich auf diesen Namensraum. .SH BEISPIELE Siehe \fBclone\fP(2) und \fBuser_namespaces\fP(7). .SH "SIEHE AUCH" \fBnsenter\fP(1), \fBreadlink\fP(1), \fBunshare\fP(1), \fBclone\fP(2), \fBioctl_ns\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBproc\fP(5), \fBcapabilities\fP(7), \fBcgroup_namespaces\fP(7), \fBcgroups\fP(7), \fBcredentials\fP(7), \fBipc_namespaces\fP(7), \fBnetwork_namespaces\fP(7), \fBpid_namespaces\fP(7), \fBuser_namespaces\fP(7), \fButs_namespaces\fP(7), \fBlsns\fP(8), \fBpam_namespace\fP(8), \fBswitch_root\fP(8) .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 .