2012-10-09 12 views
9

Mam wirtualną maszynę CentOS 6.2 z Apache 2.2 i PHP 5.3, którą próbuję wysłać pocztą elektroniczną za pośrednictwem funkcji mail() PHP. Mogę wysyłać e-maile z CLI bez problemów, ale gdy PHP spróbuje, to się nie uda. W dzienniku sendmaila jest:W jaki sposób apache może wysyłać wiadomości e-mail?

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

Wygląda na to, że Apache nie ma uprawnień, aby to zrobić, ale nie jestem pewien, jak to naprawić. Znalazłem wiele dyskusji na ten temat, ale nic konkretnego do tego, co robię, że mógłbym użyć. Każda pomoc będzie doceniona. Dzięki!

+2

Jak próbujesz wysłać tę wiadomość e-mail? Apache nie powinien nigdy potrzebować chdir do katalogów szpulki pocztowej - powinien po prostu mówić do lokalnego MTA poczty. –

+0

Sprawdź to rozwiązanie: http://forums.freebsd.org/showthread.php?t=32273 –

Odpowiedz

4

Najpierw trzeba sprawdzić, czy pozwolenie są poprawne. Oto pozwolenie poniżej w moim systemie

# 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

Jeśli twoje uprawnienia lub własność jest źle następnie zmienić za pomocą chown i chmod.

Jeśli powyższe jest prawidłowe, wyłącz selinux lub jeśli chcesz włączyć selinux, użyj chcon, aby ustawić poprawny kontekst 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

Dla wyłączenie SELinux tymczasowo użyć #setenforce 0

+1

To był SELinux. Teraz działa! Dzięki! –

+1

Nie wyłączaj SELinux :(Istnieje boolean 'httpd_can_sendmail' pozwalający serwerowi WWW wysyłać pocztę, która powinna działać w tym przypadku.Ustaw to za pomocą' setsebool -P httpd_can_sendmail 1' i dołącz opcję '-P' do sprawiają, że jest on trwały po ponownym uruchomieniu. –

1

Być może masz włączone SELinux.

http://selinuxproject.org/page/Main_Page

Można sprawdzić stan SELinux wykonując:

sestatus

Powinieneś zobaczyć coś takiego:

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

Można włączyć SELinux wyłączyć tymczasowo poprzez:

echo 0 >/selinux/enforce 

i ponownie z

echo 1 >/selinux/enforce 

Jeśli do temp. wyłącz go, nie instaluj RPM ani nie wprowadzaj zmian. Uważam, że może to prowadzić do problemów z ponownym włączeniem go.

Jeśli chcesz na stałe wyłączyć program SELinux, a następnie spróbuj:

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

+0

Dzięki za te informacje! –

28

SELinux może być przyczyną problemu, aby zweryfikować Run:

getsebool -a | grep mail 

Jeśli wyświetla jak poniżej jest SELinux:

allow_postfix_local_write_mail_spool --> off 

Możesz go wyłączyć, ale jeśli chcesz zachować go (i zalecana, gdyż zapewnia dodatkową warstwę zabezpieczeń) należy zrobić coś innego:

setsebool -P httpd_can_sendmail on 

pozwoli to httpd do wysyłania e-maili, jak podczas korzystania z poczty php().

+4

-P opcja sprawi, że będzie trwała, więc po ponownym uruchomieniu będzie ponownie włączona :) – VSB

+2

Użyłem tylko "setsebool -P httpd_can_sendmail on" i rozwiązałem problem. Dzięki – PookPook

11

Nienawidzę tego, ale żadne z rozwiązań tutaj nie działało. Wiem bardzo mało o SELinux, ale skończyło się na odkrywaniu problem z tym (na CentOS 6):

getsebool httpd_can_sendmail 

Który powiedział mi, że to wyłączone. Naprawiono:

setsebool httpd_can_sendmail 1 
+0

Pracował pięknie - dzięki za wysyłkę. – daveywc

+0

To zadziałało dla mnie na centos –

+0

Jesteś zbawicielem .. Dzięki .. –

Powiązane problemy