Вот настройка: я позволяю MySQL выгружать таблицы /tmp
(они содержат только числа, никаких реальных данных), чтобы PHP мог их подобрать и обработать. После этого временные файлы больше не нужны, поэтому я удаляю их с помощью PHP ( unlink
).
Конечно, SELinux это не нравится. Я могу настроить /tmp
MySQL на чтение/запись и PHP на чтение/запись из него, но когда PHP хочет удалить файл, созданный MySQL, он не может. Я думал, что это может быть связано с 'sticky bit' на /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