Как можно разрешить apache отправлять электронную почту?



У меня есть виртуальная машина CentOS 6.2 под управлением Apache 2.2 и PHP 5.3, с которой я пытаюсь отправлять электронную почту с помощью функции mail() PHP. Я могу отправлять электронную почту из CLI без проблем, но когда PHP пытается это сделать, он терпит неудачу. В журнале sendmail есть следующее:



Oct  9 11:42:03 localhost sendmail[3080]: NOQUEUE: SYSERR(apache): can not chdir(/var/spool/clientmqueue/): Permission denied


Похоже, что Apache не имеет разрешения на это, но я не уверен, как это исправить. Я нашел много дискуссий об этом, но ничего достаточно конкретного для того, что я делаю, что я мог бы использовать. Любая помощь была бы оцененный.
Спасибо!

820   5  

5 ответов:

Сначала вы должны проверить, правильно ли разрешение. Вот разрешение ниже в моей системе

# 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

Если ваши разрешения или права собственности неверны, измените их с помощью chown и chmod.

Если вышеизложенное верно, то отключите selinux или, если вы хотите, чтобы selinux был включен, используйте chcon для установки правильного контекста selinux.

Http://docs.fedoraproject.org/en-US/Fedora/13/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files.html

Для временного отключения selinux используйте #setenforce 0

Selinux может вызвать проблему, чтобы проверить запуск:

getsebool -a | grep mail

Если он отображается как ниже, то это selinux:

allow_postfix_local_write_mail_spool --> off

Вы можете отключить его, но если вы хотите сохранить его (и вы должны, поскольку он обеспечивает дополнительный уровень безопасности) , вы должны сделать что-то еще:

setsebool -P httpd_can_sendmail on

Это позволит httpd отправлять электронные письма, как при использовании php mail ().

Ненавижу некро это, но ни одно из решений здесь не сработало для меня. Я очень мало знаю о SELinux, но в итоге обнаружил проблему с этим (на CentOS 6):

getsebool httpd_can_sendmail

Который сказал мне, что он отключен. Исправлено с помощью

setsebool httpd_can_sendmail 1

Возможно, у вас включен SELinux.

Http://selinuxproject.org/page/Main_Page

Вы можете проверить состояние SELinux, выполнив:

Sestatus

Вы должны увидеть что-то вроде:

SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

Вы можете временно отключить SELinux через:

echo 0 >/selinux/enforce

И снова с

echo 1 >/selinux/enforce

Если вы делаете темп. выключите его, не устанавливайте RPM и не вносите изменений. Я считаю, что это может привести к проблемам с повторным включением его.

Если вы хотите навсегда отключить SELinux, затем попробуйте:

Https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-Enabling_and_Disabling_SELinux.html

getsebool -a | grep mail
allow_postfix_local_write_mail_spool --> off
setsebool -P httpd_can_sendmail on

Эта команда работает на меня.

Comments

    Ничего не найдено.