SELinux: как разрешить httpd удалять временные файлы из MySQL?

SELinux: как разрешить httpd удалять временные файлы из MySQL?

Вот настройка: я позволяю MySQL выгружать таблицы /tmp(они содержат только числа, никаких реальных данных), чтобы PHP мог их подобрать и обработать. После этого временные файлы больше не нужны, поэтому я удаляю их с помощью PHP ( unlink).

Конечно, SELinux это не нравится. Я могу настроить /tmpMySQL на чтение/запись и PHP на чтение/запись из него, но когда PHP хочет удалить файл, созданный MySQL, он не может. Я думал, что это может быть связано с 'sticky bit' на /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

Связанный контент