GNU/Linux >> LINUX-Kenntnisse >  >> Linux

pro Prozess private Dateisystem-Mount-Punkte

Ausführen von unshare -m gibt dem aufrufenden Prozess eine private Kopie seines Mount-Namensraums und hebt auch die Freigabe von Dateisystemattributen auf, so dass er sein Stammverzeichnis, aktuelles Verzeichnis oder umask-Attribute nicht länger mit irgendeinem anderen Prozess teilt.

Was sagt also der obige Absatz aus? Versuchen wir es anhand eines einfachen Beispiels zu verstehen.

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 von ls Befehl ist,

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 also die große Sache bei all dem? Warum sollte ich das tun?

Ich öffne jetzt ein anderes Terminal (Terminal 2 ) und führen Sie 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 diese Funktion es uns ermöglicht, ein privates temporäres Dateisystem zu erstellen, das selbst andere root-eigene Prozesse nicht sehen oder durchsuchen können.

Aus der Manpage von unshare ,

Mount-Namespace Das Mounten und Unmounten von Dateisystemen wirkt sich nicht auf den Rest des Systems aus (CLONE_NEWNS-Flag), mit Ausnahme von Dateisystemen, die explizit als gemeinsam genutzt gekennzeichnet sind (mit mount--make-shared; siehe /proc/self/mountinfo für die gemeinsam genutzten Flags).

Es wird empfohlen, mount --make-rprivate oder mount --make-rslaveafter unshare--mount zu verwenden, um sicherzustellen, dass Einhängepunkte im neuen Namensraum wirklich vom Eltern-Namensraum getrennt werden.

Der für den Namensraum verwendete Speicher ist VFS, das vom Kernel stammt. Und – wenn wir es überhaupt richtig einrichten – können wir ganze virtuelle Umgebungen erstellen, in denen wir der Root-Benutzer ohne Root-Berechtigungen sind.

Referenzen:

Das Beispiel wird anhand der Details aus diesem Blogbeitrag eingerahmt. Auch die Zitate dieser Antwort stammen aus dieser wunderbaren Erklärung von Mike. Eine weitere wunderbare Lektüre dazu finden Sie in der Antwort von hier.


Wenn Sie Bubblewrap auf Ihrem System installiert haben, können Sie dies ganz einfach in einem Schritt tun:

bwrap --dev-bind / / --tmpfs /tmp bash

Im obigen Beispiel hat inner bash seine eigene Ansicht auf /tmp.

Lösung inspiriert von @Rameshs Antwort - danke dafür!


Linux
  1. Linux-AuFS-Beispiele:Ein weiteres Tutorial zum Union-Dateisystem (UnionFS-Implementierung)

  2. So verkleinern Sie das Root-Dateisystem unter CentOS / RHEL 6

  3. So erstellen und mounten Sie das Btrfs-Dateisystem (mit Beispielen erklärt)

  4. So erstellen und mounten Sie Dateisysteme in Linux

  5. Wie kann ich als normaler Benutzer manuell ein Linux-Dateisystem mit Lese-/Schreibzugriff mounten?

Dbxfs – Dropbox-Ordner lokal als virtuelles Dateisystem in Linux bereitstellen

So mounten Sie Google Drive lokal als virtuelles Dateisystem in Linux

So mounten Sie ein Remote-Linux-Dateisystem mit SSHFS

So mounten und zeigen Sie die ISO-Datei als Root und normaler Benutzer in Linux an

Wie kann ein Dateimanager ein Laufwerk ohne Root mounten?

Befinden sich zwei Unterverzeichnisse mit demselben Stammverzeichnis garantiert im selben gemounteten Dateisystem?