设置如下:我让 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