per processo punti di montaggio del file system privato


24

Stavo controllando il unsharecomando e secondo la sua pagina man,

   unshare - run program with some namespaces unshared from parent

Vedo anche che esiste un tipo di spazio dei nomi elencato come,

 mount namespace
              mounting and unmounting filesystems will not affect rest of the system.

Qual è esattamente lo scopo di questo spazio dei nomi mount ? Sto cercando di capire questo concetto con l'aiuto di alcuni esempi.



@Gilles, grazie. Controllerò. Nel frattempo, per favore fatemi sapere se è necessario aggiungere qualcos'altro nella risposta.
Ramesh,

Risposte:


29

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 lscomando è,

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 helloe le helloagainnon 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 .


1
this feature makes it possible for us to create a private temporary filesystem that even other root-owned processes cannot see or browse through.E rispetto a chroot, con i chrootfile sono visibili agli altri. Questo è sorprendente, e quella frase probabilmente dovrebbe essere come in cima alla risposta. + 1ED.
Sergiy Kolodyazhnyy,

1
Nulla sfugge alla radice! Usando nsenterpuoi inserire lo spazio dei nomi e visualizzare i file temporanei. Supponendo che solo un unshare (quello che possiede il tempdir), sudo nsenter -t $(pgrep -P $(ps aux | grep unshare | grep -v grep | awk '{print $2}')) -m -pconsentirà quindi di visualizzare i contenuti
earcam

2

Se sul tuo sistema è installato bubblewrap , puoi farlo facilmente in un solo passaggio:

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

Nell'esempio sopra, bash interno avrà una propria vista su / tmp.

Soluzione ispirata dalla risposta di @Ramesh-s - grazie per questo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.