O que é SELinux?
Security-Enhanced Linux (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 as aplicações, processos e arquivos de 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, como 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. Em seguida, 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 via política direcionada (targeted policy) ou segurança multinível (MLS).
A política direcionada é 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 mostra se o SELinux está no modo de permissão, modo de imposição ou desativado e qual política deveria ser carregada.
Identificação e imposição de tipo do SELinux
Imposição de tipo e identificação 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. A identificação é 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. A identificação de tipo é o mais importante para a política direcionada.
O SELinux usa imposição de tipo para aplicar 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 ativá-lo editando /etc/selinux/config e definindo SELINUX=permissive. Como o SELinux não estava ativado, é melhor não configurá-lo ainda para imposição. É possível que haja elementos identificados incorretamente, e isso pode impedir o sistema de ser reiniciado.
É 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 identificado novamente, configure o SELinux para impor (usando /etc/selinux/config) e reinicie, 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) e 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 raiz, 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 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ê encontra um erro no SELinux, é porque algo precisa ser corrigido. Provavelmente trata-se de um desses quatro problemas comuns:
- Os rótulos estão errados: se a identificação estiver incorreta, você poderá usar as ferramentas para corrigi-los.
- Uma política precisa ser corrigida: 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.
- Há um bug na política: se existe algum bug na política, ele precisa ser resolvido.
- 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.
A Red Hat pode ajudar
O Red Hat Enterprise Linux é a principal plataforma open source Linux do mundo. Ela permite que você reduza riscos, reforce políticas e configurações de segurança e simplifique estratégias de conformidade.
No Red Hat Enterprise Linux, as funções do sistema são uma coleção de Ansible® roles que oferecem fluxos de trabalho consistentes para aperfeiçoar a execução de tarefas manuais. As funções do sistema ajudam a automatizar os fluxos de trabalho de segurança, mantê-los ao longo do tempo com recursos mínimos, além de simplificarem os requisitos de governança e conformidade. Com a função do sistema SELinux, você pode automatizar a implantação e o gerenciamento do SELinux. Isso inclui:
- Ativar o SELinux com modos obrigatórios ou permissivos para garantir a consistência dos controles.
- Personalizar booleanos de política SELinux, contextos de arquivo, portas e logins para atender aos seus requisitos.
- Utilizar a função do sistema para reconciliar contextos de arquivo em diretórios ou arquivos especificados.