O SELinux, mesmo se tornando um projeto público a poucos anos, se origina de trabalhos de várias décadas atrás. Em 1973, cientistas da computação David Bell e Leonard LaPadula definiram o conceito de sistema seguro e publicaram um modelo formal descrevendo o sistema seguro multinível (MLS) [BELL 1975].
Nos anos 1980, o trabalho de Bell e LaPadula influenciaram muito o desenvolvedores de sistemas do governo dos Estados Unidos, e acabaram criando o Orange Book Trusted Computer System Evaluation Criteria [NSA 1985], definindo 6 classes de avaliação de sistemas seguros: C1, C2, B1, B2, B3 e A1. As classes C1 e C2 englobam sistemas que dependem de controle de acesso discricionário (DAC). Classes B1 e superiores, devem implementar controle de acesso mandatório.
Durante os anos 1990, pesquisadores da National Security Agency (NSA) dos Estados Unidos trabalharam junto com a Secure Computing Corporation (SCC) e Universidade de Utah para desenvolver uma forte e flexível arquitetura para controle de acesso mandatório. Nessa parceria foi desenvolvido um protótipo da arquitetura, chamada de ``Flask within Fluke''. A arquitetura Flask implementa MAC através de uma política de segurança definida que pode controlar todos os objetos do sistema, aplicando o conceito de menor privilégio, que dá a um processo ou objeto exatamente os direitos necessários para executar uma determinada tarefa. O modelo Flask habilita a interpretação de uma política de segurança na maneira de um fluxo natural de regras, facilitando o refinamento da política de segurança. Após esse trabalho, a NSA continuou com sua pesquisa, e em dezembro de 2000, publicou junto com a Network Associates, Secure Computing Corporation, Trusted Computer Solutions e Tresys, como um produto de código aberto, a primeira versão do SELinux baseada na arquitetura Flask.
Na época da apresentação da solução SELinux pela NSA no encontro de desenvolvedores kernel de 2001, Linus Torvalds, pai do kernel Linux, rejeitou a inclusão do SELinux no kernel de desenvolvimento da época (versão 2.5), por observar que surgiam simultaneamente muitos frameworks de segurança diferentes que se baseavam no kernel Linux. Isso levou à conclusão de que não existia um consenso na comunidade de segurança sobre o modelo a ser adotado e motivou a criação dos LSM (Linux Security Modules), que consistem em uma série de ``ganchos'' (o termo ``hooks'' em inglês) que foram inseridos no kernel oficial do Linux 2.6 em dezembro de 2003 [WRIGHT 2002], enquanto, ao mesmo tempo, o SELinux foi modificado para incorporar LSM.
A segurança de um sistema Linux não modificado depende da correção do kernel, de todas as aplicações privilegiadas, e de cada uma de suas configurações. Um problema em qualquer uma dessas áreas pode comprometer o sistema por inteiro. Em contraste a isso, a segurança de um sistema Linux com SELinux depende primariamente da correção do kernel e da configuração da política de segurança, e problemas com aplicações individuais ficam limitadas, não comprometendo o sistema por inteiro.
No entanto, implementar um modelo MAC em um sistema unix é muito complexo [MCCARTY 2004]. Definir regras para cada usuário para usar cada programa que por sua vez acessa cada objeto resulta num enorme conjunto de regras. Para facilitar, o SELinux utiliza o conceito de RBAC (Role-Based Access Control, ou Controle de Acesso Baseado em Papéis). Sobre RBAC, um administrador pode definir papéis e permitir o acesso de alguns usuários a esses papéis. Por exemplo, um usuário pode ter acesso de escrita em seus arquivos pessoais, e um auditor de sistema pode ser capaz de ler todos os logs do sistema e arquivos de configuração, mas nunca deverá conseguir escrever neles. A tarefa de definição da política de segurança de controle de acesso mandatório é simplificada, quando:
De uma perspectiva pura, SELinux provê uma mistura de conceitos e capacidades do controle de acesso mandatório, do controle de integridade mandatório, do controle de acesso baseados em papéis (Role-based access control - RBAC), e arquitetura de tipo de aplicação, que será explicada no decorrer do trabalho.
Existem alguns sistemas operacionais disponíveis com esse nível de controle de acesso, como o Trusted Solaris e o Trusted HP-UX. O objetivo principal do uso do SELinux é demonstrar que esse tipo de sistema operacional de alta segurança é viável além do ambiente governamental e militar, sendo utilizado no campo corporativo e pessoal.
Muitas distribuições Linux começaram a adotar SELinux, mas o primeiro esforço para deixar o SELinux pronto para o uso comercial foi através do projeto Fedora, apoiado pela Red Hat. Hoje diversas distribuições Linux vêm com o SELinux integrado:
Existem outras distribuições que, apesar de não vir com o SELinux na sua instalação padrão, estão realizando esforços para permitir a sua aplicação:
Além do Linux, existem alguns esforços para portar o SELinux para a arquitetura *BSD, como o TrustedBSD [TRUSTEDBSD 2007] e SEDarwin [SEDARWIN 2007].
Jeronimo Zucco 2008-04-26