SELinux: httpd が MySQL から一時ファイルを削除できるようにするにはどうすればよいでしょうか?

SELinux: httpd が MySQL から一時ファイルを削除できるようにするにはどうすればよいでしょうか?

設定は次のとおりです。MySQL でテーブルをダンプし(実際のデータは含まれず、数字のみが含まれます)、PHP で取得して処理できるようにします。この後、一時ファイルは不要になったため、PHP ( )/tmpを使用して削除します。unlink

もちろん、SELinux はこれを好みません。MySQL/tmpが読み取り/書き込みできるように設定し、PHP がそこから読み取り/書き込みできるように設定することはできますが、PHP が MySQL が作成したファイルを削除しようとすると、削除できません。 の「スティッキー ビット」が関係しているのではないかと考えました/tmpが、違いはありません。

この問題の適切な解決策が本当に見つかりません。ほとんどの解決策は、他のユーザーのファイルを削除するのではなく、ディレクトリを PHP (または、httpd ユーザー) が読み取り/書き込みできるようにするという問題に対処しています。

ところで、SELinux をオフにすると、PHP は問題なくファイルを削除します。したがって、SELinux に関しては間違いなく変更する必要があるのですが、最善のアプローチは何でしょうか?

答え1

私のコメントの通り、 を活用して解決しましたaudit2allow

  1. 問題のあるルールをスキャンします/var/log/audit/audit.log(MySQL が書き込んだファイルのファイル名を使用しました)
  2. ルールをパイプしaudit2allowて確認します。grep {offending rule name} /var/log/audit/audit.log | audit2allow -a
  3. ステップ 2 から取得したものはallow httpd_t mysqld_tmp_t:file unlink;、まさに私が求めていたもののようです。その結果を使用して、新しいモジュールを作成しました: grep {offending rule name} /var/log/audit/audit.log | audit2allow -a -M tmp。これにより、 というファイルが生成されますtmp.pp
  4. モジュール ファイルをインポートします。semodule -i tmp.pp

関連情報