SELinux - Web アプリケーションからの postfix メール送信をブロックします

SELinux - Web アプリケーションからの postfix メール送信をブロックします

私のシステム環境は、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 番目のオプションとして次の方法をお勧めします。

  1. パッケージをインストールするpolicycoreutils-python
  2. および を使用してaudit2why、 SELinux を有効にした状態で動作audit2allowできるようにするカスタム ルールを作成しますphp-fpm
  3. tail -fをオンにして/var/log/audit/audit.log、 からメール メッセージを送信してみますhttpd。出力を取得して、 および にシードしますaudit2whyaudit2allow説明は不要でしょう。
  4. 両方のプログラムによって推奨されるルールを適用します。

httpd_t3 番目の解決策は、このマシンに固有のカスタム ルールを作成したくない場合は、または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

関連情報