CentOS7 O SELinux parece não aderir às categorias do MCS

3

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.

    
por Lukas 14.03.2018 / 12:31

1 resposta

2

Aparentemente, houve uma mudança nas políticas do SELinux do CentOS6 para o CentOS7, de modo que as restrições do MCS não são mais aplicadas a todos os tipos. Para um determinado tipo de aderir ao MCS, o atributo mcs_constrained_type deve ser adicionado a esse tipo por meio de uma política personalizada. Mais detalhes sobre como fazer isso (e quais tipos são MCS restritos por padrão (e por que)) podem ser encontrados em uma postagem no blog por Dan Walsh .

    
por 26.03.2018 / 19:13