Linux
SELinux:如何允許 httpd 從 MySQL 中刪除臨時文件?
這是設置:我讓 MySQL 將表轉儲到
/tmp
(它們只包含數字,沒有真實數據)供 PHP 拾取和處理。此後,不再需要臨時文件,因此我使用 PHP (unlink
) 將其刪除。當然,SELinux 不喜歡這樣。我可以
/tmp
很好地設置 MySQL 讀取/寫入,PHP 從中讀取/寫入,但是當 PHP 想要刪除 MySQL 創建的文件時,它不能。我認為這可能與 ‘sticky bit’ 上的有關/tmp
,但這沒有什麼區別。對於這個問題,我真的找不到合適的解決方案,大多數解決方案都解決了使目錄對 PHP(或 httpd 使用者)可讀/可寫的問題,而不是刪除其他人的文件。
順便說一句:如果我關閉 SELinux,PHP 將毫無問題地刪除文件。所以這絕對是我必須改變 SELinux 的事情,但最好的方法是什麼?
根據我的評論:我通過利用
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