Назад | Перейти на главную страницу

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

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

Конечно, SELinux этого не любит. Я могу настроить /tmp нормально для MySQL для чтения / записи и PHP для чтения / записи из него, но когда PHP хочет удалить файл, созданный MySQL, он не может. Я подумал, что это может быть связано с "липким кусочком" на /tmp, но это не имеет значения.

Я не могу найти правильного решения этой проблемы, большинство решений касается вопроса о том, чтобы сделать каталоги доступными для чтения / записи для PHP (или для пользователя httpd), а не для удаления чужих файлов.

Кстати: если я выключу SELinux, PHP удалит файлы без проблем. Так что это определенно то, что я должен изменить с точки зрения SELinux, но что было бы лучше всего?

Согласно моему комментарию: я решил это, используя 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