
設定は次のとおりです。MySQL でテーブルをダンプし(実際のデータは含まれず、数字のみが含まれます)、PHP で取得して処理できるようにします。この後、一時ファイルは不要になったため、PHP ( )/tmp
を使用して削除します。unlink
もちろん、SELinux はこれを好みません。MySQL/tmp
が読み取り/書き込みできるように設定し、PHP がそこから読み取り/書き込みできるように設定することはできますが、PHP が MySQL が作成したファイルを削除しようとすると、削除できません。 の「スティッキー ビット」が関係しているのではないかと考えました/tmp
が、違いはありません。
この問題の適切な解決策が本当に見つかりません。ほとんどの解決策は、他のユーザーのファイルを削除するのではなく、ディレクトリを PHP (または、httpd ユーザー) が読み取り/書き込みできるようにするという問題に対処しています。
ところで、SELinux をオフにすると、PHP は問題なくファイルを削除します。したがって、SELinux に関しては間違いなく変更する必要があるのですが、最善のアプローチは何でしょうか?
答え1
私のコメントの通り、 を活用して解決しましたaudit2allow
。
- 問題のあるルールをスキャンします
/var/log/audit/audit.log
(MySQL が書き込んだファイルのファイル名を使用しました) - ルールをパイプし
audit2allow
て確認します。grep {offending rule name} /var/log/audit/audit.log | audit2allow -a
- ステップ 2 から取得したものは
allow httpd_t mysqld_tmp_t:file unlink;
、まさに私が求めていたもののようです。その結果を使用して、新しいモジュールを作成しました:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a -M tmp
。これにより、 というファイルが生成されますtmp.pp
。 - モジュール ファイルをインポートします。
semodule -i tmp.pp