Login / Registre-se Account

Linux

SELinux: arquitetura de segurança para sistemas Linux

O Security-Enhanced Linux, também conhecido como SELinux, é uma arquitetura de segurança para sistemas Linux® que permite que administradores tenham mais controle sobre quem pode acessar o sistema. Ele foi originalmente desenvolvido pela Agência de Segurança Nacional (NSA) dos Estados Unidos como uma série de patches para o kernel do Linux usando módulos de segurança do Linux (LSM).  

O SELinux foi lançado para a comunidade open source em 2000 e foi integrado ao upstream do kernel do Linux em 2003.


Como o SELinux funciona?

O SELinux define controles de acesso para aplicações, processos e arquivos em um sistema. Ele usa políticas de segurança, um conjunto de regras que dizem ao SELinux o que pode ou não ser acessado, para impor o acesso permitido por uma determinada política. 

Quando uma aplicação ou processo, também conhecidos como entidade, solicita acesso a um objeto, por exemplo, um arquivo, o SELinux executa uma verificação com um cache de vetor de acesso (AVC), local onde as permissões para entidades e objetos ficam armazenadas.

Se o SELinux não conseguir tomar uma decisão sobre o acesso baseado nas permissões armazenadas em cache, ele enviará uma solicitação para o servidor de segurança. Esse servidor verifica o contexto de segurança da entidade e o arquivo. O contexto é aplicado do banco de dados de políticas do SELinux. Então, a permissão é concedida ou negada. 

Se a permissão for negada, a mensagem "avc: denied" aparecerá em /var/log.messages.

Como configurar o SELinux 

Há várias maneiras de configurar o SELinux para proteger seu sistema. As mais comuns são política direcionada (targeted policy) ou segurança multinível (MLS).

A política direcionada (targeted policy) é a opção padrão e abrange uma variedade de processos, tarefas e serviços. A MLS pode ser muito complicada e normalmente só é usada por organizações governamentais. 

É possível saber o que o sistema deveria estar executando olhando o arquivo /etc/sysconfig/selinux. O arquivo terá uma seção que exibe se o SELinux está no modo de permissão, modo de imposição ou desativado e qual política deveria ser carregada.

Identificação (labeling) e imposição de tipo (type enforcement) do SELinux 

Type enforcement e labeling são os conceitos mais importantes do SELinux.

O SELinux funciona como um sistema de identificação, o que significa que todos os arquivos, processos e portas em um sistema têm um rótulo do SELinux associado a eles. O labeling é uma maneira lógica de agrupar as coisas. O kernel gerencia os rótulos durante a inicialização.

Os rótulos estão no formato usuário:função:tipo:nível (nível é opcional). Usuário, função e nível são usados em implementações mais avançadas do SELinux, como as com MLS. O rótulo de tipo é o mais importante para a política direcionada. 

O SELinux usa imposição de tipo para fixar uma política definida no sistema. A imposição de tipo faz parte de uma política do SELinux para definir a compatibilidade entre os rótulos de determinados processos e certos arquivos.

Ativação do SELinux

Se o SELinux foi desativado no seu ambiente, você pode reativá-lo editando /etc/selinux/config e configurando o SELINUX para o modo de permissão. Como o SELinux não estava ativado, é melhor não configurá-lo para impor ainda. É possível que haja elementos identificados incorretamente, e isso pode impedi-lo de reiniciar o sistema.  

É possível forçar o sistema a reidentificar o sistema de arquivos automaticamente. Basta criar um arquivo vazio chamado .autorelabel no diretório raiz e depois reiniciar. Se o sistema tiver muitos erros, será necessário iniciá-lo no modo de permissão para que a inicialização ocorra com sucesso. Após tudo ser reidentificado, configure o SELinux para impor (usando /etc/selinux/config) e reiniciar, ou execute o setenforce 1. 

Caso o administrador de sistemas não conheça bem a linha de comando, há ferramentas gráficas que podem ser usadas para gerenciar o SELinux. 

O SELinux oferece uma camada adicional de segurança para o sistema que é integrada às distribuições Linux. Ela deve permanecer no sistema para que possa protegê-lo caso haja alguma falha.


Controle de acesso opcional (DAC) x controle de acesso obrigatório (MAC)

Tradicionalmente, os sistemas Linux e UNIX usam o DAC. O SELinux é um exemplo de sistema MAC para o Linux. 

No DAC, arquivos e processos têm proprietários. Um usuário, um grupo ou qualquer outra pessoa pode ser o proprietário de um arquivo. Os usuários podem mudar as permissões em seus próprios arquivos.

O usuário raiz tem controle de acesso completo com um sistema DAC. Se você tiver acesso irrestrito, poderá entrar nos arquivos de qualquer outro usuário ou fazer o que quiser no sistema. 

No entanto, em sistemas MAC, como o SELinux, há uma política definida administrativamente para o acesso. Mesmo que as configurações DAC no seu diretório home estejam diferentes, uma política do SELinux criada para prevenir que outro usuário ou processo acesse o diretório irá proteger o sistema. 

As políticas do SELinux permitem que você seja específico e contemple um grande número de processos. Você pode fazer alterações com o SELinux para limitar o acesso entre usuários, arquivos, diretórios e muito mais.


Como lidar com erros do SELinux

Quando você vê um erro no SELinux, algo precisa ser corrigido. É provável que seja um desses quatro problemas comuns:

  1. Os rótulos estão errados. Se a identificação estiver incorreta, você poderá usar as ferramentas para corrigi-los.
  2. Uma política precisa ser corrigida. Isso significa que você precisa informar ao SELinux sobre uma mudança feita ou talvez precise ajustar uma política. Você pode corrigir isso usando módulos de política ou booleanos.
  3. Há um bug na política. Talvez você precise consertá-lo.
  4. O sistema foi invadido. Embora o SELinux possa proteger seus sistemas em vários cenários, a possibilidade do sistema estar comprometido existe. Se você suspeitar que este é o caso, aja imediatamente.

O que são booleanos?

Booleanos são configurações de ativação/desativação para funções no SELinux. Há centenas de configurações que podem ativar ou desativar os recursos do SELinux e muitas já vêm predefinidas. É possível descobrir quais booleanos já foram configurados no sistema executando getsebool -a.

Conheça todas as vantagens do Linux