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-fpm
en 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:
- Instalar el paquete
policycoreutils-python
- Utilice
audit2why
yaudit2allow
para crear reglas personalizadas para permitirphp-fpm
trabajar con SELinux habilitado. tail -f
encendido/var/log/audit/audit.log
e intente enviar un mensaje de correo desdehttpd
. Obtenga el resultado y siémbrelo a través deaudit2why
yaudit2allow
. Se explicaría por sí mismo.- Aplicar las reglas aconsejadas por ambos programas.
Una tercera solución sería poner httpd_t
o 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_t
o semanage permissive -a system_mail_t
. Para deshacer los cambios simplemente cambie -a
a -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