Conheça o SELinux: desenvolvido pela NSA, utilizado por padrão no Fedora, CentOS, AIX, dentre outros e o por quê ele é tão importante para o Linux!
| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. Mais detalhes clicando aqui.
1. História
O Security-Enhanced Linux – SELinux – foi desenvolvido pela Agência Nacional de Segurança dos EUA (NSA). Logo no início, seu objetivo 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á-lo a um sistema operacional já existente.
A opção pelo 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.
O SELinux foi 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 que já naturalmente provê segurança á maioria dos sistemas inclusive Windows, diferindo também do ACLs (Access Control List’s) do Linux.
Como exemplo, as permissões atribuídas ao MAC pelo SELinux podem ser aplicadas até ao usuário root, limitando ações do mesmo. Ou seja, o Root não terá plenos poderes de acesso como normalmente teria. – isso que o Root pode ter momentos em que não tem plenos poderes como informado nesse outro post!
Ainda sobre o MAC, usuários que expõem seus dados utilizando chmod estão protegidos pelo fato de seus dados terão um tipo único associado com seu diretório “home” e outros processos não podem tocar nestes dados sem devida permissão dentro da política.
2. Teoria
Com o SELinux, a gestão dos direitos é completamente diferente do sistema Unix tradicional. Os direitos de um processo dependem de seu contexto de segurança. O contexto é definido pela identidade do usuário que iniciou o processo, o papel e o domínio que o usuário realizada naquele momento. Os direitos realmente dependem do domínio, mas transições entre os domínios são controladas pelos papéis. Finalmente, as transições possíveis entre os papéis dependem da identidade.
Por padrão, um programa herda seu domínio do usuário que o iniciou, mas políticas SELinux padrões esperam que muitos programas importantes sejam executados em domínios dedicados. Para conseguir isso, estes executáveis são marcados com um tipo específico (por exemplo ssh) é marcado com ssh_exec_t, e quando o programa é iniciado, ele muda automaticamente no domínio ssh_t). Este mecanismo de transição automática de domínio torna possível conceder apenas os direitos necessários para cada programa. É um princípio fundamental do SELinux.
- Espera, não entendi nada!
Em uma explicação básica, um contexto é um valor de dado assumido pelos objetos de uma classe.
Nome, Idade e Peso, são exemplos de contextos do objeto “Pessoa”.
Cor, Categoria e Modelo, são possíveis contextos do objeto “Carro”.
No caso, os contextos da arquitetura DAC são: Tipo, Dono, Grupo e Outros.
Num sistema, exemplo:
# ls –ld /etc
Saída do comando:
drwxr-xr-x
Onde:
- d = Diretório (Tipo)
- rwx = Permissão para o dono do arquivo (Dono)
- r-x = Permissão para o grupo do do arquivo (Grupo)
- r-x = Permissão para os outros objetos do sistema (Outros)
No caso da arquitetura MAC do SELinux, os contextos mudam de características, conforme segue-se:
Usuário, Papel, Tipo e Nível.
Onde:
- Usuário (user_u) – O campo usuário, indica o nome do usuário do SELinux, por exemplo, o usuário “system_u”, indica processos, arquivos de configuração e daemons do sistema.
- Papel (role_r) – O campo papel, é uma forma de agrupar diferentes permissões a um determinado usuário (uma espécie de grupo).
- Tipo (type_t) – O campo tipo (também conhecido como domínio), indica qual é permissão primária de determinado objeto do SELinux, essa é a primeira etapa de verificação de permissão do sistema MAC.
- Nível (s*:c*) – O campo nível, indica em qual categoria determinado objeto se encontra, com relação à segurança. O mesmo utiliza a politica MCS/MLS (Multi-Category Security/ Multi-Level Security).
3. Prática
Na prática, com o mesmo diretório /etc:
# ls –Zd
Saída do comando:
System_u:object_r:etc_t:s0
Onde:
- system_u = Usuário dono do objeto
- object_r = Papel (ou papel)
- etc_t = Domínio (ou tipo)
- s0 = Nível de segurança
Em um conceito mais 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.
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.
Trabalhar com o SELinux exige um bom conhecimento aprofundado do sistema e exige muita leitura, já que essa postagem foi meramente explicativa e introdutória
O SELinux completo possui dezenas de páginas para atribuições e uso, com diversos arquivos para configuração granular. Algumas distribuições Linux trazem uma interface gráfica pra manipular o SELinux mas a maior parte delas é via terminal.
Deixo aqui os seguintes links para auxiliar em seus estudos, a quem interessar se aprofundar e trabalhar com SELinux:
Manual em pt_BR de implementação do SELinux para Debian: Handbook
Manual em pt_BR de implementação do SELinux para CentOS: VivaOLinux
Página Oficial do Projeto: SELinux
#UrbanCompassPony
Fontes:
VivaOLinux
DebianHanbook
Autodidata, me aprofundei em sistemas operacionais baseados em UNIX®, principalmente Linux. Também procuro trazer assuntos correlacionados direta ou indiretamente, como automação, robótica e embarcados.
Excelente trabalho! Coeso e sucinto! Parabéns.
Obrigado!
Parabéns, excelente artigo.