这是设置:我让 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