設定如下:我請 MySQL 將表格轉儲到/tmp
(它們只包含數字,沒有實際資料)供 PHP 擷取和處理。此後,不再需要臨時文件,因此我使用 PHP ( unlink
) 刪除它們。
當然,SELinux 不喜歡這樣。我可以/tmp
很好地設定 MySQL 讀/寫,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
- 我
allow httpd_t mysqld_tmp_t:file unlink;
從第 2 步得到的,所以看起來和我想要的一模一樣。有了這個結果,我創建了一個新模組:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a -M tmp
.這會產生一個名為tmp.pp
. - 導入模組檔案:
semodule -i tmp.pp