Problema
Um arquivo atribuído a uma determinada categoria SELinux MCS (Multi Category Security) pode ser lido por um usuário que não está atribuído a essa categoria, indicando que o MCS de alguma forma não funciona no meu sistema (executando CentOS7, com uma instalação mínima, SELinux fazer cumprir emvisadaspolítica ).
Fundo
Recentemente, adquiri um pequeno vServer para mim, o que me levou a mergulhar na configuração segura do sistema e a lidar com o SELinux pela primeira vez. Pretendo separar os aplicativos que irei executar no servidor, executando-os em contêineres docker (com o próprio host operando no CentOS7). Fiquei feliz em saber que cada contêiner docker recebe (por padrão) categorias SELinux MCS aleatórias na inicialização para fornecer uma camada de segurança adicional para a separação. Para me familiarizar com o funcionamento do SELinux em geral e do MCS especificamente, configurei uma VM em uma de minhas máquinas domésticas e brinquei um pouco. Fazendo isso, percebi que o MCS não funciona como eu esperava, então ou estou faltando 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 está realmente rodandofazer cumprirmodo e com ovisadaspolítica usando sestatus
. Aderindo a [0], criei ummcsuser_uUsuário SELinux e usuários CentOSJohn,Jane,Joana, que mapeei paramcsuser_uusando semanage login
. 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 criei o diretório inicial do usuárioJohnlegível mundialmente ( chmod 707
), logado comoJohne criei um arquivo de textojohntext. Eu então atribuí a categoriac122para esse arquivo (ainda logado comoJohn). Também consegui atribuir categoriac120para o arquivo, mesmo queJohnnão é classificado comoc120ele mesmo, o que não deveria ser possível de acordo com [0] (posteriormente removic120de novo). 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, fiz login como usuárioJanee tentei ler o arquivojohntextusando o cat
comando, o que consegui fazer.
Isso, para mim, indica claramente que o MCS não está funcionando como eu esperaria (permitindo acesso a objetos de uma determinada categoria apenas se o usuário que solicita o acesso tiver a mesma categoria).
Soluções?
Estou um pouco confuso agora e não sei onde reside o erro, por isso estou pedindo conselhos a vocês. Provavelmente é apenas uma suposição ou mal-entendido da minha parte, mas não consigo entender agora e não faz sentido para mim.A meu ver, existem as seguintes possibilidades:
1. Tenho que ativar manualmente as verificações do MCS ou usar uma política diferente
Não encontrei nenhuma informação sobre se preciso ativar manualmente o suporte MCS e, portanto, presumo que ele só funciona se eu atribuir rótulos (com base em [1]). Outra fonte [2] sugere que o MCS está habilitado novisadaspolítica em (pelo menos) Fedora e RHEL, da qual eu esperaria que não fosse diferente para CentOS.
2. Há uma configuração incorreta da minha parte
Posso ter cometido algum erro ao configurar as categorias de usuário semanage login
ou atribuir categorias ao arquivo.
3. Está quebrado
.. o que seria ruim
Links referenciados
0:https://selinux-mac.blogspot.de/2009/06/multi-category-security.html
1:https://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-mcs-getstarted.html
2:http://selinuxsymposium.org/2006/slides/08-mcs.pdf
sestatus
Saída completa
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 conforme o esperado. No momento, eu presumiria que há algum bug em relação ao MCS no SELinux no CentOS ou algumas alterações não documentadas na política/configuração que precisariam de ajustes. Ainda estou em dúvida sobre quais seriam os próximos passos sensatos para fazê-lo funcionar conforme o esperado.
Responder1
Aparentemente, houve uma mudança nas políticas do SELinux do CentOS6 para o CentOS7, de modo que as restrições MCS não são mais aplicadas a todos os tipos. Para que um determinado tipo adira ao MCS, o mcs_constrained_type
atributo deve ser adicionado a esse tipo por meio de uma política personalizada. Mais detalhes sobre como fazer isso (e quais tipos são restritos ao MCS por padrão (e por que)) podem ser encontrados em umpostagem no blog de Dan Walsh.