SELinux: bloquea el envío de correos electrónicos de Postfix desde la aplicación web

SELinux: bloquea el envío de correos electrónicos de Postfix desde la aplicación web

El entorno de mi sistema es Centos-7.9, Apache2.4, Php-fpm, PHP-7.4

Tengo una configuración de Postfix para enviar correos electrónicos desde el sitio web, que funciona en correos electrónicos de prueba independientes y cuando apago SELinux.

Sin embargo, si SELinux está habilitado, bloqueará el envío de correos electrónicos desde el servidor con el siguiente error en el /var/log/maillog

 postfix/sendmail[10883]: fatal: execv /usr/libexec/postfix/smtpd: Permission denied

Cuando lo hago

  sudo setenforce 0

Envía correos electrónicos, sin embargo, no quiero desactivar SELinux, pero me gustaría permitir que mi aplicación web incluya el envío de correos electrónicos en la lista blanca. Lo intenté a continuación pero no funcionó.

sudo setsebool -P httpd_can_sendmail 1

¿Alguna idea sobre cómo resolver este problema?

Respuesta1

Este es un error conocido con RHEL 7.7 y actualizado cuando se usa php-fpmen lugar de Apache mod_php. Dado que estás en CentOS 7.9, se aplica.

Puede leer más sobre el problema en Bugzilla de Red Hat:http://bugzilla.redhat.com/show_bug.cgi?id=1754622

En cuanto a una solución para su problema, la primera y más obvia es deshabilitar SELinux, pero como segunda opción, recomendaría lo siguiente:

  1. Instalar el paquetepolicycoreutils-python
  2. Utilice audit2whyy audit2allowpara crear reglas personalizadas para permitir php-fpmtrabajar con SELinux habilitado.
  3. tail -fencendido /var/log/audit/audit.loge intente enviar un mensaje de correo desde httpd. Obtenga el resultado y siémbrelo a través de audit2whyy audit2allow. Se explicaría por sí mismo.
  4. Aplicar las reglas aconsejadas por ambos programas.

Una tercera solución sería poner httpd_to system_mail_t(dependiendo del resultado de audit2allow) en modo permisivo si no desea crear reglas personalizadas específicas para esta máquina. Pero tenga en cuenta que al hacer esto deshabilitará SELinux en todo un contexto.

Eso se haría con el siguiente comando: semanage permissive -a httpd_to semanage permissive -a system_mail_t. Para deshacer los cambios simplemente cambie -aa -d.

Respuesta2

Lo que haría aquí es

Poner SELinux en modo permisivo

setenforce 0

Rote los registros auditados para obtener una lista (más) limpia de denegaciones de AVC

kill -USR1 $(cat /run/auditd.pid) 

Causa El problema ocurre y genera mensajes de auditoría.

Crear un módulo de política local

grep denied /var/log/audit/audit.log | audit2allow -m mypolicy >mypolicy.te 

Verifique que el archivo de política generado tenga el aspecto esperado y no "revele" cosas que no quiero y edítelo según sea necesario.

Crear e instalar la política.

checkmodule -M -m -o mypolicy.mod mypolicy.te
semodule_package -o mypolicy.pp -m mypolicy.mod
semodule -i mypolicy.pp 

Puede que le resulte más fácil colocar todas las denegaciones de AVC en un archivo separado y luego eliminar las que no se relacionan con el problema que está intentando resolver antes de usar audit2alow en el archivo. Si eso funciona mejor para usted, puede omitir los pasos intermedios e ir directamente al archivo .pp.

cat myavcs.log | audit2allow -M mypolicy

información relacionada