O SELinux aplica a política que é baseada na relação de atributos de um sujeito para atributos de um objeto. Essa relação entre os atributos do sujeito e os atributos dos objetos são referenciados como contextos de segurança. Contextos de segurança são um conjunto de propriedades que são associados à objetos e sujeitos. Essas propriedades são: usuário, papel, tipo e nível/categoria de segurança. A combinação desses campos forma o contexto de segurança. O SELinux armazena os contextos de segurança nos atributos extendidos (xattr) dos sistemas de arquivos, hoje suportado nos sistemas de arquivos mais comuns do mundo Linux: ext2, ext3, reiserfs, xfs, etc. Um Exemplo de um contexto de segurança simples pode ser visualizado na figura 2.5.
Figure Figura 2.5::
Exemplo de contexto de segurança SELinux
|
|
A seguir estão detalhados cada um dos campos utilizados na construção do construção do contexto de segurança SELinux:
- Campo Identidade: este é o primeiro de quatro campos que forma um contexto de segurança SELinux: O campo identidade ou usuário possui um grupo de usuário SELinux. Se um usuário é membro do grupo ``user_u'', então esse campo conterá ``user_u''. Processos que são iniciados pelo sistema terão um contexto de segurança iniciando com o campo ``system_u''. Grupos SELinux personalizados podem ser criados, por exemplo, se for necessário que um grupo de usuários de domínio tenha acesso a papéis específicos, deve ser criado um grupo de usuários SELinux e definir quais papéis esse domínio de usuário pode ser capaz de assumir. Em muitos sistemas SELinux, o grupo padrão ``user_u'' não tem poder de assumir nenhum outro papel, pois o ``user_u'' é reservado para usuários não privilegiados.
- Campo Papel: um papel é um rótulo aplicado a uma identidade. Cada papel contém uma lista de domínios que a identidade têm permissão de realizar transição de rótulos. Rótulos de papéis são convencionalmente nomeados como papel_r (role_r). Papéis são usados somente para domínios de usuário, e não para domínios de aplicação, portanto existirá um espaço reservado para informações de papéis nos contextos de segurança para objetos. O campo papel para um processo de domínio de usuário pode variar conforme definido nos grupos SELinux que podem assumir novos papéis. O papel para um domínio de usuário que é membro do grupo SELinux user_u é geralmente user_r. O papel para um domínio de aplicação é system_r. Decisões de segurança baseados nesse campo são referenciados como RBAC (Role-based access control).
- Campo Tipo: divide sujeitos e objetos em grupos relacionados. Tipos são os atributos de segurança primários que o SELinux usa para realizar decisões de autorização. Qualquer coisa do mesmo tipo terá o mesmo acesso. Os tipos estabelecem sandboxes que restrigem processos e previne escalação de privilégios. Por padrão a segurança do SELinux é baseada em tipos aplicados. Isso é chamado de TE (Type Enforcement). O acesso é determinado pela relação entre o campo tipo do sujeito de origem (um programa binário, por exemplo) com campo tipo do objeto de destino (um objeto do tipo arquivo de senhas, por exemplo). Em SELinux, os termos domínios e tipos são sinônimos. O termo domínio é mais usado para referenciar processos, enquanto tipo é mais usado para referenciar objetos passivos como arquivos.
- Campo Nível de Segurança: o SELinux provê suporte opcional à MLS (Multilevel Security), que é um tipo de controle de acesso mandatório que é aplicável a alguns problemas de segurança, normalmente associado com controle de dados governamentais classificados, ou seja, dados confidenciais. Esse campo é utilizado para guardar as informações SELinux caso seja aplicado MLS, o que impede que domínios operando em níveis de segurança diferentes possam interagir um com o outro. Caso MLS não seja utilizado, esse campo pode ser descartado, e o valor padrão é assumido (s0), que é nível de segurança padrão que o sistema opera. O nível de segurança s0 também é referenciado como SystemLow.
Para verificar o contexto de segurança SELinux de objetos, alguns programas como ls, id, ps, cp, mv, cron, login, etc. foram alterados para incluir a opção ``-Z'', para listar os contextos. Como exemplo, para verificar o contexto de segurança de um usuário no prompt, é rodado o seguinte comando:
No exemplo, o usuário corrente está no contexto de segurança como usuário system_u, com o papel system_r, no domínio unconfined_t e nível de sensibilidade s0. Ou então, como outro exemplo, para verificar o contexto de segurança SELinux de um arquivo, é usado o seguinte comando:
Nesse exemplo, o arquivo /usr/bin/passwd mostra que seu contexto de segurança é do usuário SELinux system_u, com o papel object_r, do tipo passwd_exec_t e nível de sensibilidade s0.
Jeronimo Zucco
2008-04-26