Mount Namespace
Grundlegende Informationen
Ein Mount-Namespace ist eine Funktion des Linux-Kernels, die eine Isolierung der Dateisystem-Mount-Punkte für eine Gruppe von Prozessen ermöglicht. Jeder Mount-Namespace hat seine eigenen Dateisystem-Mount-Punkte, und Änderungen an den Mount-Punkten in einem Namespace wirken sich nicht auf andere Namespaces aus. Das bedeutet, dass Prozesse, die in verschiedenen Mount-Namespaces ausgeführt werden, unterschiedliche Ansichten der Dateisystem-Hierarchie haben können.
Mount-Namespaces sind besonders nützlich bei der Containerisierung, bei der jeder Container sein eigenes Dateisystem und seine eigene Konfiguration haben sollte, isoliert von anderen Containern und dem Host-System.
Funktionsweise:
Wenn ein neuer Mount-Namespace erstellt wird, wird er mit einer Kopie der Mount-Punkte aus seinem übergeordneten Namespace initialisiert. Das bedeutet, dass der neue Namespace bei der Erstellung die gleiche Ansicht des Dateisystems wie sein übergeordneter Namespace teilt. Jegliche nachfolgende Änderungen an den Mount-Punkten innerhalb des Namespace wirken sich jedoch nicht auf den übergeordneten Namespace oder andere Namespaces aus.
Wenn ein Prozess einen Mount-Punkt innerhalb seines Namespaces ändert, z.B. ein Dateisystem einbindet oder aushängt, ist die Änderung lokal für diesen Namespace und wirkt sich nicht auf andere Namespaces aus. Dadurch kann jeder Namespace seine eigene unabhängige Dateisystem-Hierarchie haben.
Prozesse können zwischen Namespaces wechseln, indem sie den Systemaufruf
setns()
verwenden oder neue Namespaces erstellen, indem sie die Systemaufrufeunshare()
oderclone()
mit dem FlagCLONE_NEWNS
verwenden. Wenn ein Prozess zu einem neuen Namespace wechselt oder einen erstellt, verwendet er die mit diesem Namespace verbundenen Mount-Punkte.Dateideskriptoren und Inodes werden über Namespaces hinweg geteilt, d.h. wenn ein Prozess in einem Namespace einen geöffneten Dateideskriptor hat, der auf eine Datei zeigt, kann er diesen Dateideskriptor an einen Prozess in einem anderen Namespace weitergeben, und beide Prozesse greifen auf dieselbe Datei zu. Die Pfadangabe der Datei kann jedoch in beiden Namespaces aufgrund von Unterschieden in den Mount-Punkten unterschiedlich sein.
Labor:
Erstellen Sie verschiedene Namespaces
CLI
Durch das Einhängen einer neuen Instanz des /proc
-Dateisystems mit dem Parameter --mount-proc
stellen Sie sicher, dass der neue Mount-Namespace eine genaue und isolierte Ansicht der prozessspezifischen Informationen für diesen Namespace hat.
Docker
Überprüfen, in welchem Namespace sich Ihr Prozess befindet
Um festzustellen, in welchem Namespace sich Ihr Prozess befindet, können Sie den folgenden Befehl verwenden:
Dieser Befehl zeigt die Symbolic Links zu den verschiedenen Namespaces an, in denen Ihr Prozess läuft. Der $$
-Teil des Befehls stellt die Prozess-ID (PID) Ihres aktuellen Prozesses dar.
Alle Mount-Namespaces finden
```bash nsenter -m TARGET_PID --pid /bin/bash ``` Auch können Sie nur in einen anderen Prozess-Namespace eintreten, wenn Sie root sind. Und Sie können nicht in einen anderen Namespace eintreten, ohne einen darauf verweisenden Deskriptor (wie `/proc/self/ns/mnt`).
Da neue Mounts nur innerhalb des Namespaces zugänglich sind, ist es möglich, dass ein Namespace sensible Informationen enthält, die nur von dort aus zugänglich sind.
Etwas mounten
Referenzen
Last updated