SELinux — блокирует отправку писем Postfix из веб-приложения

SELinux — блокирует отправку писем Postfix из веб-приложения

Моя системная среда: Centos-7.9, Apache2.4, Php-fpm, PHP-7.4

У меня настроен Postfix для отправки писем с веб-сайта, который работает в автономных тестовых письмах и при отключении SELinux.

Однако если SELinux включен, он заблокирует отправку писем с сервера, выдавая следующую ошибку: /var/log/maillog

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

Когда я делаю

  sudo setenforce 0

Он отправляет письма, однако я не хочу отключать SELinux, но я хотел бы разрешить моему веб-приложению вносить отправку писем в белый список. Я попробовал ниже, но это не сработало

sudo setsebool -P httpd_can_sendmail 1

Есть идеи, как решить эту проблему?

решение1

Это известная ошибка RHEL 7.7 и выше при использовании php-fpmвместо Apache mod_php. Поскольку вы используете CentOS 7.9, это применимо.

Дополнительную информацию об этой проблеме можно найти на сайте Red Hat Bugzilla:http://bugzilla.redhat.com/show_bug.cgi?id=1754622

Что касается решения вашей проблемы, то первым и наиболее очевидным вариантом является отключение SELinux, но в качестве второго варианта я бы порекомендовал следующее:

  1. Установить пакетpolicycoreutils-python
  2. Используйте audit2whyи audit2allowдля создания пользовательских правил, позволяющих php-fpmработать с включенным SELinux.
  3. tail -fи /var/log/audit/audit.logпопробуйте отправить почтовое сообщение из httpd. Получите вывод и пропустите его через audit2whyи audit2allow. Это было бы само собой разумеющимся.
  4. Применяйте правила, рекомендуемые обеими программами.

Третье решение — перевести httpd_tили system_mail_t(в зависимости от вывода audit2allow) в разрешающий режим, если вы не хотите создавать специальные правила, специфичные для этой машины. Но имейте в виду, что, сделав это, вы отключите SELinux для всего контекста.

Это можно сделать с помощью следующей команды: semanage permissive -a httpd_tили semanage permissive -a system_mail_t. Чтобы отменить изменения, просто измените -aна -d.

решение2

Что бы я сделал здесь, так это

Переведите SELinux в разрешительный режим

setenforce 0

Повернуть журналы аудита, чтобы получить чистый список отказов AVC

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

Причина Возникновение проблемы и создание сообщений аудита

Создать модуль локальной политики

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

Проверьте, что сгенерированный файл политики выглядит так, как я ожидаю, и не «выдает» то, чего я не хочу, и отредактируйте его по мере необходимости.

Создать и установить политику

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

Вам может быть проще поместить все отказы AVC в отдельный файл, а затем удалить те, которые не относятся к проблеме, которую вы пытаетесь решить, прежде чем использовать audit2alow для файла. Если это работает лучше для вас, вы можете пропустить промежуточные шаги и перейти прямо к файлу .pp

cat myavcs.log | audit2allow -M mypolicy

Связанный контент