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

相关内容