SELinux - blockiert das Versenden von Postfix-E-Mails aus der Webanwendung

SELinux - blockiert das Versenden von Postfix-E-Mails aus der Webanwendung

Meine Systemumgebung ist Centos-7.9, Apache2.4, Php-fpm, PHP-7.4

Ich habe Postfix so eingerichtet, dass E-Mails von der Website gesendet werden. Dies funktioniert in eigenständigen Test-E-Mails und wenn ich SELinux ausschalte.

Wenn SELinux jedoch aktiviert ist, wird das Senden von E-Mails vom Server mit dem folgenden Fehler blockiert. /var/log/maillog

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

Wenn ich das tue

  sudo setenforce 0

Es sendet E-Mails, ich möchte SELinux jedoch nicht ausschalten, sondern meiner Web-Anwendung erlauben, das Senden von E-Mails auf eine Whitelist zu setzen. Ich habe es unten versucht, aber das hat nicht funktioniert

sudo setsebool -P httpd_can_sendmail 1

Irgendeine Idee, wie dieses Problem gelöst werden kann?

Antwort1

Dies ist ein bekannter Fehler bei RHEL 7.7 und höher, wenn php-fpmanstelle von Apache verwendet wird mod_php. Da Sie CentOS 7.9 verwenden, trifft dies zu.

Weitere Informationen zu diesem Problem finden Sie in Red Hats Bugzilla:http://bugzilla.redhat.com/show_bug.cgi?id=1754622

Die erste und naheliegendste Lösung für Ihr Problem besteht darin, SELinux zu deaktivieren. Als zweite Option würde ich jedoch Folgendes empfehlen:

  1. Installieren des Paketspolicycoreutils-python
  2. Verwenden Sie audit2whyund , audit2allowum benutzerdefinierte Regeln zu erstellen, um php-fpmdie Arbeit mit aktiviertem SELinux zu ermöglichen.
  3. tail -fan /var/log/audit/audit.logund versuchen Sie, eine E-Mail-Nachricht von zu senden httpd. Holen Sie sich die Ausgabe und geben Sie sie über audit2whyund ein audit2allow. Es wäre selbsterklärend.
  4. Wenden Sie die von beiden Programmen empfohlenen Regeln an.

Eine dritte Lösung wäre, httpd_toder system_mail_t(je nach Ausgabe von audit2allow) in den permissiven Modus zu versetzen, wenn Sie keine benutzerdefinierten Regeln speziell für diese Maschine erstellen möchten. Bedenken Sie jedoch, dass Sie dadurch SELinux für einen gesamten Kontext deaktivieren.

Dies geschieht mit dem folgenden Befehl: semanage permissive -a httpd_toder semanage permissive -a system_mail_t. Um die Änderungen rückgängig zu machen, ändern Sie einfach -azu -d.

Antwort2

Was ich hier tun würde, ist

Setzen Sie SELinux in den permissiven Modus

setenforce 0

Rotiere die Auditd-Protokolle, damit ich eine saubere(re) Liste der AVC-Ablehnungen bekomme

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

Ursache Das Problem tritt auf und generiert Prüfmeldungen

Erstellen eines lokalen Richtlinienmoduls

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

Überprüfen Sie, ob die generierte Richtliniendatei meinen Erwartungen entspricht und nichts preisgibt, was ich nicht möchte, und nehmen Sie ggf. Änderungen vor.

Erstellen und Installieren der Richtlinie

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

Möglicherweise ist es einfacher, alle AVC-Ablehnungen in eine separate Datei zu packen und dann diejenigen zu entfernen, die nichts mit dem Problem zu tun haben, das Sie lösen möchten, bevor Sie audit2alow auf die Datei anwenden. Wenn das für Sie besser funktioniert, können Sie die Zwischenschritte überspringen und direkt zur .pp-Datei gehen.

cat myavcs.log | audit2allow -M mypolicy

verwandte Informationen