La ejecución unshare -m
le da al proceso de llamada una copia privada de su espacio de nombres de montaje, y también comparte los atributos del sistema de archivos para que ya no comparta su directorio raíz, el directorio actual o los atributos de umask con ningún otro proceso.
Entonces, ¿qué dice el párrafo anterior? Probemos y comprendamos con 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, hice los siguientes comandos también.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
La salida del ls
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 gran problema al hacer todo esto? ¿Por qué debería hacerlo?
Abro otra terminal ahora ( terminal 2 ) y hago los siguientes comandos.
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
El resultado es el 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 son visibles e incluso inicié sesión como root para verificar estos archivos. Entonces, la ventaja es que esta característica nos permite crear un sistema de archivos temporal privado que incluso otros procesos propiedad de root no pueden ver ni navegar.
Desde la página de manual de unshare
,
montar el espacio de nombres El montaje y desmontaje de los sistemas de archivos no afectará al resto del sistema (indicador CLONE_NEWNS), excepto para los sistemas de archivos que están explícitamente marcados como compartidos (con mount --make-shared; consulte / proc / self / mountinfo para los indicadores compartidos).
Se recomienda usar mount --make-rprivate o mount --make-rslave después de unshare --mount para asegurarse de que los puntos de montaje en el nuevo espacio de nombres realmente no se compartan desde el espacio de nombres parental.
La memoria que se utiliza para el espacio de nombres es VFS, que proviene del núcleo. Y, si lo configuramos en primer lugar, podemos crear entornos virtuales completos en los que somos el usuario root sin permisos de root.
Referencias
El ejemplo se enmarca utilizando 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í .