Problema com namespaces de montagem sob o Fedora

5

Eu me deparei com um problema estranho em relação aos namespaces de montagem no Linux. Eu tenho dois sistemas, ambos executando o kernel 3.2.3-2 sob o Fedora 16. Eu estou tentando montar um sistema de arquivos tmpfs em um namespace filho criado usando o comando unshare :

unshare -m /bin/bash

Da página do manual:

   mount namespace
          mounting and unmounting filesystems will not affect rest of  the
          system (CLONE_NEWNS flag),

Em um sistema, isso funciona como esperado. Isto é, se eu começar com isso:

# ls /mnt
file1 file2 file3

Em seguida, monte um sistema de arquivos tmpfs sobre /mnt em um namespace filho:

# PS1="child# ' unshare -m /bin/bash
child# mount -t tmpfs tmpfs /mnt

O conteúdo de /mnt está mascarado no namespace filho:

child# ls /mnt
child#

Mas continue visível no pai:

# ls /mnt
file1 file2 file3

No segundo sistema, a mesma sequência exata de comandos resultará em uma montagem visível no namespace pai e no namespace filho. Em outras palavras, parece que o comando unshare não está realmente resultando em um namespace de montagem separado.

Não tenho conhecimento de diferenças substanciais entre os dois sistemas. Um está executando um ambiente de desktop, o outro não é. O SELinux está desativado em ambos os sistemas.

Estou procurando sugestões sobre o que poderia estar causando essa diferença de comportamento.

    
por larsks 06.02.2012 / 22:24

3 respostas

5

Verifique se o serviço do sandbox está em execução.

systemctl status sandbox.service

Se sim, desligue-o, reinicie e tente novamente. Isso funcionou para mim.

    
por 07.02.2012 / 22:50
3

@John recebeu a resposta, mas eu queria fornecer aqui alguma documentação adicional para refletir por que o comportamento dos dois sistemas era diferente.

O script sandbox ( /etc/rc.d/init.d/sandbox ) definiu recursivamente o sinalizador shared em todas as montagens no sistema executando:

mount --make-rshared /

Os comentários no script sandbox são:

description: sandbox, xguest and other apps that want to use pam_namespace require this script be run at boot. This service script does not actually run any service but sets up: / to be shared by any app that starts a separate namespace If you do not use sandbox, xguest or pam_namespace you can turn this service off.

Como as ferramentas aqui referenciadas são todas aplicações GUI, o script sandbox só está habilitado para o nível de execução 5. Dos dois sistemas que estou trabalhando, um é um desktop - portanto, ele inicia no nível de execução 5 e obtém o sandbox script por padrão - enquanto o outro é um servidor headless que inicializa no nível de execução 3.

    
por 08.02.2012 / 02:33
1

Eu tenho visto o mesmo problema. Tente um

mount --make-private /mnt 

antes do

mount -t tmpfs tmpfs /mnt

Veja também a fonte do comando seunshare para ver como eles o fazem.

    
por 07.02.2012 / 19:11