Apache2.2とPHP 5.3を実行しているCentOS6.2仮想マシンがPHPのmail()関数を介してメールを送信しようとしています。CLIからメールを問題なく送信できますが、= PHP試行すると失敗します。sendmailログには次のようになります:
Oct 9 11:42:03 localhost sendmail[3080]: NOQUEUE: SYSERR(Apache): can not chdir(/var/spool/clientmqueue/): Permission denied
Apacheにはこれを行う権限がないようですが、修正方法がわかりません。私はこれについて多くの議論を見つけましたが、私が使用できることについて十分に具体的なものは何もありません。どんな助けでもいただければ幸いです。ありがとう!
まず、許可が正しいかどうかを確認する必要があります。これが私のシステムでの以下の許可です
# 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コンテキストを設定します。
Selinuxを一時的に無効にするには、#setenforce 0
を使用します
Selinuxが問題を引き起こす可能性があり、実行を確認します。
getsebool -a | grep mail
以下のように表示される場合は、selinuxです。
allow_postfix_local_write_mail_spool --> off
無効にすることもできますが、それを維持したい場合(そして、セキュリティの追加レイヤーを提供するため、そうする必要があります)、別のことを行う必要があります。
setsebool -P httpd_can_sendmail on
これにより、php mail()を使用する場合と同様に、httpdが電子メールを送信できるようになります。
これを壊すのは嫌いですが、ここでの解決策はどれも私にはうまくいきませんでした。私は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を永続的に無効にしたい場合は、以下を試してください。
getsebool -a | grep mail
allow_postfix_local_write_mail_spool --> off
setsebool -P httpd_can_sendmail on
このコマンドは私のために働いています。