Ich besitze eine virtuelle CentOS 6.2-Maschine, auf der Apache 2.2 und PHP 5.3 ausgeführt werden und von der ich versuche, E-Mails über die mail () -Funktion von PHP zu senden. Ich kann ohne Probleme E-Mails über die CLI senden, aber wenn PHP es versucht, schlägt dies fehl. Im sendmail-Protokoll steht folgendes:
Oct 9 11:42:03 localhost sendmail[3080]: NOQUEUE: SYSERR(Apache): can not chdir(/var/spool/clientmqueue/): Permission denied
Es scheint, als ob Apache keine Berechtigung dazu hat, aber ich bin mir nicht sicher, wie ich das beheben soll. Ich habe viel darüber diskutiert, aber nichts Bestimmtes für das, was ich tue, das ich gebrauchen könnte. Jede Hilfe wäre dankbar. Vielen Dank!
Zuerst müssen Sie prüfen, ob die Berechtigung richtig ist. Hier ist die Erlaubnis unten in meinem System
# ls -l /usr/sbin/sendmail.sendmail
-r-xr-sr-x root smmsp /usr/sbin/sendmail.sendmail
# ls -l /var/spool/clientmqueue
drwxrwx--- smmsp smmsp /var/spool/clientmqueue
Wenn Ihre Berechtigungen oder der Besitz falsch sind, ändern Sie sie mit chown und chmod.
Wenn das Obige richtig ist, deaktivieren Sie Selinux oder wenn Sie möchten, dass Selinux aktiviert ist, verwenden Sie chcon, um den richtigen Selinux-Kontext festzulegen.
Zum vorübergehenden Deaktivieren von selinux verwenden Sie #setenforce 0
Selinux kann das Problem verursachen, um den Lauf zu überprüfen:
getsebool -a | grep mail
Wenn es unten angezeigt wird, ist es selinux:
allow_postfix_local_write_mail_spool --> off
Sie können es deaktivieren, aber wenn Sie es behalten möchten (und Sie sollten eine zusätzliche Sicherheitsebene bieten), sollten Sie etwas anderes tun:
setsebool -P httpd_can_sendmail on
Dadurch kann der httpd E-Mails senden, z. B. wenn Sie php mail () verwenden.
Ich hasse es, dies zu tun, aber keine der Lösungen hier hat für mich funktioniert. Ich weiß sehr wenig über SELinux, aber ich habe das Problem damit (unter CentOS 6) entdeckt:
getsebool httpd_can_sendmail
Was hat mir gesagt, dass es deaktiviert ist. Fixiert mit
setsebool httpd_can_sendmail 1
Möglicherweise haben Sie SELinux aktiviert.
http://selinuxproject.org/page/Main_Page
Sie können den SELinux-Status überprüfen, indem Sie Folgendes tun:
sestatus
Sie sollten etwas sehen wie:
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
Sie können SELinux vorübergehend ausschalten, indem Sie:
echo 0 >/selinux/enforce
und wieder mit
echo 1 >/selinux/enforce
Wenn Sie Temp. Deaktivieren Sie es, installieren Sie keine RPMs oder nehmen Sie keine Änderungen vor. Ich finde, dass dies zu Problemen bei der erneuten Aktivierung führen kann.
Wenn Sie SELinux dauerhaft deaktivieren möchten, versuchen Sie Folgendes:
getsebool -a | grep mail
allow_postfix_local_write_mail_spool --> off
setsebool -P httpd_can_sendmail on
Dieser Befehl funktioniert für mich.