Leggi solo bind-mount?


9

Uso mount -o bind per montare le directory all'interno dei chroot, il che funziona davvero bene. Il problema è che vorrei che alcune di queste directory montate su bind venissero lette solo in chroot.

È possibile? In caso contrario, un altro modo per raggiungerlo?

Stavo pensando di utilizzare NFS per i montaggi localhost, ma sembra eccessivo.

Risposte:


6

Secondo questo articolo è possibile. Hai bisogno di un kernel recente.

mount --bind -o ro /vital_data /untrusted_container/vital_data

16

Risposta diretta dall'articolo LWN :

mount --bind /vital_writable_data /untrusted_container/vital_data
mount -o bind,remount,ro /untrusted_container/vital_data

Supportato da Linux 2.6.26.


4

In Squeeze funzionava solo con:

mount --bind /src /dst

poi

mount -o remount,ro /dst

Ora in Debian Wheezy devi fare:

mount -o remount,ro,bind /dst

per sbarazzarsi del messaggio: risorse occupate.

Modifica: Ora in Debian Jessie, mount cerca di essere intelligente e monta sub-dirs, che se già montato con bind, diventa ricorsivo e succedono cose brutte :)

C'è un'opzione speciale che forza util-linux a essere di nuovo 'stupido'. Le soluzioni sono queste:

mount --bind --make-rprivate /sbin/ $prefix/sbin/
mount -o remount,ro,bind $prefix/sbin/

Successivamente puoi montare --bind $ prefix / sbin in un'altra directory.

Dalla pagina man:

Le operazioni di sottostruttura condivise. Da Linux 2.6.15 è possibile contrassegnare un mount e i suoi submount come condivisi, privati, slave o non risolvibili. Un mount condiviso offre la possibilità di creare mirror di quel mount in modo tale che i mount e gli smontaggi all'interno di uno qualsiasi dei mirror si propagino all'altro mirror. Un mount slave riceve la propagazione dal suo master, ma non viceversa. Una cavalcatura privata non ha abilità di propagazione. Un mount non associabile è un mount privato che non può essere clonato tramite un'operazione di bind. La semantica dettagliata è documentata nel file Documentation / filesystems / sharedsubtree.txt nell'albero dei sorgenti del kernel. Le operazioni supportate sono:

     mount --make-shared mountpoint
     mount --make-slave mountpoint
     mount --make-private mountpoint
     mount --make-unbindable mountpoint

I seguenti comandi consentono di modificare in modo ricorsivo il tipo di tutti i mount in un dato mountpoint.

     mount --make-rshared mountpoint
     mount --make-rslave mountpoint
     mount --make-rprivate mountpoint
     mount --make-runbindable mountpoint

mount (8) non legge fstab (5) quando viene richiesta un'operazione --make- *. Tutte le informazioni necessarie devono essere specificate sulla riga di comando. Si noti che il kernel Linux non consente di modificare più flag di propagazione con un singolo syscall mount (2) e che i flag non possono essere mescolati con altre opzioni di mount.

Da util-linux 2.23 il comando mount consente di usare diversi flag di propagazione insieme e anche insieme ad altre operazioni di mount. Questa funzione è SPERIMENTALE. I flag di propagazione vengono applicati da ulteriori syscalls mount (2) quando le operazioni di mount precedenti hanno avuto esito positivo. Si noti che questo caso d'uso non è atomico. È possibile specificare i flag di propagazione in fstab (5) come opzioni di mount (private, slave, shared, unbindable, rprivate, rslave, rshared, runbindable).


2

mount --bind / vital_data / untrusted_container / vital_data

mount -o remount, ro, bind / untrusted_container / vital_data

nel secondo mount devi usare "remount, ro, bind" altrimenti anche tutte le altre istanze di / vital_data saranno di sola lettura.


No, non lo fai (almeno non su Linux 3.19). Dove hai provato la necessità di aggiungere l' bindopzione?
Karl Richter,

1
@KarlRichter - Non l'ho testato, ma man 2 mountindica che bindè necessario: "A partire da Linux 2.6.26, il MS_REMOUNTflag può essere usato MS_BINDper modificare solo i flag per punto di mount. Ciò è particolarmente utile per impostare o cancellare la" lettura -solo "flag su un mount point senza cambiare il filesystem sottostante. Specificando mountflags come: MS_REMOUNT | MS_BIND | MS_RDONLYaccederà a questo mountpoint in sola lettura, senza influenzare altri mount point." (Da Ubuntu 19.10, Linux man-pagesversione 5.0.2, datata 2019/08/02.)
MPB

1
@KarlRichter - Aggiornamento: secondo unix.stackexchange.com/a/128388 , le versioni più recenti di libmountrichiamano la mount()funzione due volte durante una singola chiamata del /usr/bin/mountprogramma. Quindi è la versione libmount, piuttosto che la versione del kernel, che determinerà se /usr/bin/mountsono necessarie o meno due invocazioni .
mpb,
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.