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-fpm
anstelle 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:
- Installieren des Pakets
policycoreutils-python
- Verwenden Sie
audit2why
und ,audit2allow
um benutzerdefinierte Regeln zu erstellen, umphp-fpm
die Arbeit mit aktiviertem SELinux zu ermöglichen. tail -f
an/var/log/audit/audit.log
und versuchen Sie, eine E-Mail-Nachricht von zu sendenhttpd
. Holen Sie sich die Ausgabe und geben Sie sie überaudit2why
und einaudit2allow
. Es wäre selbsterklärend.- Wenden Sie die von beiden Programmen empfohlenen Regeln an.
Eine dritte Lösung wäre, httpd_t
oder 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_t
oder semanage permissive -a system_mail_t
. Um die Änderungen rückgängig zu machen, ändern Sie einfach -a
zu -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