Seu primeiro módulo tem um problema: o usuário root em unconfined_t ainda tem permissões e regras em vigor, permitindo modificações na política do selinux. Sua política personalizada aplica apenas novas transições automáticas para semanage_exec_t para user_t . O processo no domínio user_t não pode modificar a política, portanto, semodule
, semanage
, etc. falha. No entanto, qualquer programa no domínio não confinado ainda pode modificar a política. Além disso, o root poderia apenas rotular novamente os binários com rótulo semanage_exec_t para qualquer tipo não confinado para executá-los.
Seu segundo módulo de política não faz nada porque as regras nunca permitir são compiladas verificado e não resultar em nenhuma regra na política compilada. Você não pode usar neverallow para remover / blacklists regras já incluídas na política carregada (e não há uma declaração deny na linguagem de política do SELinux que você possa usar dessa maneira) .
A compilação de diretivas deve emitir um erro e falhar se houver regras allow allow e neverallow . De acordo com a documentação , as regras neverallow podem ser usadas em módulos de política, mas para as verificações para serem efetivas expand-check
devem ser definidas como 1 em semanage.conf
(possivelmente a razão pela qual seu módulo foi compilado com sucesso).
Algumas maneiras de abordar seu problema para impedir modificações na política carregada do SELinux:
-
Use
secure_mode_policyload
booleano:Boolean to determine whether the system permits loading policy, setting enforcing mode, and changing boolean values.
Da mesma forma,
secure_mode_insmod
booleano impedirá o carregamento adicional módulos do kernel. Estes booleanos não podem ser desligados no sistema em execução, uma vez ligado (reinicialização necessária para desligar). -
Configure usuários para domínios mais confinados (como user_t ), que não permite modificar a política carregada. Mudar para root com
su
/sudo
não será elevado para o usuário SELinux mais privilegiado e manterá as mesmas restrições impostas pelo SELinux. -
Crie seu próprio usuário do SELinux. Você pode basear-se em um usuário do SELinux fornecido pela sua distribuição (faça o download das fontes de política da sua distribuição). Você provavelmente deve considerar usar algum usuário confinado como modelo em vez de usuário não confinado e apenas adicionar permissões necessárias para permitir a não concessão de permissões excessivamente amplas.
Além disso, se você só precisa conceder acesso limitado (transições / regras), pode escrever um módulo de política que conceda o acesso necessário ao usuário limitado.