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
.