いろいろ悪名高き(?)SELinuxちゃんですが、意外と何をすれば解決できるかをログに書いてくれていて「あ、共存(setenforce 0しなくても)できそう」と思ったのでメモしておく。
今回の環境(関係ありそうなもの)
- Fedora 19
- httpd 2.4.6
- postfix 2.10.2
- selinux-policy 3.12.1
今回の嵌まり
- phpに外部からアクセスした際、mail関数でメールが送れなかった
- sendmailコマンドでターミナルからは送れる
- phpコマンドでターミナルからも送れる
- ログ見ると普通のアクセス権は問題ないのに、/etc/postfix/main.cf が Permission deniedになってしまっていた
- ググるとSELinuxが邪魔していることが判明
- しかし、いくらググっても良さげな解答事例がなかった
リポジトリがおかしいのか、それともこれが仕様なのか、はたまた自分でいつの間にかぶっ壊したのかわからないけど、なるべく簡単にポリシーに加える事を目標に頑張った。
/var/log/maillog には/etc/postfix/main.cf Permission denied としか書いていないのでアクセス権を見てしまうがそこは問題なかった。なので /var/log/messagesを見ると、 setroubleshoot: SELinux is preventing /usr/sbin/sendmail.postfix from read access on the file /etc/postfix/main.cf. For complete SELinux messages. run sealert -l hogehoge-fugafuga-piyopiyo と書かれている。
rootで sealert -l hogehoge-fugafuga-piyopiyo すると詳細情報が見られる。
If httpd が、メール送信することを、許可したい
Then これを許可するには、SELinux を設定しなければいけません
Do
setsebool -P httpd_can_sendmail=1
ということなので、rootで setsebool -P httpd_can_sendmail=1 をやってあげておしまい。
教訓
ログ見よう。ログ読もう。さすれば解は得られる。(こともあるかも?)