私のシステム環境は、Centos-7.9、Apache2.4、Php-fpm、PHP-7.4です。
私は、Web サイトから電子メールを送信するための postfix を設定しており、これはスタンドアロンのテスト電子メールで動作し、SELinux をオフにしたときにも動作します。
ただし、SELinuxが有効になっている場合は、以下のエラーが表示され、サーバーからのメールの送信がブロックされます。 メールログ
postfix/sendmail[10883]: fatal: execv /usr/libexec/postfix/smtpd: Permission denied
私がする時
sudo setenforce 0
メールを送信しますが、SELinux をオフにしたくありません。ただし、Web アプリケーションがメールを送信するホワイトリストを許可したいと思います。以下を試しましたが、うまくいきませんでした。
sudo setsebool -P httpd_can_sendmail 1
この問題を解決する方法について何かアイデアはありますか?
答え1
php-fpm
これは、Apache の代わりにを使用する場合の RHEL 7.7 以降の既知のバグですmod_php
。CentOS 7.9 を使用している場合は、これが適用されます。
この問題の詳細については、Red Hat の Bugzilla をご覧ください。バグ報告
問題の解決策としては、まず SELinux を無効にするのが最も明白ですが、2 番目のオプションとして次の方法をお勧めします。
- パッケージをインストールする
policycoreutils-python
- および を使用して
audit2why
、 SELinux を有効にした状態で動作audit2allow
できるようにするカスタム ルールを作成しますphp-fpm
。 tail -f
をオンにして/var/log/audit/audit.log
、 からメール メッセージを送信してみますhttpd
。出力を取得して、 および にシードしますaudit2why
。audit2allow
説明は不要でしょう。- 両方のプログラムによって推奨されるルールを適用します。
httpd_t
3 番目の解決策は、このマシンに固有のカスタム ルールを作成したくない場合は、またはsystem_mail_t
( の出力に応じて) を permissive モードにすることですaudit2allow
。ただし、これを行うと、コンテキスト全体に対して SELinux が無効になることに注意してください。
これは次のコマンドで実行できます:semanage permissive -a httpd_t
またはsemanage permissive -a system_mail_t
。変更を元に戻すには、-a
に変更するだけです-d
。
答え2
ここで私がやることは
SELinuxをpermissiveモードにする
setenforce 0
監査ログをローテーションして、AVC拒否のよりクリーンなリストを取得します
kill -USR1 $(cat /run/auditd.pid)
問題が発生し、監査メッセージを生成する原因
ローカルポリシーモジュールを作成する
grep denied /var/log/audit/audit.log | audit2allow -m mypolicy >mypolicy.te
生成されたポリシー ファイルが期待どおりであり、不要な情報が漏れていないことを確認して、必要に応じて編集します。
ポリシーを作成してインストールする
checkmodule -M -m -o mypolicy.mod mypolicy.te
semodule_package -o mypolicy.pp -m mypolicy.mod
semodule -i mypolicy.pp
すべての AVC 拒否を別のファイルに入れて、解決しようとしている問題に関係のない拒否を削除してから、そのファイルでaudit2alowを使用する方が簡単かもしれません。その方がうまくいく場合は、中間の手順をスキップして、.pp ファイルに直接進むことができます。
cat myavcs.log | audit2allow -M mypolicy