Decisões de acesso: determinam se um dado sujeito tem permissão de realizar uma dada operação em um determinado objeto [MCCARTY 2004]. Esse tipo de decisão é a mais frequente e importante no SELinux. Conceitualmente, cada classe de objeto possui um mapa de bits associado chamando de vetor de acesso, contendo um bit para cada ação definida para a classe, conforme demonstrado na figura 2.6. O servidor de segurança SELinux realiza decisões considerando o contexto de segurança do sujeito, do objeto da ação e a ação requisitada. Quando o servidor de segurança realizar a decisão de acesso, caso ele encontre mais de uma regra da política, ele retornará três vetores de acesso como mostrado na figura 2.6. Na figura 2.6, são demonstradas apenas algumas permissões da classe de objetos arquivo (file). Nesse exemplo, o servidor permite ao sujeito adicionar (append) ou criar (create) o objeto.
Figure Figura 2.6::
Um vetor de acesso simplificado resultante de uma decisão de acesso
|
|
Os três vetores de acesso da figura 2.6 têm as seguintes funções [MCCARTY 2004]:
- Allow: o vetor de acesso allow identifica as operações que o sujeito tem permissão de realizar no objeto. Nenhum registro de log é feito nessa operação;
- Auditallow: o vetor de acesso auditallow provoca um registro no log quando a operação é realizada, mas não habilita nenhuma operação, somente o vetor allow permite isso.
- Dontaudit: o vetor de acesso dontaudit identifica as operações que o sujeito não tem permissão de realizar no objeto, mas a negação de acesso não provoca uma entrada no log.
Uma ação requisitada é negada a menos que o servidor de segurança retorne allow, e requisições que não casam com nenhuma regra da política são negadas, ou seja, a política padrão do SELinux é negar tudo. Se uma ação é negada, é realizada uma entrada no log a menos que o servidor de segurança retorne dontaudit. Se o servidor de segurança retorna auditallow, uma entrada no log é gerada, também quando a operação é permitida. Conforme já citado anteriormente, para aumentar a eficiência na realização dessas operações de decisões de acesso, o servidor de segurança SELinux armazena os vetores de acesso frequentes utilizando algoritimos de cache em uma estrutura chamada Access Vector Cache (AVC).