Carregando...
Sem categoria

Usando Podman, uma forma mais segura de rodar conteiners

O podman é o concorrente do docker para gestão de ambientes em conteiners. O seu grande diferencial está na segurança porque com ele é possível iniciar conteineres sem permissões de superusuário (rootless).

Caso você ainda não sabia o Docker executa todos os conteiners a partir de um processo de nível root (root daemon), ou seja, com alto nível de permissão de acesso. O Podman em contrapartida é daemonless, ele dá ao systemd a responsabilidade de gerenciar o início ou não das aplicações e permite que conteiners sejam executados com usuários de baixa permissão (usuários não-root, rootless).

O que isso significa na prática?

Se um conteiner rodando em Docker tiver alguma vulnerabilidade de segurança e for invadido por alguém mal intencionado, ele poderá ter acesso root ao sistema hospedeiro, ou seja, tomar totalmente o controle da máquina e de todos os conteiners, não apenas o vulnerável.

Rodando conteiners rootless com podman

# Instale o podman
sudo apt install podman

# Verifique se o libpam-systemd está instalado, para permitir o user lingering (systemd a nivel de usuário) functionar via ssh
sudo apt install libpam-systemd

# Carregar a variável de ambiente correta após o login de cada usuário
sudo sh -c "echo 'export XDG_RUNTIME_DIR=/run/user/\$UID' >> /etc/skel/.profile"

# Criar o diretório (pasta) ~/.config/systemd/user/ para cada novo usuário
sudo sh -c "echo 'mkdir -p ~/.config/systemd/user/' >> /etc/skel/.profile"

# Crie um usuário não superusuário para rodar o conteiner
sudo useradd -m -s /bin/bash usuario-conteiner

# Habilite o user lingering para o usuário
sudo loginctl enable-linger usuario-conteiner

# Entre com o usuário
sudo su - usuario-conteiner

# Crie um conteiner do nginx
# Expõe porta 80 do conteiner nginx para a porta 8080 do sistema hospedeiro
podman run -d --restart unless-stopped -p 8080:80 --name my-nginx docker.io/library/nginx

# Teste a porta 8080 
curl localhost:8080

# Crie o arquivo systemd
podman generate systemd my-nginx > ~/.config/systemd/user/container-my-nginx.service

# Habilitando o serviço automaticamente após reboot
systemctl --user enable container-my-nginx.service

# Parando o conteiner
systemctl --user stop container-my-nginx.service

# Iniciando o conteiner
systemctl --user start container-my-nginx.service

# Verificando logs do conteiner usando systemd
systemctl --user status container-my-nginx.service

# Verificando logs do conteiner usando journalctl em tempo real
journalctl --user -f -u container-my-nginx

# Verificando logs do conteiner usando podman 
podman logs my-nginx

# Verificando logs do conteiner em tempo real usando podman
podman logs -f my-nginx

Referências

Gerando systemd para o podman rootless
https://github.com/containers/podman/blob/main/docs/source/markdown/podman-generate-systemd.1.md

Tutorial do systemd
Usando o systemd no Linux – Como criar seus próprios serviços e daemons no Linux?

Deixe um comentário

O seu endereço de e-mail não será publicado.