Como devo configurar o SELinux ao executar o nginx dentro do Docker?

7

Há um bom artigo na documentação do Docker sobre segurança com o Docker: link

No entanto, não está muito claro para mim como os processos com privilégios de root no container são realmente executados no sistema host, e como eu devo configurar o SELinux para lidar com o risco do processo "vazar" fora do container.

Por exemplo, estou executando o nginx em um contêiner e, quando faço "ps" fora do contêiner, consigo ver todos os processos nginx.

root      7281  4078  0 01:36 ?        00:00:00 nginx: master process nginx
www-data  7309  7281  0 01:36 ?        00:00:00 nginx: worker process
www-data  7310  7281  0 01:36 ?        00:00:00 nginx: worker process
www-data  7311  7281  0 01:36 ?        00:00:00 nginx: worker process
www-data  7312  7281  0 01:36 ?        00:00:00 nginx: worker process

Isso não é uma surpresa, já que é 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 rodando sem o docker. Isso está correto?

Além disso, existe alguma configuração específica do Docker mais apropriada para executar servidores web como o nginx?

    
por vcarel 01.10.2014 / 09:31

1 resposta

8

Assumindo, é claro, que você está usando um Docker habilitado para o SELinux (RHEL / CentOS 7 e Fedora), então você não deveria precisar fazer nada além de certificar-se de que o SELinux esteja ativado e impondo na máquina host.

The containers created with Docker or virsh are automatically assigned with an SELinux context specified in the SELinux policy.

Você pode querer verificar o contexto de segurança em que os processos do seu contêiner são executados. Para isso, adicione a opção -Z a ps . Por exemplo:

LABEL                             PID TTY      STAT   TIME COMMAND
system_u:system_r:virtd_lxc_t:s0:c5,c342 26351 ? Ss   0:00 /sbin/init
system_u:system_r:virtd_lxc_t:s0:c5,c342 26458 ? Ss   0:00 /usr/sbin/sshd -D

Note que o próprio SELinux não é namespaced, então você não pode ter políticas separadas do SELinux dentro dos containers, como se fossem instalações independentes do SO.

Isso também não parece ser tão bem desenvolvido (ainda) quanto o SELinux para contêineres gerenciados pelo libvirt. Mas, em geral, não deve ser algo com o qual você precisa se preocupar muito.

    
por 01.10.2014 / 13:43