¿Solo lectura bind-mount?

9

Utilizo mount -o bind para montar directorios dentro de chroots, lo que funciona muy bien. El problema es que me gustaría que algunos de estos directorios montados en enlace se lean solo en chroot.

¿Es posible? Si no, ¿alguna otra forma de lograrlo?

Estaba pensando en usar NFS para montajes de host local, pero parece excesivo.


fuente

Respuestas:

6

Según este artículo es posible. Necesitas un kernel reciente.

mount --bind -o ro /vital_data /untrusted_container/vital_data
Zoredache
fuente
16

Respuesta directa del artículo de LWN :

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

Soportado desde Linux 2.6.26.

azulado
fuente
4

En Squeeze solía funcionar solo con:

mount --bind /src /dst

entonces

mount -o remount,ro /dst

Ahora en Debian Wheezy tienes que hacer:

mount -o remount,ro,bind /dst

para deshacerse del mensaje: recurso ocupado.

Editar: ahora en Debian Jessie, mount intenta ser inteligente y monta subdirectorios, que si ya se montan con bind, se vuelven recursivos y suceden cosas malas :)

Hay una opción especial que obliga a util-linux a ser 'estúpido' nuevamente. Soluciones es esta:

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

Luego puede montar --bind $ prefix / sbin a otro directorio.

Desde la página del manual:

Las operaciones de subárbol compartidas. Desde Linux 2.6.15 es posible marcar un montaje y sus submontes como compartidos, privados, esclavos o no vinculables. Una montura compartida proporciona la capacidad de crear espejos de esa montura de modo que los montajes y desmontamientos dentro de cualquiera de los espejos se propaguen al otro espejo. Una montura esclava recibe propagación de su maestro, pero no al revés. Una montura privada no tiene habilidades de propagación. Un montaje no enlazable es un montaje privado que no se puede clonar mediante una operación de enlace. La semántica detallada se documenta en el archivo Documentation / filesystems / sharedsubtree.txt en el árbol de fuentes del núcleo. Las operaciones admitidas son:

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

Los siguientes comandos le permiten a uno cambiar recursivamente el tipo de todos los montajes bajo un punto de montaje dado.

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

mount (8) no lee fstab (5) cuando se solicita una operación --make- *. Toda la información necesaria debe especificarse en la línea de comando. Tenga en cuenta que el kernel de Linux no permite cambiar varios indicadores de propagación con una sola llamada al sistema mount (2), y los indicadores no se pueden mezclar con otras opciones de montaje.

Desde util-linux 2.23, el comando mount permite usar varios indicadores de propagación juntos y también junto con otras operaciones de montaje. Esta característica es EXPERIMENTAL. Los indicadores de propagación se aplican mediante llamadas al sistema de montaje adicionales (2) cuando las operaciones de montaje anteriores tuvieron éxito. Tenga en cuenta que este caso de uso no es atómico. Es posible especificar los indicadores de propagación en fstab (5) como opciones de montaje (privado, esclavo, compartido, no vinculable, privado, rslave, rshared, runbindable).

Anton Valqk
fuente
2

mount --bind / vital_data / untrusted_container / vital_data

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

en el segundo montaje, debe usar "remontar, ro, enlazar"; de lo contrario, todas las demás instancias de / vital_data también serán de solo lectura.

rexo
fuente
No, no lo hace (al menos no en Linux 3.19). ¿Dónde experimentó la necesidad de agregar la bindopción?
Karl Richter
1
@KarlRichter: no lo he probado, pero man 2 mountindica que bindes necesario: "Desde Linux 2.6.26, el MS_REMOUNTindicador se puede usar MS_BINDpara modificar solo los indicadores por punto de montaje. Esto es particularmente útil para configurar o borrar la" lectura -solo "marca en un punto de montaje sin cambiar el sistema de archivos subyacente. Especificando flags de montaje como: MS_REMOUNT | MS_BIND | MS_RDONLYhará que el acceso a través de este punto de montaje sea de solo lectura, sin afectar a otros puntos de montaje". (Desde Ubuntu 19.10, man-pagesversión de Linux 5.0.2, con fecha 2019-08-02.)
mpb
1
@KarlRichter - Actualización: De acuerdo con unix.stackexchange.com/a/128388 , las versiones más nuevas de libmountllamar a la mount()función dos veces durante una sola invocación del /usr/bin/mountprograma. Por lo tanto, es la versión de libmount, en lugar de la versión del núcleo, la que determinará si /usr/bin/mountse necesitan o no dos invocaciones .
mpb