Anzeigen / Bearbeiten von Mount-Namespaces unter Linux

8

Gibt es eine Möglichkeit, den Mount-Namespace für einen beliebigen Prozess anzuzeigen oder zu bearbeiten?

Beispielsweise wird ein Docker-Container ausgeführt, der eine lokale Bereitstellung für einen NFS-Server aufweist. Es kann von innen gesehen werden, aber von außen weiß der Host nichts davon. Mit Netzwerk-Namespaces ist dies möglich. zB Rohrleitungen

Für Mount-Namespaces sehe ich jedoch nichts darüber. Gibt es eine API- oder Sysfs-Ebene, die verfügbar ist, um diese Mounts anzuzeigen und neue zu bearbeiten oder zu erstellen?

Matt H.
quelle

Antworten:

6

Ja. Sie können sich das ansehen /proc/$PID/mountinfooder den findmnt -NSchalter verwenden - über den findmnt --helpsteht:

  • -N, --task <tid>
    • Verwenden Sie einen alternativen Namespace ( /proc/<tid>/mountinfoDatei).

findmntVerfolgt auch das PROPAGATIONFlag, das ein mountinfoFeld ist, das genau über diese Informationen berichtet - welche Prozesse welche Bereitstellungen gemeinsam nutzen.

Sie können auch jederzeit einen nsenterbeliebigen Namespace verwenden - vorausgesetzt, Sie verfügen natürlich über die richtigen Berechtigungen.

 nsenter --help
Usage:
 nsenter [options] <program> [args...]

Options:
 -t, --target <pid>     target process to get namespaces from
 -m, --mount [=<file>]  enter mount namespace
 -u, --uts   [=<file>]  enter UTS namespace (hostname etc)
 -i, --ipc   [=<file>]  enter System V IPC namespace
 -n, --net   [=<file>]  enter network namespace
 -p, --pid   [=<file>]  enter pid namespace
 -U, --user  [=<file>]  enter user namespace
 -S, --setuid <uid>     set uid in user namespace
 -G, --setgid <gid>     set gid in user namespace
 -r, --root  [=<dir>]   set the root directory
 -w, --wd    [=<dir>]   set the working directory
 -F, --no-fork          do not fork before exec'ing <program>

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see nsenter(1).
mikeserv
quelle
0

Der Kernel bietet auch einen einfachen direkten Zugriff auf den speziellen Fall des Mount-Namespace einer bestimmten PID / TID : /proc/<pid>/root/.

Dies ist ein Link zum root ( /) -Verzeichnis dieses Prozesses, einschließlich aller Mount-Punkte (er wird als Symlink zum /Prozess angezeigt, wird jedoch tatsächlich in den Prozess aufgelöst /, wie z. B. das Verhalten von Symlinks gelöschter Dateien in /proc/<pid>/fd/).

Dies ist beispielsweise praktisch, um eine Datei zwischen Host und / oder Containern zu kopieren, wenn für diese Container keine Umgebung und kein Befehl (z. B. keine Shell) verfügbar sind. Dies wäre bei Verwendung nicht möglich nsenter, zumindest nicht ohne eine spezielle Software, die sich später nicht auf fork / exec verlässt.

AB
quelle