Sobes.tech
Middle

Por que executar um contêiner como usuário root no Kubernetes é considerado uma má prática?

sobes.tech IA

Resposta da IA

Iniciar contêineres como utilizador root no Kubernetes apresenta riscos de segurança elevados:

  • Nível elevado de privilégios: Em caso de comprometimento do contêiner, o atacante obtém privilégios de root dentro do contêiner. Isto pode permitir escalar privilégios no sistema host ou aceder a outros recursos do cluster.
  • Acesso ao sistema de ficheiros do host: Sem restrições adequadas, o processo root dentro do contêiner pode aceder ao sistema de ficheiros do nó onde está a ser executado, aumentando a probabilidade de alterações não autorizadas ou fuga de dados.
  • Vulnerabilidades do núcleo: O utilizador root no contêiner pode explorar vulnerabilidades do núcleo Linux para sair do contêiner e assumir o controlo do host.
  • Dificuldade na auditoria: Rastrear as ações do utilizador root é mais difícil, o que complica a deteção e investigação de incidentes de segurança.
  • Herança de privilégios: Se outros processos forem iniciados a partir do utilizador root, também terão um nível elevado de privilégios.

Recomenda-se seguir o princípio de privilégios mínimos, executando os contêineres com um utilizador não privilegiado. Isto pode ser configurado no manifesto do pod usando securityContext:

securityContext:
  runAsUser: 1000  # Utilização de um utilizador não privilegiado com ID 1000
  runAsGroup: 3000 # Pertença a um grupo com ID 3000 (opcional)
  allowPrivilegeEscalation: false # Proibir a escalada de privilégios
readOnlyRootFilesystem: true # Proibir escrita no sistema de ficheiros raiz do contêiner

Além disso, pode-se usar:

  • Políticas de Segurança de Pod / Pod Security Admission: Para aplicar políticas de segurança ao nível do pod.
  • AppArmor / SELinux: Para uma maior isolamento dos contêineres.
  • Utilização de imagens de contêiner com um utilizador não privilegiado explicitamente especificado: No Dockerfile usando a instrução USER.
# Exemplo de Dockerfile especificando um utilizador
FROM ubuntu:latest
# Criar um utilizador não privilegiado
RUN useradd -ms /bin/bash myuser
# Alternar para esse utilizador
USER myuser
CMD ["/bin/bash"]