Compartilhar o diretório do host entre vários contêineres versus o SELinux

5

Compartilhar um diretório de host com um contêiner docker geralmente é fácil:

$ docker create -v /path/to/hostdir:/path/inside/container --name conta ...

As coisas ficam mais complicadas, se o SELinux estiver envolvido - por exemplo, um SELinux impondo o contêiner Fedora 23 em um host docker de execução do SELinux (também Fedora 23).

Nesse caso, aparentemente, é preciso instruir o estivador para fazer uma nova marcação:

$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ...

Sem o sufixo :Z , você obtém permissão para negar erros ao tentar ler / gravar arquivos no diretório do host compartilhado. Com :Z , tudo funciona conforme o esperado.

Mas a abordagem :Z falha se o diretório do host deve ser compartilhado com contêineres múltiplos (reforços do SELinux) ao mesmo tempo:

$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ...
$ docker create -v /path/to/hostdir:/path/inside/container:Z --name contb ...

Após o segundo comando, 'contb' pode acessar o diretório do host, mas 'conta' não pode mais acessá-lo (permissão negada erros).

Parece que a segunda reclassificação pela janela de encaixe invalida a primeira.

Como corrigir isso em um sistema SELinux?

    
por maxschlepzig 19.03.2016 / 22:43

1 resposta

3

Não tenho certeza se isso ajudará, já que não estou jogando com o docker agora, mas estou muito perto dessas tecnologias.

Existe artigo legal de Dan Walsh descrevendo a diferença entre :Z e :z nos comandos docker .

TL; DR, o primeiro ( :Z ) está usando rótulos Multi-Category Security (MCS), que farão os mesmos rótulos com diferentes categorias distintas para contêineres diferentes.

O segundo ( :z ) rotulará o diretório com os mesmos rótulos para cada contêiner e eles poderão acessar o caminho simultaneamente.

Se isso não ajudar, forneça os AVCs que você está recebendo da janela de encaixe. Caso contrário, é como adivinhar.

    
por 20.03.2016 / 10:31