У меня есть приложение, которое отправляет задачи в облачные службы, которые создают определенные временные активы. Для обработки сервисов требуется неизвестное количество времени, и, кроме того, в будущем может быть запланировано еще большее обнародование активов, поэтому мне нужно подождать, пока обработка будет завершена, и, возможно, дольше после этого, пока актив не станет публичным. ". На этом этапе мне нужно очистить некоторые кеши, чтобы актив стал видимым.
Облачным службам может быть передан URL-адрес обратного вызова, чтобы они могли уведомить меня о завершении обработки. Я создал веб-сервис на CentOS 7 Apache, который обрабатывает обратные вызовы. (К вашему сведению: веб-сервис реализован на Ruby с использованием Passenger Phusion, поверх него установлена стойка.)
Моя идея заключалась в том, чтобы настроить систему обратного вызова. at
задание по очистке кешей, если актив был обработан, но еще не стал общедоступным.
Проблема в том, что SELinux не позволяет Apache планировать at
работа. Используя audit2allow, я добавил следующие модули на основе неудачных операций, зарегистрированных в audit.log.
ausearch -c 'unix_chkpwd' --raw | audit2allow -M my-unixchkpwd
semodule -i my-unixchkpwd.pp
ausearch -c 'at' --raw | audit2allow -M my-at
semodule -i my-at.pp
ausearch -c 'lspci' --raw | audit2allow -M my-lspci
semodule -i my-lspci.pp
В результате сейчас нет сбои регистрируются в audit.log, но at
команда по-прежнему не работает.
Когда принудительное исполнение включено, единственное, что я вижу в / var / log / messages:
at: Системная ошибка
Кроме того, стандартная ошибка at
команда производит:
Ошибка PAM: системная ошибка
Но если я setenforce 0
все работает отлично.
Так что даже если это должен быть SELinux, который предотвращает at
задание не было запланировано, похоже, нет никакого способа сообщить ему, чтобы Apache мог это сделать.
На данный момент мне нужно написать две разные программы: одну для работы с общедоступными активами сразу после их создания, а другую - для работы с активами, запланированными на известное время в будущем. Если мне нужно обрабатывать произвольно запланированные активы, мне придется реализовать свою собственную версию at
планировщик. По возможности хотелось бы избежать подобных осложнений.
Любые идеи относительно того, как узнать, против чего возражает SELinux, будут оценены (также любые предложения относительно того, как это можно реализовать без использования at
).