Docker Capabilities

Publicado por Mundo Docker em 28/08/2015

[ Hits: 3.362 ]

Blog: http://www.mundodocker.com.br

 


Docker Capabilities



Olá!

Hoje vamos ver algumas features de segurança que pertencem não apenas ao Docker, mas sim ao LXC (uma das tecnologias utilizadas pelo Docker), são as capabilities.

Em sistemas Unix like, há basicamente duas categorias de processos: processos privilegiados, que executam com ID 0 (superusuário) e os não-privilegiados, que executam com ID maior que 0.

Basicamente os processos privilegiados ignoram todas as verificações de permissões de kernel, enquanto os processos não-privilegiados estão sujeitos a algumas checagens para sua correta execução, normalmente: UID efetivo (usuário dono do arquivo/binário, etc), GID efetivos (grupo dono do arquivo/binário, etc) ou lista de grupo suplementar (mais conhecidas como ACL's - Access Control List).

Do kernel 2.2 em diante o Linux dividiu as formas tradicionais de privilégios associados ao superusuários em unidades diferentes, conhecidas como capacidades, que podem ser habilitadas e desabilitadas independentemente umas das outras. Essas capacidades são atribuídas por thread, ou seja, threads do mesmo processos podem ter suas capacidades de execução modificadas.

No Docker é possível modificar essas capacidades, habilitando ou desabilitando conforma sua necessidade, vale lembrar que todo container executa de forma não privilegiada, ou seja, ele tem sua execução restrita, quando é adicionada uma capacidade a execução de um container, é dado o privilegio para que o mesmo possa executar alguma ação como root, isso pode ser um problema de segurança, dependendo do seu ambiente.

Vamos ver algumas capacidades que podem ser atribuídas a um container, e que são normalmente utilizadas:
  • CAP_SETPCAP :: Modifica capacidades de um processo
  • CAP_SYS_MODULE :: Insere ou remove módulos do kernel
  • CAP_SYS_RAWIO :: Modifica memória do Kernel
  • CAP_SYS_PACCT :: Configura quota de processo
  • CAP_SYS_NICE :: Modifica prioridade do processo
  • CAP_SYS_RESOURCE :: Sobrescreve os limites de recursos
  • CAP_SYS_TIME :: Modifica a hora de sistema
  • CAP_SYS_TTY_CONFIG :: Configura interface tty
  • CAP_AUDIT_WRITE :: Escreve logs de auditoria
  • CAP_AUDIT_CONTROL :: Configura auditoria dos subsistema
  • CAP_MAC_OVERRIDE :: Ignora politicas de MC do Kernel
  • CAP_MAC_ADMIN :: Configuração de MAC
  • CAP_SYSLOG :: Modifica o comportamento de logs
  • CAP_NET_ADMIN :: Configura funções de rede
  • CAP_SYS_ADMIN :: Possibilita execução totalmente privilegiada.

Agora, para habilitar alguma capacidade (ou CAP) no Docker, pode ser utilizado o parâmetro: --cap-add=NOMEDACAP, algo parecido com isso:

# docker run --cap-add=NOMEDACAP -i -t --rm centos /bin/bash

Para remover alguma CAP basta adicionar o parâmetro --drop-cap, ficaria assim:

# docker run --cap-add=ALL --cap-drop=NET_ADMIN -i -t --rm centos /bin/bash

Seguindo os parâmetros acima, todas as CAPs serão habilitadas para este container, menos a CAP NET_ADMIN, com isso todas as demais operações serão permitidas ao container, menos as operações de rede, como modificação de ip, configurações de rotas etc.

Quer saber mais sobre Docker, veja nosso blog:
Referências:
Outras dicas deste autor

Monitorando o consumo de containers Docker

Docker, Git e PHP

Docker API com Python

Docker Exec

Sysdig para Ops

Leitura recomendada

Alterando permissões em arquivos ou somente nos diretórios

Obtendo informações sobre o hardware no Linux

Executando vários comandos em sequência no GNU/Linux

SQL Developer no Ubuntu 12.04 - Instalação e configuração

Instalando fontes Truetype no Linux

  

Comentários
[1] Comentário enviado por removido em 28/08/2015 - 15:27h

Legal encontrar mais conteúdo sobre o Docker, escrito por autores nacionais.

*Bacana o site também.

---------------------------------
Keep it Simple, Stupid



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts