Problema
Um arquivo que é atribuído a uma determinada categoria do SELinux MCS (Multi Category Security) pode ser lido por um usuário que não esteja designado para aquela categoria, indicando que o MCS de alguma forma não funciona em meu sistema (executando CentOS7, com um mínimo instalação, o SELinux reforçando a política direcionada ).
Antecedentes
Adquiri recentemente um pequeno vServer para mim, o que me levou a mergulhar na configuração segura do sistema e lidar com o SELinux pela primeira vez. Eu pretendo separar os aplicativos que serão executados no servidor, executando-os em contêineres do Docker (com o próprio host operando no CentOS7). Fiquei feliz em saber que cada contêiner do Docker é (por padrão) atribuído a categorias aleatórias do SELinux MCS na inicialização para fornecer uma camada de segurança adicional para a separação. Para me familiarizar com o funcionamento especial do SELinux e do MCS, configurei uma VM em uma das máquinas da minha casa e toquei um pouco. Ao fazer isso, percebi que o MCS não funciona como seria de se esperar, então estou perdendo algo importante ou há um problema de configuração em algum lugar.
O que eu fiz
Para testar o MCS, segui as instruções em [0] e [1]. Primeiro, certifiquei-me de que o SELinux estivesse, de fato, sendo executado no modo enforcing e com a política segmentada usando sestatus
.
Aderindo a [0], criei um usuário do SELinux mcsuser_u e usuários do CentOS john , jane , johnjane , que Eu então mapeei para mcsuser_u usando semanage login
. Eu também atribuí as categorias aos usuários conforme listado em [0] e acabei com:
Login Name | SELinux User | MLS/MCS Range
john | mcsuser_u | s0-s0:c122
jane | mcsuser_u | s0-s0:c123
johnjane | mcsuser_u | s0-s0:c122,123
de semanage login -l
e
mcsuser_u | MLS/MCS Level: s0 | MLS/MCS Range: s0-s0:c0.c1023 | SELinux Roles: user_r
de semanage user -l
.
Eu fiz o diretório home do usuário john mundo legível ( chmod 707
), logado como joão e criei um arquivo de texto johntext . Eu então atribuí a categoria c122 àquele arquivo (ainda logado como joão ). Eu também era capaz de atribuir categoria c120 ao arquivo, mesmo que joão não seja categorizado como c120 , o que não deveria ser possível de acordo com [0] (eu subseqüentemente removi c120 novamente). ls -lZ johntext
mostra a saída
-rw-rw-r-- john john mcsuser_u:object_r:user_home_t:s0:c122 johntext
Seguindo o acima, eu entrei como usuário jane , e tentei ler o arquivo johntext usando o comando cat
, o que eu pude fazer.
Isso, para mim, indica claramente que o MCS não está funcionando como seria de esperar (permitindo o acesso a objetos de uma determinada categoria somente se o usuário que solicita o acesso tiver a mesma categoria).
Soluções?
Estou um pouco confuso agora e não sei onde está o erro, por isso estou me voltando para vocês para um conselho. É provavelmente apenas um erro ou um mal-entendido do meu lado, mas eu não consigo entender agora e isso não faz sentido para mim. A meu ver, existem as seguintes possibilidades:
1. Eu tenho que ativar manualmente as verificações do MCS ou usar uma política diferente
Eu não encontrei nenhuma informação sobre se devo ativar manualmente o suporte ao MCS e, portanto, assumir que ele simplesmente funciona se eu atribuir rótulos (com base em [1]). Outra fonte [2] sugere que o MCS está habilitado na política direcionada no (pelo menos) Fedora e RHEL, do qual eu esperaria que não fosse diferente para o CentOS.
2. Há um erro de configuração do meu lado
Eu poderia ter cometido algum erro ao configurar as categorias de usuários com semanage login
ou atribuir categorias ao arquivo.
3. Está apenas quebrado
.. o que seria ruim
Links referenciados
0: link
1: link
2: link
Full sestatus
output
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
[EDITAR]:
Acabei de testar as mesmas etapas em uma VM executando o CentOS 6.9, onde tudo se comporta como esperado. Agora, eu diria que há algum bug relacionado ao MCS no SELinux no CentOS, ou algumas mudanças não documentadas na política / configuração que precisariam ser ajustadas. Ainda estou em dúvida sobre quais seriam os próximos passos sensatos para que funcionasse como esperado.