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.
#Creating a new process
unshare -m /bin/bash
#creating a new mount point
secret_dir=`mktemp -d --tmpdir=/tmp`
#creating a new mount point for the above created directory.
mount -n -o size=1m -t tmpfs tmpfs $secret_dir
#checking the available mount points.
grep /tmp /proc/mounts
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.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
Die Ausgabe des ls
Befehls lautet:
ls -lFa
total 4
drwxrwxrwt 2 root root 80 Sep 3 22:23 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
-rw-r--r-- 1 root root 0 Sep 3 22:23 hello
-rw-r--r-- 1 root root 0 Sep 3 22:23 helloagain
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.
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
Die Ausgabe ist wie folgt.
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
Die Dateien hello
und helloagain
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
,
Mount-Namespace Das Aktivieren und Deaktivieren von Dateisystemen hat keine Auswirkungen auf den Rest des Systems (CLONE_NEWNS-Flag), mit Ausnahme von Dateisystemen, die explizit als freigegeben markiert sind (mit mount --make-shared; siehe / proc / self / mountinfo für die freigegebenen Flags).
Es wird empfohlen, mount --make-rprivate oder mount --make-rslave nach unshare --mount zu verwenden, um sicherzustellen, dass die Mountpunkte im neuen Namespace wirklich nicht vom übergeordneten Namespace geteilt werden.
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 .