A execução unshare -mfornece 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 lscomando é,
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 helloe helloagainnã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 .