Man page - namespaces(7)

Packages contains this manual

Available languages:

en fr pl sv ja ru de

Manual

namespaces

BEZEICHNUNG
BESCHREIBUNG
Namensraumtypen
Das Namensraum-API
Das Verzeichnis /proc/PID/ns/
Das Verzeichnis /proc/sys/user
Namensraum-Lebensdauer
BEISPIELE
SIEHE AUCH
ÜBERSETZUNG

BEZEICHNUNG

namespaces - Überblick ĂŒber Linux-NamensrĂ€ume

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.

Diese Seite stellt Verweise auf Informationen ĂŒber die verschiedenen Namensraumtypen bereit, beschreibt die zugehörigen Dateien in /proc und fasst das API zum Arbeiten mit NamensrĂ€umen zusammen.

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.

Image grohtml-1192405-1.png

Das Namensraum-API

Neben verschiedenen, nachfolgend beschriebenen Dateien in /proc enthÀlt das Namensraum-API die folgenden Systemaufrufe:
clone
(2)

Der Systemaufruf clone (2) erstellt einen neuen Prozess. Falls das Argument Schalter des Aufrufs einen oder mehrere der oben aufgefĂŒhrten Schalter CLONE_NEW* 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.)

setns (2)

Der Systemaufruf setns (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 /proc/ PID /ns bezieht.

unshare (2)

Der Systemaufruf unshare (2) verschiebt den aufrufenden Prozess in einen neuen Namensraum. Falls das Argument Schalter des Aufrufs einen oder mehrere der oben aufgefĂŒhrten Schalter CLONE_NEW* 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.)

ioctl (2)

Verschiedene ioctl (2)-Aktionen können zum Ermitteln von Informationen ĂŒber NamensrĂ€ume verwandt werden. Diese Aktionen sind in ioctl_nfs (2) beschrieben.

In den meisten FĂ€llen benötigt die Erstellung neuer NamensrĂ€ume mittels clone (2) und unshare (2) die Capability CAP_SYS_ADMIN , 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.

Das Verzeichnis /proc/PID/ns/

Jeder Prozess verfĂŒgt ĂŒber ein Unterverzeichnis /proc/ PID /ns/ , das einen Eintrag fĂŒr jeden Namensraum enthĂ€lt, der die Manipulation mittels setns (2) erlaubt:

$ ls -l /proc/$$/ns | awk '{print $1, $9, $10, $11}'
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]

Durch Bind-EinhÀngungen (siehe mount (2)) einer der Dateien in diesem Verzeichnis an einen anderen Platz im Dateisystem wird der entsprechende Namensraum des durch PID festgelegten Prozesses am Leben erhalten, selbst wenn alle derzeit im Namensraum befindlichen Prozesse beendet werden.

Ö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 PID 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 setns (2) weitergegeben werden.

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 /proc/ PID /ns/ xxx identisch sein; die Anwendung kann dies mittels der von stat (2) zurĂŒckgelieferten Felder stat.st_dev und stat.st_ino ĂŒberprĂŒfen. Der Inhalt dieses symbolischen Links ist eine Zeichenkette, die den Namensraumtyp und die Inode-Nummer wie im folgenden Beispiel enthĂ€lt:

$ readlink /proc/$$/ns/uts
uts:[4026531838]

Die symbolischen Links in diesem Unterverzeichnis sind wie folgt:
/proc/
PID /ns/cgroup (seit Linux 4.6)

Diese Datei ist ein Handle fĂŒr den Cgroup-Namensraum des Prozesses.

/proc/ PID /ns/ipc (seit Linux 3.0)

Diese Datei ist ein Handle fĂŒr den IPC-Namensraum des Prozesses.

/proc/ PID /ns/mnt (seit Linux 3.8)

Diese Datei ist ein Handle fĂŒr den EinhĂ€nge-Namensraum des Prozesses.

/proc/ PID /ns/net (seit Linux 3.0)

Diese Datei ist ein Handle fĂŒr den Netzwerk-Namensraum des Prozesses.

/proc/ PID /ns/pid (seit Linux 3.8)

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).

/proc/ PID /ns/pid_for_children (seit Linux 4.12)

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 unshare (2) und setns (2) Ă€ndern (siehe pid_namespaces (7)), daher kann sich die Datei von /proc/ PID /ns/pid unterscheiden. Der symbolische Link wird erst nach der Erstellung des ersten Kindprozesses in den Namensraum wertvoll. (Vorher wird ein readlink (2) von dem symbolischen Link einen leeren Puffer zurĂŒckgeben.)

/proc/ PID /ns/time (seit Linux 5.6)

Diese Datei ist ein Handle fĂŒr den Zeit-Namensraum des Prozesses.

/proc/ PID /ns/time_for_children (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 unshare (2) und setns (2) Ă€ndern (siehe time_namespaces (7)), daher kann sich die Datei von /proc/ PID /ns/time unterscheiden.

/proc/ PID /ns/user (seit Linux 3.8)

Diese Datei ist ein Handle fĂŒr den Benutzer-Namensraum des Prozesses.

/proc/ PID /ns/uts (seit Linux 3.0)

Diese Datei ist ein Handle fĂŒr den UTS-Namensraum des Prozesses.

Die Berechtigungen, diese symbolischen Links zu dereferenzieren oder zu lesen ( readlink (2)) werden durch eine Ptrace-ZugriffsmodusĂŒberprĂŒfung PTRACE_MODE_READ_FSCREDS gesteuert; siehe ptrace (2).

Das Verzeichnis /proc/sys/user

Die Dateien im Verzeichnis /proc/sys/user (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:
max_cgroup_namespaces

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.

max_ipc_namespaces

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.

max_mnt_namespaces

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.

max_net_namespaces

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.

max_pid_namespaces

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.

max_time_namespaces (seit Linux 5.7)

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.

max_user_namespaces

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.

max_uts_namespaces

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.

Beachten Sie die folgenden Details ĂŒber diese Dateien:

‱

Die Werte in diesen Dateien können von privilegierten Prozessen verÀndert werden.

‱

Die in diesen Dateien offengelegten Werte sind die Begrenzungen fĂŒr die BenuzernamensrĂ€ume, in denen sich der öffnende Prozess befindet.

‱

Die Begrenzungen gelten pro Benutzer. Jeder Benutzer in dem gleichen Benutzernamensraum kann NamensrÀume bis zu der definierten Begrenzung erstellen.

‱

Die Begrenzungen gelten fĂŒr alle Benutzer, einschließlich UID 0.

‱

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.

‱

Beim Erreichen dieser BeschrÀnkungen werden clone (2) und unshare (2) mit dem Fehler ENOSPC fehlschlagen.

‱

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 ( /proc/sys/kernel/threads-max ). In allen abgeleiteten BenutzernamensrĂ€umen ist der Vorgabewert in jeder Datei MAXINT .

‱

Wenn ein Namensraum erstellt wird, wird das Objekt auch gegen die VorgÀngernamensrÀume verrechnet. Genauer:

‱

Jeder Benutzernamensraum hat eine Ersteller-UID.

‱

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.

‱

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.

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:

‱

Ein offener Dateideskriptor oder eine Bind-EinhĂ€ngung fĂŒr die entsprechende Datei /proc/ PID /ns/* .

‱

Der Namensraum ist hierarchisch (d.h. ein PID- oder Benutzernamensraum) und hat einen Kindnamensraum.

‱

Es ist ein Benutzernamensraum, der einen oder mehrere nicht-Benutzer-NamensrÀume besitzt.

‱

Es ist ein PID-Namensraum und es gibt einen Prozess, der sich mittels eines symbolischen Links /proc/ PID /ns/pid_for_children auf einen Namensraum bezieht.

‱

Es ist ein Zeitnamensraum und es gibt einen Prozess, der sich mittels eines symbolischen Links /proc/ PID /ns/time_for_children auf einen Namensraum bezieht.

‱

Es ist ein IPC-Namensraum und eine entsprechende EinhÀngung eines mqueue -Dateisystems (siehe mq_overview (7)) bezieht sich auf diesen Namensraum.

‱

Es ist ein PID-Namensraum und eine entsprechende EinhÀngung eines proc (5)-Dateisystems bezieht sich auf diesen Namensraum.

BEISPIELE

Siehe clone (2) und user_namespaces (7).

SIEHE AUCH

nsenter (1), readlink (1), unshare (1), clone (2), ioctl_nsfs (2), setns (2), unshare (2), proc (5), capabilities (7), cgroup_namespaces (7), cgroups (7), credentials (7), ipc_namespaces (7), network_namespaces (7), pid_namespaces (7), user_namespaces (7), uts_namespaces (7), lsns (8), switch_root (8)

Ü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: debian-l10n-german@lists.debian.org .