O Security-Enhanced
Linux -
SELinux - foi desenvolvido pela Agência Nacional de Segurança dos EUA (NSA). Logo no início, seu objetivo principal era tornar-se um sistema operacional capaz de fornecer controles avançados de acesso para os órgãos militares dos Estados Unidos.
Porém, com o passar do tempo, a NSA identificou que seria mais lógico aprimorar um sistema de controle de acesso obrigatório, e adicioná-los a um sistema operacional já existente.
A opção pelo
GNU/Linux surgiu devida à facilidade e flexibilidade de incorporar tal framework ao Kernel do sistema. Logo depois, sistemas que traziam a plataforma
Unix, também usufruíram desta tão poderosa ferramenta.
Altamente implementado e refinado em cima da arquitetura MAC (Mandatory Access Control), provendo maior segurança a arquivos, diretórios, processos, sistema de arquivos, entre outros objetos, através de regras providas pelo SELinux.
Vale ressaltar, que este nível de segurança vai além da arquitetura DAC (Discretionary Access Control) que está associada à permissão de arquivos e ACLs (Access Control List’s) do GNU/Linux, como exemplo, as permissões MAC podem ser aplicadas até ao usuário root, limitando ações do mesmo.
Em um conceito prático, imaginemos que a conta de sistema associada ao serviço HTTP foi comprometida, o SELinux através de regras pré estabelecidas, limita este comprometimento apenas ao serviço HTTP, impossibilitando o comprometimento de outros serviços, ou até mesmo, do próprio sistema operacional.
Depois deste breve conceito, vamos à prática.
Lembrando que mais informações do SELinux, podem ser obtidas na Wiki do Projeto:
Ou, na página oficial da NSA:
Modo de operação do SELinux (conceito e prática)
Basicamente, o SELinux pode operar em três tipos diferentes, que são:
- Enforcing – As regras do SELinux estão aplicadas, e está sendo gerado Logs de todas as operações do mesmo;
- Permissive – As regras do SELinux estão desativadas, porém, está gerando Logs de todas as operações do mesmo (útil para Troubleshoot de aplicações);
- Disabled - As regras e os Logs do SELinux estão completamente desativados.
Obs.: Para nossos testes, estou utilizando o
CentOS 6.3.
Visualizando o status do SELinux:
# sestatus
Saída do comando:
SELinux status: enabled
SELinux mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
Caso se queira visualizar apenas o
Current mode do SELinux, utilize o comando:
# getenforce
Saída do comando:
Enforcing
Perceba que este comando traz apenas o modo de operação do SELinux.
Para alterarmos o modo de operação temporário do SELinux (apenas Enforcing e Permissive), utilizaremos o seguinte comando:
# setenforce MODO_DE_OPERAÇÂO
Ex.:
# setenforce permissive
Logo, visualize o status do SELinux:
# sestatus
SELinux status: enabled
SELinux mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
Obs.: Para desabilitar, ou alterar, o 'current mode' do SELinux por completo, é necessário editar o arquivo de configuração do SELinux (/etc/selinux/config) e alterar a variável:
'SELINUX='.
* Apenas como fonte de informação:
- Em alguns casos com o SELinux habilitado, podemos nos deparar com serviços que, por algum motivo, não estão funcionando.
- Alguns administradores, simplesmente desativam o SELinux por completo (Modo Disabled), para resolver o "problema".
- Porém, para um Troubleshoot eficaz, não é necessário desativar o SELinux por completo comprometendo a segurança do sistema, e sim, deixá-lo em modo "Permissive"; com isso, as regras serão desativadas, porém, todo registro das atividades (logs) continuarão sendo armazenadas.