Adicionar aplicação ao SELinux sem desabilitá-lo
É comum na internet que quando se tenta rodar uma aplicação e se tem qualquer dificuldade relacionada ao SELinux a primeira sugestão é "desabilite o SELinux". Quando se faz uma pesquina na internet com a palavra selinux o que mais aparece é como desabilitar.
Isso não é recomendável pois ele possui vários recursos de segurança que são importantes e é um dos diferenciais que aumentam a fama de segurança do Linux.
O sistema é um pouco complicado realmente, mas não dá pra ficar sem.
Então vou demonstrar como permitir que um sistema em específico seja permitido.
O sistema utilizado como exemplo será o agente do Zabbix no Sistema Operacional CentOS 7.
O problema pode ser identificado quando instalamos o "zabbix-agent", efetuamos todas as configurações do "zabbix_agentd.conf" e tentamos coletar informações a partir do servidor Zabbix.
TESTANDO SE O PROBLEMA ESTÁ RELACIONADO AO SELINUX
No servidor Zabbix:
# zabbix_get -k system.uptime -s 10.0.0.60 zabbix_get [21773]: Get value error: cannot connect to [[10.0.0.60]:10050]: [113] No route to host
No Host a ser monitorado:
# getenforce Enforcing
* Se a resposta for "Permissive", pare por aqui pq seu problema é outro rsrs
# setenforce 0
No servidor Zabbix:
# zabbix_get -k system.uptime -s 10.0.0.60
1899549
Dessa forma concluímos que ao mudar a forma que o SELinux está tratando o zabbix_agent é que está impossibilitando a leitura de informações.
RESOLVENDO O PROBLEMA
No Host a ser monitorado:
# ausearch -c 'zabbix_agentd' --raw | audit2allow -M my-zabbixagentd # semodule -i my-zabbixagentd.pp
Onde:
ausearch -c 'zabbix_agentd' --raw -=> Ferramenta dos sistema de auditoria que procura por eventos ocorridos que tenham sido causados pelo binário, nesse caso, zabbix_agentd e retorna o conteúdo sem qualque formatação.
audit2allow -M my-zabbixagentd -=> Utiliza as informações geradas pelo comando anterior para criar um módulo permissivo para o SELinux.
semodule -i my-zabbixagentd.pp -=> Insere no SELinux o módulo criado pelo comando anterior.
Dessa forma foi inserido um módulo permissivo no SELinux fazendo com que o zabbix_agentd possa ter as permissões que ele precisa pra rodar. Não vi ainda quais são essas permissões exatamente mas estou considerando que o programa é confiável está em um ambiente seguro.
PS. não se esqueça de habilitar novamente o SELinux no host a ser monitorado usando o comando:
# setenforce 0
e testar com o comando zabbix_get.