GNU/Linux >> Tutoriales Linux >  >> Linux

por proceso puntos de montaje del sistema de archivos privado

Ejecutando unshare -m proporciona al proceso de llamada una copia privada de su espacio de nombres de montaje y también deja de compartir los atributos del sistema de archivos para que ya no comparta su directorio raíz, directorio actual o atributos umask con ningún otro proceso.

Entonces, ¿qué dice el párrafo anterior? Tratemos de entender usando un ejemplo simple.

Terminal 1:

Hago los siguientes comandos en la primera terminal.

#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 

El último comando me da la salida como,

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

Ahora, también hice los siguientes comandos.

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

La salida del ls el comando es,

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

Entonces, ¿cuál es el problema de hacer todo esto? ¿Por qué debería hacerlo?

Abro otra terminal ahora (terminal 2 ) y haz los siguientes comandos.

cd /tmp/tmp.7KtrAsd9lx
ls - lFa

La salida es la siguiente.

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

Los archivos hello y helloagain no están visibles e incluso inicié sesión como root para verificar estos archivos. Entonces, la ventaja es que esta función nos permite crear un sistema de archivos temporal privado que incluso otros procesos de propiedad raíz no pueden ver o explorar.

Desde la página man de unshare ,

montar espacio de nombres Montar y desmontar sistemas de archivos no afectará al resto del sistema (indicador CLONE_NEWNS), a excepción de los sistemas de archivos que están explícitamente marcados como compartidos (con mount--make-shared; consulte /proc/self/mountinfo para conocer los indicadores compartidos).

Se recomienda usar mount --make-rprivate o mount --make-rslaveafter unshare--mount para asegurarse de que los puntos de montaje en el nuevo espacio de nombres realmente no se compartan con el espacio de nombres principal.

La memoria que se utiliza para el espacio de nombres es VFS, que es del núcleo. Y, si lo configuramos correctamente en primer lugar, podemos crear entornos virtuales completos en los que somos el usuario raíz sin permisos de raíz.

Referencias:

El ejemplo se enmarca con los detalles de esta publicación de blog. Además, las citas de esta respuesta son de esta maravillosa explicación de Mike. Otra lectura maravillosa sobre esto se puede encontrar en la respuesta de aquí.


Si tiene Bubblewrap instalado en su sistema, puede hacerlo fácilmente en un solo paso:

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

En el ejemplo anterior, bash interno tendrá su propia vista en /tmp.

Solución inspirada en la respuesta de @Ramesh-s - ¡gracias por ella!


Linux
  1. Cómo crear y montar el sistema de archivos Btrfs (explicado con ejemplos)

  2. Cómo crear y montar sistemas de archivos en Linux

  3. Cómo montar y desmontar un sistema de archivos en Linux

  4. ¿Cómo monto manualmente un sistema de archivos de Linux de lectura/escritura como un usuario normal?

  5. forma más rápida de montar un sistema de archivos remoto que sshfs?

Dbxfs:monte la carpeta de Dropbox localmente como sistema de archivos virtual en Linux

Cómo montar Google Drive localmente como sistema de archivos virtual en Linux

Cómo montar un sistema de archivos Linux remoto usando SSHFS

Cómo montar y ver un archivo ISO como raíz y usuario normal en Linux

¿Por qué mi sistema de archivos está montado como de solo lectura?

¿Se garantiza que dos subdirectorios con la misma raíz estén en el mismo sistema de archivos montado?