SELinux:如何允許httpd從MySQL刪除臨時檔案?

SELinux:如何允許httpd從MySQL刪除臨時檔案?

設定如下:我請 MySQL 將表格轉儲到/tmp(它們只包含數字,沒有實際資料)供 PHP 擷取和處理。此後,不再需要臨時文件,因此我使用 PHP ( unlink) 刪除它們。

當然,SELinux 不喜歡這樣。我可以/tmp很好地設定 MySQL 讀/寫,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. 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

相關內容