Red Hat Training

A Red Hat training course is available for RHEL 8

1.4.3. Considerações especiais para os sem raiz

Aqui estão algumas coisas a serem consideradas ao rodar containers como um usuário não-root:

  • Como usuário de contêineres não-rootados, as imagens dos contêineres são armazenadas sob seu diretório pessoal ($HOME/.local/share/containers/storage/), ao invés de /var/lib/containers.
  • Os usuários que rodam containers sem raiz recebem permissão especial para rodar como uma gama de IDs de usuário e grupo no sistema hospedeiro. No entanto, eles não têm privilégios de root para o sistema operacional no host.
  • Se você precisar configurar seu ambiente de recipientes sem raiz, edite os arquivos de configuração em seu diretório pessoal ($HOME/.config/containers). Os arquivos de configuração incluem storage.conf (para configuração de armazenamento) e libpod.conf (para uma variedade de configurações de contêineres). Você também pode criar um arquivo registries.conf para identificar registros de contêineres disponíveis quando você usa podman para puxar, pesquisar ou executar imagens.
  • Um contêiner que funciona como raiz em uma conta sem raiz pode se basear em características privilegiadas dentro de seu próprio espaço de nome. Mas isso não proporciona nenhum privilégio especial para acessar recursos protegidos no host (além de ter UIDs e GIDs extras). Aqui estão exemplos de ações de contêineres que você pode esperar que funcionem a partir de uma conta sem raiz que não funcionará:

    • Qualquer coisa que você queira acessar a partir de um diretório montado a partir do host deve ser acessível pelo UID que executa seu contêiner ou seu pedido de acesso a esse componente falhará.
    • Há algumas características do sistema que você não será capaz de mudar sem privilégio. Por exemplo, você não pode mudar o relógio do sistema simplesmente ajustando uma capacidade SYS_TIME dentro de um container e executando o serviço de tempo de rede (ntpd). Você teria que executar esse contêiner como raiz, contornando seu ambiente de contêiner sem raiz e usando o ambiente do usuário raiz, para que essa capacidade funcione, como por exemplo:

      $ sudo podman run -d --cap-add SYS_TIME ntpd

      Observe que este exemplo permite que o ntpd ajuste o tempo para todo o sistema, e não apenas dentro do container.

  • Um contêiner sem raiz não tem capacidade de acesso a um porto inferior a 1024. Dentro do namespace do contêiner sem raiz ele pode, por exemplo, iniciar um serviço que expõe a porta 80 a partir de um serviço httpd do contêiner, mas não será acessível fora do namespace:

    $ podman run -d httpd

    Entretanto, um contêiner precisaria do privilégio de raiz, novamente usando o ambiente de contêineres do usuário raiz, para expor esse porto ao sistema hospedeiro:

    $ sudo podman run -d -p 80:80 httpd
  • O administrador de uma estação de trabalho pode configurá-la para que os usuários possam expor serviços abaixo de 1024, mas eles devem entender as implicações de segurança. Um usuário regular poderia, por exemplo, executar um servidor web na porta oficial 80 e enganar usuários externos para que acreditassem que ele foi configurado pelo administrador. Isto é geralmente OK em uma estação de trabalho, mas pode não estar em um servidor de desenvolvimento acessível à rede, e definitivamente não deve ser feito em servidores de produção. Para permitir que os usuários se liguem às portas até a porta 80, execute o seguinte comando:

    # echo 80 > /proc/sys/net/ipv4/ip_unprivileged_port_start
  • Atualmente, os recipientes sem raiz dependem da definição de subuídeas estáticas e faixas subgidas. Se você estiver usando LDAP ou Active Directory para fornecer autenticação de usuário, não há maneira automatizada de fornecer essas faixas de UID e GID aos usuários. Uma alternativa atual poderia ser definir intervalos estáticos em arquivos /etc/subuid e /etc/subgid para corresponder aos UIDs e GIDs conhecidos em uso.
  • O armazenamento de contêineres deve estar em um sistema de arquivo local, porque os sistemas de arquivo remoto não funcionam bem com espaços de nomes de usuários não privilegiados.
  • Uma lista contínua de deficiências de rodar podman e ferramentas relacionadas sem privilégios de raiz está contida em Shortcomings of Rootless Podman.