audit2allow
有可能产生一个规则,以允许execheap
进行container_t
型工艺。在加载模块之前,始终可以先生成模块并进行检查。
一个可能的问题是,现在任何container_t
类型的进程现在都可以进行相同的操作。为避免这种情况,您可能需要创建自己的自定义类型(container_t
用作模板),并且仅允许execheap
这种特殊类型。
Dan Walsh的这篇博客文章介绍了如何编写此类自定义策略。您也可以将其与之结合audit2allow
以生成实际规则。基本步骤是:
创建一个基本的容器策略,例如container_execheap
:
policy_module(container_execheap, 1.0)
virt_sandbox_domain_template(container_execheap_t)
virt_sandbox_domain_template
宏会创建新类型,container_execheap_t
并为docker操作创建必要的规则,以将新类型用作容器域。
编译并加载策略模块(selinux-policy-devel
软件包应提供必需的开发文件,包括makefile ):
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
。