Ich habe den unshare
Befehl überprüft und gemäß seiner Manpage
unshare - run program with some namespaces unshared from parent
Ich sehe auch, dass es eine Art Namespace gibt,
mount namespace
mounting and unmounting filesystems will not affect rest of the system.
Was genau ist der Zweck dieses Mount-Namespace ? Ich versuche dieses Konzept anhand eines Beispiels zu verstehen.
Antworten:
Durch die Ausführung
unshare -m
erhält der aufrufende Prozess eine private Kopie seines Mount-Namespace und die Freigabe von Dateisystemattributen wird aufgehoben, sodass das Stammverzeichnis, das aktuelle Verzeichnis oder die umask-Attribute nicht mehr für andere Prozesse freigegeben werden.Also, was sagt der obige Absatz? Versuchen wir es anhand eines einfachen Beispiels.
Terminal 1:
Ich mache die folgenden Befehle im ersten Terminal.
Der letzte Befehl gibt mir die Ausgabe als,
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
Jetzt habe ich auch die folgenden Befehle ausgeführt.
Die Ausgabe des
ls
Befehls lautet:Was ist die große Sache dabei? Warum soll ich das machen?
Ich öffne jetzt ein anderes Terminal ( Terminal 2 ) und führe die folgenden Befehle aus.
Die Ausgabe ist wie folgt.
Die Dateien
hello
undhelloagain
sind nicht sichtbar und ich habe mich sogar als root angemeldet, um diese Dateien zu überprüfen. Der Vorteil ist also, dass wir mit dieser Funktion ein privates temporäres Dateisystem erstellen können, das selbst andere Stammprozesse nicht sehen oder durchsuchen können.Aus der Manpage von
unshare
,Der für den Namespace verwendete Speicher ist VFS, der vom Kernel stammt. Und - wenn wir es von Anfang an richtig eingerichtet haben - können wir ganze virtuelle Umgebungen erstellen, in denen wir der Root-Benutzer ohne Root-Berechtigungen sind.
Verweise:
Das Beispiel ist mit den Details aus diesem Blog-Beitrag gerahmt . Auch die Zitate dieser Antwort stammen aus dieser wunderbaren Erklärung von Mike . Eine weitere wundervolle Lektüre dazu finden Sie in der Antwort von hier .
quelle
this feature makes it possible for us to create a private temporary filesystem that even other root-owned processes cannot see or browse through.
Und im Vergleich zuchroot
, mitchroot
Dateien sind für andere sichtbar. Das ist erstaunlich und dieser Satz sollte wahrscheinlich ganz oben auf der Antwort stehen. + 1ed.nsenter
Sie den Namespace eingeben und die temporären Dateien anzeigen. Wenn Sie nur eine Freigabe aufheben (diejenige, die das tempdir besitzt),sudo nsenter -t $(pgrep -P $(ps aux | grep unshare | grep -v grep | awk '{print $2}')) -m -p
können Sie den InhaltWenn Sie Bubble Wrap auf Ihrem System installiert haben , können Sie dies problemlos in einem Schritt tun:
Im obigen Beispiel hat die innere Bash eine eigene Sicht auf / tmp.
Lösung von @ Ramesh-s Antwort inspiriert - danke dafür!
quelle