A execução unshare -m
fornece ao processo de chamada uma cópia privada de seu namespace de montagem e também remove o compartilhamento de atributos do sistema de arquivos, para que ele não compartilhe mais seus atributos de diretório raiz, diretório atual ou umask com qualquer outro processo.
Então, o que diz o parágrafo acima? Vamos tentar entender usando um exemplo simples.
Terminal 1:
Eu faço os comandos abaixo no primeiro 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
O último comando me dá a saída como,
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
Agora, eu fiz os seguintes comandos também.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
A saída do ls
comando é,
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
Então, qual é o grande problema em fazer tudo isso? Por que eu deveria fazer isso?
Abro outro terminal agora ( terminal 2 ) e faço os comandos abaixo.
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
A saída é a seguinte.
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
Os arquivos hello
e helloagain
não estão visíveis e eu até fiz login como root para verificar esses arquivos. Portanto, a vantagem é que esse recurso nos permite criar um sistema de arquivos temporário privado que mesmo outros processos de propriedade raiz não podem ver ou navegar.
Na página de manual de unshare
,
espaço para nome mount Os sistemas de arquivos de montagem e desmontagem não afetarão o resto do sistema (sinalizador CLONE_NEWNS), exceto os sistemas de arquivos explicitamente marcados como compartilhados (com mount --make-shared; consulte / proc / self / mountinfo para os sinalizadores compartilhados).
É recomendável usar mount --make-rprivate ou mount --make-rslave após o compartilhamento - para garantir que os pontos de montagem no novo espaço para nome não sejam realmente compartilhados no espaço para nome dos pais.
A memória que está sendo utilizada para o namespace é o VFS, que é do kernel. E - se o configurarmos em primeiro lugar - podemos criar ambientes virtuais inteiros nos quais somos o usuário root sem permissões de root.
Referências:
O exemplo é estruturado usando os detalhes desta postagem do blog . Além disso, as citações desta resposta são desta maravilhosa explicação de Mike . Outra leitura maravilhosa sobre isso pode ser encontrada na resposta aqui .