Montar o conjunto de dados do ZFS em contêiner não privilegiado

2

Primeiro, um pouco de informação sobre minha configuração:

  • Ubuntu 15.10
  • Conjunto do ZFS criado
  • Contêineres LXC armazenados no pool / lxc
  • Conjunto de dados criado em pool/mydataset de propriedade de user1

Agora eu preciso de um dos contêineres para acessar os arquivos / pastas em pool/mydataset . Eu tentei o seguinte:

  • Criado um usuário user1 dentro do contêiner
  • Editado pool/lxc/mycontainer/config e adicionado:

    lxc.mount.entry = /pool/mydataset mnt/mydataset none rw,bind 0 0
    

Quando inicio o contêiner, o conjunto de dados é montado, mas ls -la /mnt/mydataset no contêiner mostra nobody:nogroup em vez de user1:user1 , o que significa que todos os arquivos são somente leitura.

Alguma ideia de como obter as permissões corretas no diretório montado?

    
por ghetto 16.02.2016 / 00:43

1 resposta

0

Eu experimentei o mesmo. O motivo, no meu caso, é que o sistema de arquivos a ser montado por bind é de propriedade de UID: GID no intervalo da máquina host .

Um contêiner não privilegiado, por definição, usa UIDs fora do intervalo normal e um namespace de usuário para dar a aparência de normalidade no contêiner.

Observe que tudo abaixo do init do contêiner pertence ao UID 1000000 numérico, conforme visto na máquina host. Dentro do container , o PID1 é a raiz do UID, como esperado.

O que isso significa? Se, na máquina host, você tiver um sistema de arquivos pertencente a um usuário normal (talvez root, talvez usuário regular) e, em seguida, vincule-o ao container, os UIDs (que são armazenados como inteiros) não fazem sentido dentro do contêiner .

Além disso, como os UIDs que o contêiner vê não pertencem ao seu namespace de usuário, nem mesmo o root dentro do contêiner pode chown desses arquivos .

Solução: Na máquina host, chown os arquivos para que eles pertençam à raiz dentro do contêiner. No meu caso, como na foto acima, eu tive que:

  • Montar tank/mydataset em /tank/mydataset na máquina host
  • chown 1000000:1000000 /tank/mydataset
  • (no arquivo de configuração do contêiner) lxc.mount.entry = /tank/mydataset path/in/container/ none bind 0 0
por 08.04.2018 / 17:55