2012年9月6日木曜日

phpでメール送信するために(SELinux、httpd_can_sendmail)

VirtualBoxでCentOS6.2によるテスト用webサーバを構築してあるのだが、
今回phpでメール送信する仕組みを作った。
php自体はそもそも動くようにしてあったので、yumでphp-mbstringパッケージをインストールし、
mb_send_mail($to,$subject,$body,$header)を呼び出すだけ。
・・・だったはずだが、これがすんなり行かなかった。

・経緯
httpd(apache)からの実行でメールが送れない。
cliでの動作は正常。
apacheユーザ権限でもcli実行では正常。

この確認で、apache経由で実行することに問題がある事が分かった。

原因は単純で、SELinuxのhttpd_can_sendmail値がoffになっていたからだった。
getsebool httpd_can_sendmail
を実行すると、
httpd_can_sendmail --> {on|off}
が返ってくるので、offになってればroot権限で
setsebool -P httpd_can_sendmail 1
としてやれば良い。


ところでSELinuxには、どこぞの2getコピペのような印象を受ける・・・

/etc/selinux/config において

SELINUX=disabled

とすることについて

Linuxサーバを構築するにあたり、まずSELinuxを無効化するのが当たり前のように語られている風潮。
本来なら、しっかりとSELinuxについて学ぶべきじゃないのだろうか。
そういう観点で以って、setenforce 0 を確認時に使うのは良い。
だが安易に /etc/selinux/config を SELINUX=disabled にしてしまうのはどうだろう。
SELinux絡みの問題は確かに稀に頻繁に遭遇するが、そこに問題がある事が念頭に有れば、
ログを読みどこの設定が問題なのか特定できるはずである。
多少の問題解決の手間を面倒臭がった結果、より大きな問題に遭遇することになっては本末転倒である。
しかしリスクマネージメントの手間と運用性はトレードオフで、どこかで妥協する必要があるのは否めない。
以上を踏まえて、サーバに設定するべきは、

SELINUX=disabled

0 件のコメント:

コメントを投稿