Моя системная среда: 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, но в качестве второго варианта я бы порекомендовал следующее:
- Установить пакет
policycoreutils-python
- Используйте
audit2why
иaudit2allow
для создания пользовательских правил, позволяющихphp-fpm
работать с включенным SELinux. tail -f
и/var/log/audit/audit.log
попробуйте отправить почтовое сообщение изhttpd
. Получите вывод и пропустите его черезaudit2why
иaudit2allow
. Это было бы само собой разумеющимся.- Применяйте правила, рекомендуемые обеими программами.
Третье решение — перевести 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