Em um ambiente Kubernetes, suponho que o usuário root não deva ter permissão por padrão para mitigar o risco caso o sistema operacional host seja acessado de dentro de um contêiner. Esta configuração deve ser feita escrevendo em PodSecurityPolicy.
Considerando isso, estou apenas me perguntando: por que podemos usar o usuário root para executar contêineres em serviços Kubernetes de nuvem pública, como EKS, AKE e GKE? Eles têm outra camada de medidas de segurança para evitar que os contêineres sejam comprometidos por invasores?
Responder1
Mesmo que haja a possibilidade de um processo em contêiner obter acesso ao sistema operacional host devido a uma vulnerabilidade não corrigida e, portanto, ter controle total sobre o sistema devido à sua execução como root, acredito que as nuvens públicas optam por não impor isso por padrão porque muitos pacotes de software bem conhecidos têm seusprocesso principal executado como root- por exemplo, o serviço nginx depende de um processo daemon principal em execução como root
, que por sua vez gera os processos de trabalho em execução como www-data
para melhor segurança.
Responder2
O usuário root tem permissão para executar qualquer ação em um sistema Linux, incluindo a execução de contêineres Docker. Não há como impedir que o usuário root execute contêineres docker. Em vez disso, o caminho a seguir é limitar o acesso ao usuário root e usar sudo para permitir que usuários não root executem certas ações no sistema.
No entanto, nesse caso, Docker
não importa muito porque:
O grupo docker concede privilégios equivalentes ao usuário root. Para obter detalhes sobre como isso afeta a segurança do seu sistema, consulteSuperfície de ataque do Docker Daemon.
gerenciar-docker-como-usuário não-root
Portanto, qualquer usuário Linux que tenha permissão para executar comandos do docker pode obter privilégios de root no sistema.
Os privilégios de root dentro de um contêiner não são um problema, pois o Docker é uma tecnologia de virtualização no nível do sistema operacional. O usuário root dentro do contêiner não tem acesso ao sistema operacional subjacente que executa o daemon do docker.