In esecuzione unshare -m
fornisce al processo chiamante una copia privata del suo spazio dei nomi di mount e inoltre annulla 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 nessun altro processo.
Quindi cosa dice il paragrafo precedente? Proviamo a capire usando un semplice esempio.
Terminale 1:
Faccio i seguenti comandi 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 fatto anche i seguenti comandi.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
L'output del 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?
Ora apro un altro terminale ( terminale 2 ) e faccio 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 le helloagain
non sono visibili e ho anche collegati come root per controllare questi file. Quindi il vantaggio è questa funzione ci consente di creare un filesystem temporaneo privato che nemmeno altri processi di proprietà di root possono vedere o sfogliare.
Dalla pagina man di unshare
,
mount namespace Il montaggio e lo smontaggio dei filesystem non influirà sul resto del sistema (flag CLONE_NEWNS), ad eccezione dei filesystem che sono esplicitamente contrassegnati come condivisi (con mount --make-shared; vedere / proc / self / mountinfo per i flag condivisi).
Si consiglia di utilizzare mount --make-rprivate o mount --make-rslave dopo l'annullamento della condivisione - mount per assicurarsi che i mountpoint nel nuovo spazio dei nomi siano realmente non condivisi dallo spazio dei genitori.
La memoria utilizzata per lo spazio dei nomi è VFS che proviene dal kernel. E - se lo configuriamo proprio in primo luogo - possiamo creare interi ambienti virtuali in cui siamo l'utente root senza i permessi di root.
Riferimenti:
L'esempio è inquadrato usando i dettagli di questo post sul blog . Inoltre, le citazioni di questa risposta sono tratte da questa meravigliosa spiegazione di Mike . Un'altra lettura meravigliosa su questo può essere trovata dalla risposta da qui .