GNU/Linux >> Linux Esercitazione >  >> Linux

punti di montaggio del file system privato per processo

In esecuzione unshare -m fornisce al processo chiamante una copia privata del suo spazio dei nomi di montaggio e annulla anche la condivisione degli attributi del file system in modo che non condivida più la sua directory principale, la directory corrente o gli attributi umask con qualsiasi altro processo.

Quindi cosa dice il paragrafo precedente? Cerchiamo di capire usando un semplice esempio.

Terminale 1:

Eseguo i comandi seguenti nel primo terminale.

#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 

L'ultimo comando mi dà l'output come,

tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0

Ora, ho eseguito anche i seguenti comandi.

cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa

L'output di ls comando è,

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

Allora qual è il grosso problema nel fare tutto questo? Perché dovrei farlo?

Apro un altro terminale ora (terminale 2 ) ed eseguire i seguenti comandi.

cd /tmp/tmp.7KtrAsd9lx
ls - lFa

L'output è il seguente.

ls -lFa
total 8
drwx------   2 root root 4096 Sep  3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep  3 22:22 ../

I file hello e helloagain non sono visibili e ho anche effettuato l'accesso come root per controllare questi file. Quindi il vantaggio è che questa funzione ci consente di creare un filesystem temporaneo privato che nemmeno altri processi di proprietà di root non possono vedere o sfogliare.

Dalla pagina man di unshare ,

mount namespace Il montaggio e lo smontaggio dei filesystem non influenzerà il resto del sistema (flag CLONE_NEWNS), ad eccezione dei filesystem che sono esplicitamente contrassegnati come condivisi (con mount--make-shared; vedi /proc/self/mountinfo per i flag condivisi).

Si consiglia di utilizzare mount --make-rprivate o mount --make-rslaveafter unshare--mount per assicurarsi che i punti di montaggio nel nuovo spazio dei nomi non siano realmente condivisi dallo spazio dei nomi principale.

La memoria utilizzata per lo spazio dei nomi è VFS che proviene dal kernel. E - se lo configuriamo correttamente in primo luogo - possiamo creare interi ambienti virtuali in cui siamo l'utente root senza i permessi di root.

Riferimenti:

L'esempio è incorniciato utilizzando i dettagli di questo post sul blog. Inoltre, le citazioni di questa risposta provengono da questa meravigliosa spiegazione di Mike. Un'altra meravigliosa lettura al riguardo può essere trovata dalla risposta da qui.


Se hai installato il pluriball sul tuo sistema, puoi farlo facilmente in un solo passaggio:

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

Nell'esempio precedente, la bash interna avrà la propria vista su /tmp.

Soluzione ispirata alla risposta di @Ramesh - grazie!


Linux
  1. Esempi Linux AuFS:un altro tutorial di Union File System (implementazione UnionFS)

  2. Come ridurre il filesystem di root su CentOS / RHEL 6

  3. CentOS / RHEL:come ridurre il file system radice LVM

  4. Come montare e smontare un file system in Linux

  5. File system multipiattaforma

Dbxfs – Monta la cartella Dropbox localmente come file system virtuale in Linux

Come montare Google Drive localmente come file system virtuale in Linux

Come montare un filesystem Linux remoto usando SSHFS

Linux:quali punti di montaggio esistono su un tipico sistema Linux?

Come montare e visualizzare il file ISO come utente root e normale in Linux

Montare e modificare un file di loopback senza sudo/root, è possibile?