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
Dockerfileusando a instruçãoUSER.
# 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"]