Montagens de volume do Podman: quando usar o sufixo :z ou :Z?

Montagens de volume do Podman: quando usar o sufixo :z ou :Z?

As páginas de manual do Podmanexplica para montagens/ligações de volume:

Sistemas de rotulagem como o SELinux exigem que rótulos adequados sejam colocados no conteúdo do volume montado em um contêiner. Sem um rótulo, o sistema de segurança pode impedir que os processos em execução dentro do contêiner utilizem o conteúdo. Por padrão, o Podman não altera os rótulos definidos pelo sistema operacional.

Para alterar um rótulo no contexto do contêiner, você pode adicionar um dos dois sufixos :zou:Zpara a montagem do volume. Esses sufixos dizem ao Podman para renomear objetos de arquivo nos volumes compartilhados. Ozopção informa ao Podman que dois contêineres compartilham o conteúdo do volume. Como resultado, Podman rotula o conteúdo com um rótulo de conteúdo compartilhado. Os rótulos de volume compartilhado permitem que todos os contêineres leiam/gravem conteúdo. OZopção diz ao Podman para rotular o conteúdo com um rótulo privado não compartilhado.

Opágina de solução de problemasexplica a mesma coisa com quase as mesmas palavras, no entanto.

Agora, sendo bastante novo no Podman e no SELinux, me pergunto: o que realmente devo usar e quando? Eu sei que quando recebo erros de permissão, eles podem ser devidos ao SELinux, então uma das duas opções pode corrigir isso. Mas quais são as diferenças entre essas duas opções (z minúsculo e Z maiúsculo)?

A diferença que diz é:

  • :zcria um rótulo de conteúdo compartilhado
  • :Zcria um rótulo privado não compartilhado

Isso introduz muitas palavras novas:

  • compartilhado e não compartilhado (o que isso significa?)
  • ??? vs privado (novamente, não está claro o que isso deveria dizer para mim)
  • também diz “rótulo de conteúdo” para uma opção, enquanto a outra diz apenas “rótulo” – há uma diferença entre esses dois termos ou são a mesma coisa?

Então, o que essas palavras significam neste contexto? E a pergunta final: Quando devo usar o quê?

Responder1

“Compartilhado” significa que vários contêineres podem compartilhar o volume; “não compartilhado” diz que eles não podem. Com um pouco mais de detalhes, :zrotule o volume dentro de cada contêiner com o rótulo apropriado ( container_file_t), e qualquer volume pode ser montado dentro de vários contêineres em paralelo, e todos os contêineres em execução com a montagem de volume terão acesso a ele. Qualquer alteração feita pelo host ou por qualquer contêiner em execução ficará visível para todos os contêineres em execução.

“Privado” significa que, além disso, o rótulo utilizado dentro do recipiente será privado desse recipiente. Não há camadas adicionais no nível do sistema de arquivos, então isso significa efetivamente que o conteúdo é rotulado de forma privada, mesmo da perspectiva do host. Contêineres com a mesma montagem não podem compartilhar seu acesso a ela — pelo menos com o Podman, o último contêiner vence e é o único contêiner com acesso ao volume. O oposto de “privado” aqui seria “compartilhado” em minha mente, o que explicaria por que não há termo oposto na documentação (“rótulo compartilhado compartilhado”).

Não tenho certeza se há algum significado em “rótulo de conteúdo” versus “rótulo”, a menos que seja uma alusão ao fato de que qualquer conteúdo criado em tais contêineres será rotulado de acordo, inclusive no host, então você verá arquivos com o container_file_trótulo.

Vereste post demonstrando a diferença com mais detalhes no Podman.Docker tem a mesma distinção.

Responder2

"Eu não me importo com segurança profunda, apenas faça funcionar": minúsculasz

Ambiente produtivo: Considere o capital Z, mas esteja ciente de que apenas o último contêiner com esse volume anexado poderá acessá-lo.

A propósito: esta é uma lista separada por vírgulas, então se você quiser combiná-la, por exemplo, com roela se torna :ro,z.

informação relacionada