Há um bom artigo na documentação do Docker sobre segurança com o Docker: https://docs.docker.com/articles/security/
No entanto, não está muito claro para mim como os processos com privilégios de root no contêiner realmente são executados no sistema host e como devo configurar o SELinux para lidar com o risco de "vazamento" do processo fora do contêiner.
Por exemplo, estou executando o nginx em um contêiner e, quando faço "ps" fora do contêiner, posso ver todos os processos do nginx.
root 7281 4078 0 01:36 ? 00:00:00 nginx: master process nginxwww-data 7309 7281 0 01:36 ? 00:00:00 nginx: worker processwww-data 7310 7281 0 01:36 ? 00:00:00 nginx: worker processwww-data 7311 7281 0 01:36 ? 00:00:00 nginx: worker processwww-data 7312 7281 0 01:36 ? 00:00:00 nginx: worker process
Isso não é uma surpresa, pois é assim que o Docker funciona - não é virtualização onde nada aparece fora de uma VM. Com o Docker, os processos de um contêiner são executados no sistema operacional host em namespaces e privilégios limitados. Eles estão falando diretamente com o kernel do host.
Nesta situação, acredito que devo configurar o SELinux para proteger o processo nginx em vez do docker, como se estivesse em execução sem o docker. Está correcto?
Além disso, existe alguma configuração específica do Docker mais apropriada para executar servidores da Web como o nginx ?