SELinux na prática

Este artigo tem como objetivo dar uma explicação básica do conceito do SELinux, além de pôr em prática alguns comandos e configurações, para que possamos entender um pouco dessa poderosa ferramenta que nos auxilia na proteção de nossos servidores.

[ Hits: 11.025 ]

Por: Adson Emanuel em 03/12/2014


Introdução



O SELinux (Security-Enhanced Linux) é um ferramenta incorporada ao kernel do Linux, que tem como função implementar um modelo de controle obrigatório, chamado de MAC (Mandatory Access Control), ou seja, é uma administração centralizada, não existindo a figura do dono do arquivo e sim um usuário administrador que determina as regras de acesso tanto aos arquivos quanto aos processos.

A maioria dos usuários deve estar familiarizada com o modelo DAC (Discretionary Access Control) que tem como característica principal sua flexibilidade, visto que, o usuário que cria os arquivos detém o poder total sobre os mesmos e pode dar a permissão que ele julgar necessário, a qualquer outro usuário.

Outra característica importante do modelo DAC, é com relação às permissões dos processos ou serviços rodando em um servidor, por exemplo, se um determinado usuário inicia um serviço, este terá as mesmas permissões do usuário.

E como alguns administradores de sistemas utilizam o usuário root para rodar seus serviços, isto pode abrir brechas de segurança para todo o sistema, uma vez que, se um usuário malicioso encontrar alguma falha na aplicação, o mesmo pode fazer uma escalação de privilégio e ter acesso irrestrito a todo o sistema.

O que o SELinux faz é confinar os processos, evitando que aplicações maliciosas ou com bugs, ou até mesmo uma configuração ingênua, possam criar brechas de segurança.

SELinux

Bom, depois de uma explicação bem básica sobre o SELinux, vamos colocar a mão na massa. Tanto o modelo DAC, quanto o MAC, são usados simultaneamente, use o comando a seguir para visualizar os dois modelos. Vou usar para os testes o S.O. CentOS 7:

ls -Z VOL.txt
-rwxr--r--. adson adson unconfined_u:object_r:user_home_t:s0 VOL.txt

No comando acima, fica claro as formas de controle de acesso que o sistema operacional pode utilizar.

Na primeira parte, está o controle de acesso DAC e na segunda, que começa com a apresentação do usuário do SELinux (unconfined_u), está caracterizado o modelo MAC, que é chamado de contexto de segurança. O contexto de segurança está dividido em campos, separados por dois pontos, que determina a relação entre os sujeitos e objetos e suas permissões.

Na ordem apresentada pela saída do comando, podemos identificá-los da seguinte maneira:
  • O primeiro campo é o Usuário SELinux;
  • O segundo é o Papel;
  • Terceiro é o Tipo;
  • Seguido pelo Nível de Segurança.

A seguir, uma explicação básica de cada campo:

Usuário SELinux: este usuário carrega em seus atributos, as autorizações para um conjunto específico de funções. Os usuários do S.O. (sistema operacional) são mapeados para os usuários SELinux, herdando assim, todas as permissões e funções do SELinux. Usando o utilitário semanage, pode-se observar o mapeamento do usuário Linux para o usuário SELinux, as duas outras colunas apresentam o MLS/MCS ou Multinível de Segurança/Multi Categoria de Segurança e a última coluna, são os serviços que o usuário tem permissão para uso.

Papel: este campo usa o modelo de controle de acesso baseado em papéis (RBAC), isso mesmo, além do modelo MAC, o SELinux usa o modelo RBAC ou Role Basic Access Control. O papel é um rótulo que é relacionado com o usuário SELinux. Cada papel carrega uma lista de domínios que o usuário, quando relacionado ao mesmo, tem permissão de acesso.

Tipo: este, por sua vez, divide os sujeitos e objetos em grupos que, dependendo da configuração, podem se relacionar, ou seja, qualquer coisa do mesmo tipo pode se relacionar e consequentemente terem o mesmo acesso.

Nível de Segurança: é mais um mecanismo que o SELinux pode utilizar. É o atributo de MLS/MCS, que os usuários podem utilizar para rotular sujeitos e objetos em níveis e categorias diferentes, fortalecendo ainda mais o controle de acesso. Como pode ser observado no arquivo /etc/selinux/targeted/setrans.conf, o CentOS pode utilizar um range de C0 até C1023 categorias.

Visualizando usuários do S.O., usuários SELinux e suas permissões:

# semanage login -l
 Nome de usuário   Usuário do SELinux   Intervalo MLS/MCS    Serviço
 __default__          unconfined_u        s0-s0:c0.c1023        *
 root                 unconfined_u        s0-s0:c0.c1023        *
 system_u               system_u          s0-s0:c0.c1023        *


Modo de operação do SELinux

O SELinux opera em três modos básicos:
  • Enforcing: neste modo as políticas do SELinux são impostas, ou seja, tudo é analisado, e regras vindas do servidor de segurança são aplicadas.
  • Permissive: aqui as regras não são aplicadas. Mas o SELinux registra as ações, que deviriam ser negadas.
  • Disabled: este, como o nome sugere, desabilita o SELinux.

Para alternar entre o modo Enforcing e modo Permissive, é necessário apenas um utilitário, o setenforce.

Para colocá-lo no modo Enforcing, use o comando:

# setenforce 1

Para colocá-lo no modo Permissive, use o comando:

# setenforce 0

Tanto estas configurações, quanto modo Disabled, podem ser configurados editando o arquivo /etc/selinux/config.

Vocês devem estar pensando se o sistema deve ficar bem lento, visto que são processadas tanto as regras de acesso do modelo DAC, quanto as do modelo MAC. Mas nem tanto assim, por dois motivos básicos: as regras do modelo DAC são analisadas primeiro e em caso de bloqueio as regras MAC não são analisadas, um outro detalhe é que o SELinux usa um sistema de cache, otimizando assim seu desempenho.

    Próxima página

Páginas do artigo
   1. Introdução
   2. SELinux na prática
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Festa com SQL injection

Servidor de autenticação 802.1x com Freeradius

Netcat - O canivete suíco do TCP/IP

Hidden Service - Disponibilizando seu site na Deep Web através do Tor

Firewall com Iptables + Squid

  
Comentários
[1] Comentário enviado por sergiognomo em 11/12/2014 - 12:13h

Excelente artigo, Adson. Parabéns!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts