audit2allowвероятно , генерирует правило для разрешения execheapдля container_tпроцесса типа. Вы всегда можете сначала сгенерировать модуль и проверить его, прежде чем загружать его.
Возможная проблема заключается в том, что теперь любому процессу с container_tтипом разрешена та же операция. Чтобы избежать этого, вам, возможно, потребуется создать собственный настраиваемый тип (используя container_tшаблон) и разрешить только execheapэтот специальный тип.
Этот пост в блоге Дэна Уолша объясняет, как написать такую специальную политику. Вы также можете комбинировать это с audit2allowгенерацией фактических правил. Основные шаги:
Создайте базовую контейнерную политику, например container_execheap:
policy_module(container_execheap, 1.0)
virt_sandbox_domain_template(container_execheap_t)
virt_sandbox_domain_templateмакрос создает новый тип container_execheap_tи создает необходимые правила для работы с докером, чтобы новый тип мог использоваться в качестве домена контейнера.
Скомпилируйте и загрузите модуль политики (необходимые файлы разработки, включая make-файл, должны быть предоставлены selinux-policy-develпакетом):
make -f /usr/selinux/devel/Makefile container_execheap.pp
semodule -i container_execheap.pp
Новый тип может быть настроен как разрешающий домен:
semanage permissive -a container_execheap_t
Для разрешающих доменов регистрируются отказы AVC, но правила не применяются. Таким образом, легко сгенерировать пропущенные правила позже, используя audit2allow.
Запустите свой контейнер в этом новом контексте, что-то вроде docker run ... --security-opt label:type:container_execheap_t ...
Генерация ожидаемых ошибок. Затем запустите audit2allowдля генерации правил, разрешающих эти операции container_execheap_t. Вы можете обновить тот же .teфайл модуля (не забудьте увеличить номер версии) новыми правилами. Скомпилируйте и установите обновленный модуль.
Когда больше ошибок не генерируется, переведите пользовательский тип контейнера обратно в принудительный режим semanage -d container_execheap.