Tutoriel Linux

Podman no Linux: iniciar um contêiner sem conceder permissões de root a toda a máquina

Débutant4 min de lecture

Você quer iniciar um serviço de teste, uma ferramenta web ou uma imagem Linux sem adicionar sua conta ao grupo docker. O Podman pode executar contêineres a partir de uma sessão de usuário, com armazenamento e processos vinculados ao seu UID. É prático para começar de forma limpa, mas isso não dispensa a necessidade de controlar a imagem, os volumes ou as portas publicadas.

Tux admin inicia um contêiner isolado perto de um servidor Linux com um cadeado e cubos de contêiner
Podman pode executar contêineres a partir de uma sessão de usuário Linux.

Instalar Podman e verificar o modo rootless

No Debian ou Ubuntu, instale o pacote a partir dos repositórios da sua distribuição. O Fedora também o inclui em seus repositórios padrão.

sudo apt update
sudo apt install podman
podman --version
podman info --debug

Em seguida, execute podman info --debug com sua conta habitual, sem sudo. A saída deve indicar um contexto rootless. O Podman utiliza então seu espaço de usuário e as faixas definidas em /etc/subuid e /etc/subgid para mapear os identificadores do contêiner.

Uma mensagem sobre newuidmap, subuid ou subgid indica uma preparação incompleta. Não contorne o erro mudando diretamente para root. Verifique primeiro sua entrada com o seguinte comando, e então aplique o método documentado pela sua distribuição caso esteja faltando.

grep "^$USER:" /etc/subuid /etc/subgid

Iniciar um primeiro contêiner sem privilégios

Comece com uma imagem minúscula e um comando que pare automaticamente. Dessa forma, você verifica o download da imagem, o armazenamento local e a execução sem deixar um serviço aberto na rede.

podman run --rm docker.io/library/alpine:latest echo "Podman funciona"

A opção --rm remove o contêiner ao ser finalizado. A imagem permanece em cache. Para ver as imagens e os contêineres, incluindo os que estão parados, use:

podman images
podman ps -a

Para um serviço que deve permanecer disponível, dê-lhe um nome explícito. Este exemplo inicia o nginx em segundo plano e publica a porta 8080 apenas na máquina local.

podman run -d --name web-test 
  -p 127.0.0.1:8080:80 
  docker.io/library/nginx:alpine

podman ps
curl -I http://127.0.0.1:8080

O prefixo 127.0.0.1: evita expor este teste em todas as interfaces de rede. Se você escrever apenas -p 8080:80, verifique o resultado com podman port web-test e com ss -ltnp. Em um servidor, abra uma porta pública apenas após escolher o firewall e o endereço de escuta.

Ler o estado, os logs e parar o serviço adequadamente

Um contêiner iniciado não prova que a aplicação está respondendo. Verifique seu estado, os últimos logs e seu mapeamento de rede antes de modificar a imagem ou a configuração.

podman inspect web-test --format '{{.State.Status}}'
podman logs --tail 50 web-test
podman port web-test
podman stop web-test
podman rm web-test

podman inspect exibe as configurações realmente aplicadas. É mais confiável do que reler um comando copiado do seu histórico. Também mantenha o nome da imagem e seu tag na sua documentação. Um tag latest pode apontar para uma versão diferente na próxima transmissão. Para um uso duradouro, escolha uma versão específica e planeje a sua atualização.

As limitações do rootless e as armadilhas a evitar

  • Um contêiner rootless limita o impacto no host, mas uma imagem não confiável, um segredo injetado como variável ou um volume gravável permanecem riscos.
  • Evite --privileged, --network host e montagens de diretórios sensíveis. Essas opções reduzem fortemente a isolamento.
  • Monte os dados como leitura somente quando a aplicação não precisa modificá-los, por exemplo -v "$HOME/site:/usr/share/nginx/html:ro".
  • As portas inferiores a 1024, certos dispositivos e algumas restrições de rede exigem configuração adicional. Não adicione privilégios por reflexo.
  • O Podman aceita grande parte da sintaxe do Docker, mas os serviços, redes e armazenamento não se comportam sempre da mesma maneira. Teste um projeto em uma pasta isolada antes de uma migração.

O grupo docker frequentemente dá acesso muito amplo ao daemon do Docker. O Podman rootless evita este hábito para os contêineres iniciados de sua conta. Para comparar a instalação de um motor Docker com esta escolha de direitos, você também pode reler nosso guia sobre Docker no Debian.

A documentação oficial do Podman detalha o funcionamento rootless, e o manual de podman run lista as opções de rede, volumes e identificadores. Comece com uma imagem simples, uma porta local e um volume como leitura somente. Você saberá rapidamente se o Podman é adequado para o seu uso antes de mover um serviço útil.

sudo apt update && sudo apt upgrade