Linux

SELinux:如何允許 httpd 從 MySQL 中刪除臨時文件?

  • March 12, 2018

這是設置:我讓 MySQL 將表轉儲到/tmp(它們只包含數字,沒有真實數據)供 PHP 拾取和處理。此後,不再需要臨時文件,因此我使用 PHP ( unlink) 將其刪除。

當然,SELinux 不喜歡這樣。我可以/tmp很好地設置 MySQL 讀取/寫入,PHP 從中讀取/寫入,但是當 PHP 想要刪除 MySQL 創建的文件時,它不能。我認為這可能與 ‘sticky bit’ 上的有關/tmp,但這沒有什麼區別。

對於這個問題,我真的找不到合適的解決方案,大多數解決方案都解決了使目錄對 PHP(或 httpd 使用者)可讀/可寫的問題,而不是刪除其他人的文件。

順便說一句:如果我關閉 SELinux,PHP 將毫無問題地刪除文件。所以這絕對是我必須改變 SELinux 的事情,但最好的方法是什麼?

根據我的評論:我通過利用audit2allow.

  1. 掃描/var/log/audit/audit.log違規規則(我使用 MySQL 寫入的文件的文件名)
  2. 將規則傳送到audit2allow並查看它:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a
  3. 我是allow httpd_t mysqld_tmp_t:file unlink;從第 2 步得到的,所以看起來和我想要的完全一樣。有了這個結果,我創建了一個新模組:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a -M tmp. 這會生成一個名為tmp.pp.
  4. 導入模組文件:semodule -i tmp.pp

引用自:https://serverfault.com/questions/901114