Meu ambiente de sistema é Centos-7.9, Apache2.4, Php-fpm, PHP-7.4
Tenho configuração do postfix para enviar e-mails do site, que está funcionando em e-mails de teste independentes e quando desligo o SELinux.
No entanto, se o SELinux estiver habilitado, ele bloqueará o envio de e-mails do servidor com o erro abaixo no /var/log/maillog
postfix/sendmail[10883]: fatal: execv /usr/libexec/postfix/smtpd: Permission denied
Quando eu faço
sudo setenforce 0
Ele envia e-mails, no entanto, não quero desligar o SELinux, mas gostaria de permitir que meu aplicativo da Web coloque o envio de e-mails na lista branca. tentei abaixo mas não funcionou
sudo setsebool -P httpd_can_sendmail 1
Alguma idéia de como resolver esse problema?
Responder1
Este é um bug conhecido do RHEL 7.7 e up ao usar php-fpm
em vez do Apache mod_php
. Como você está no CentOS 7.9, isso se aplica.
Você pode ler mais sobre o problema no Bugzilla da Red Hat:http://bugzilla.redhat.com/show_bug.cgi?id=1754622
Quanto à solução para o seu problema, a primeira e mais óbvia é desabilitar o SELinux, mas como segunda opção, recomendo o seguinte:
- Instale o pacote
policycoreutils-python
- Use
audit2why
eaudit2allow
para criar regras personalizadas para permitirphp-fpm
trabalhar com o SELinux habilitado. tail -f
/var/log/audit/audit.log
e tente enviar uma mensagem de e-mail dehttpd
. Obtenha a saída e propague-a por meio deaudit2why
eaudit2allow
. Seria autoexplicativo.- Aplique as regras recomendadas por ambos os programas.
Uma terceira solução seria colocar httpd_t
or system_mail_t
(dependendo da saída de audit2allow
) no modo permissivo se você não quiser criar regras personalizadas específicas para esta máquina. Mas lembre-se de que ao fazer isso você desabilitará o SELinux para um contexto inteiro.
Isso seria feito com o seguinte comando: semanage permissive -a httpd_t
ou semanage permissive -a system_mail_t
. Para desfazer as alterações basta alterar -a
para -d
.
Responder2
O que eu faria aqui é
Coloque o SELinux em modo permissivo
setenforce 0
Gire os logs auditd para obter uma lista mais limpa de negações de AVC
kill -USR1 $(cat /run/auditd.pid)
Causa O problema ocorre e gera mensagens de auditoria
Crie um módulo de política local
grep denied /var/log/audit/audit.log | audit2allow -m mypolicy >mypolicy.te
Verifique se o arquivo de política gerado tem a aparência que eu esperava e não 'revela' coisas que eu não quero e edite conforme necessário.
Criar e instalar a política
checkmodule -M -m -o mypolicy.mod mypolicy.te
semodule_package -o mypolicy.pp -m mypolicy.mod
semodule -i mypolicy.pp
Talvez seja mais fácil colocar todas as negações do AVC em um arquivo separado e, em seguida, remover aquelas que não estão relacionadas ao problema que você está tentando resolver antes de usar audit2alow no arquivo. Se isso funcionar melhor para você, você pode pular as etapas intermediárias e ir direto para o arquivo .pp
cat myavcs.log | audit2allow -M mypolicy