SELinux - bloqueia o envio de e-mails postfix do aplicativo Web

SELinux - bloqueia o envio de e-mails postfix do aplicativo Web

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-fpmem 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:

  1. Instale o pacotepolicycoreutils-python
  2. Use audit2whye audit2allowpara criar regras personalizadas para permitir php-fpmtrabalhar com o SELinux habilitado.
  3. tail -f/var/log/audit/audit.loge tente enviar uma mensagem de e-mail de httpd. Obtenha a saída e propague-a por meio de audit2whye audit2allow. Seria autoexplicativo.
  4. Aplique as regras recomendadas por ambos os programas.

Uma terceira solução seria colocar httpd_tor 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_tou semanage permissive -a system_mail_t. Para desfazer as alterações basta alterar -apara -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

informação relacionada