O
SELinux provê ao
Linux uma arquitetura de controle de acesso mandatório robusta e flexível na maioria dos subsistemas do kernel.
Traduzindo de forma bem simplista, o SELinux é para o Linux o que um firewall é para uma rede. Da memsa forma que o firewall controla o que sai e o que entra em uma rede, o SELinux controla o que cada processo pode fazer dentro do sistema operacional.
Na prática, o SELinux pode fazer coisas como, por exemplo, impedir que até mesmo o usuário root ou determinado processo do sistema possa excluir, modificar ou até mesmo visualizar determinado arquivo ou diretório, e não preciso dizer que isso é um recurso extraordinário de segurança.
No Fedora e nas distribuições derivadas dele (como Red Hat e CentOS) o SELinux é habilitado por padrão utilizando o modo reforçado (enforced). Esse modo, extremamente restritivo, oferece um alto nível de segurança ao sistema e é altamente recomendado para servidores corporativos ou estações de trabalho em que se deseje diminuir as chances de desastre por falha humana. Para aprender a usar a SELinux, é util utilizar o modo permissivo (permissive), onde a SELinux fica inativa, porém emitindo alertas como se estivesse atuando.
Ao habilitar o nível reforçado no SELinux, alguns acessos que não deveriam ser negados o serão, impedindo que alguns processos sejam executados corretamente. Um exemplo é o ldconfig, que cria os links e o cache das bibliotecas do sistema e precisa ser executado sempre que uma nova biblioteca é adicionada ou removida ao sistema. Com o SELinux habilitado e no modo reforçado, o acesso a qualquer biblioteca que não tenha sido instalada a partir de um RPM oficial será negado ao ldconfig e a outros processos.
Para resolver o problema, primeiro excluímos todos os logs do utilitário audit:
# rm -f /var/log/audit/*
Em seguida, executamos o ldconfig, para gerar as mensagens de erro do SELinux:
# ldconfig
Agora, utilizaremos o utilitário audit2allow, que transforma mensagens de erro do audit em regras permissivas do SELinux:
# audit2allow -M local < /var/log/audit/audit.log
Será gerado um arquivo local.pp com as regras para o SELinux, que devemos carregar com o comando:
# semodule -i local.pp
Se tudo tiver sido executado corretamente, uma nova execução do ldconfig ocorrerá sem erros.
Usando o utilitário de solução de problemas SELinux (Sistema / Administração / Solução de Problemas SELinux) é possível saber como resolver boa parte dos seus problemas. Isso porque, para cada erro acusado, é mostrada uma solução em "Allowing Access". Através dessa sessão foi possível para mim resolver os problemas de acesso a algumas bibliotecas do VirtualBox, que estavam impedindo que ele fosse executado.