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.
Ex.:
# 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, os contextos mudam de características, conforme: 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).
Por exemplo, o nível s0:c0 indica um objeto Confidencial para todos os que possuírem o mesmo nível.
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 SELinux dono do objeto
- object_r = Papel (ou papel) do SELinux
- etc_t = Domínio (ou tipo) do SELinux
- s0 = Nível de segurança do SELinux
Visualizando contextos MAC nos objetos do sistema
Para visualizar todos os processos que estão rodando no sistema, juntamente com os contextos do SELinux, vamos utilizar o comando abaixo:
# ps auxZ
Perceba que apenas adicionando a opção "Z" no comando
ps, já é suficiente para visualizarmos os contextos de todos os processos do SELinux. Isto vale para outros comandos também, como por exemplo, o comando
ls.
Vamos visualizar o contexto de um arquivo ou diretório qualquer do sistema:
# ls –Z /boot
Saída do comando:
system_u:object_r:boot_t:s0
Isso vale também para o comando
id, que nos traz informações de um determinado usuário:
Ex.:
# id –Z
Saída do comando:
unconfined_u: unconfined_r: unconfined_t:s0-s0:c0.c1023ls
Perceba que neste caso, todo o contexto está definido como: unconfined_*
...Isto indica que o SELinux não terá influência alguma no objeto correspondente.