容器隔离技术:AppArmor 与 SELinux 的比较
我研究了容器、虚拟机 (VM) 和进程通常如何通过不同的技术(即 AppArmor 和 SELinux)进行隔离。我的目标是比较这些解决方案在云世界中的隔离/分离功能。
提醒一下,Red Hat Enterprise Linux 使用SELinux 技术来分离进程、容器和虚拟机。OpenShift 也使用了这项技术。
第一个选项是名为AppArmor的隔离技术,它与 SELinux 非常相似。但是,它不是基于标签的。AppArmor 安全配置文件相当于 SELinux 安全策略,看起来更加用户友好,但这是因为 AppArmor 不太复杂,控制的操作也更少。
SELinux 和 AppArmor 都支持类型强制安全模型,这是一种强制访问控制,基于允许主体(进程或用户)访问对象(文件、目录、套接字等)的规则。但是,AppArmor 不具备多级安全 (MLS) 和多类别安全 (MCS)。这意味着在需要 MLS 的环境中,AppArmor 的使用非常困难,甚至不可能。
MLS/MCS 功能是 AppArmor 和 SELinux 之间的一大区别。使用 AppArmor,无法保持容器之间的分离。AppArmor 将容器与主机分离,但默认容器策略非常松散,需要改进以防止访问整个主机文件系统。由于 AppArmor 不支持 MCS,因此无法在每个容器之间进行分离。默认情况下,SELinux 将容器彼此分离,也将其与主机文件系统分离。Kata容器可能是另一种解决方案,也是云中容器分离的更好选择。
第二种选择是使用虚拟机 (VM) 来隔离容器。此方法是通过将容器 pod 放入 VM 中来实现的。这给云基础架构带来了巨大的开销。使用 SELinux,无需使用 VM 即可隔离 pod。
您甚至可以通过udica工具为自定义容器生成特定的 SELinux 策略。
下表总结了 SELinux 和 AppArmor 技术之间的差异:
技术 |
类型强制 |
大联盟/大联盟 |
策略生成器 |
集装箱发电机 |
应用装甲 |
是的 |
不 |
是的 |
不 |
SELinux |
是的 |
是的 |
不* |
是的 |
* SELinux 有工具可以执行此操作(audit2allow),而不是像 AppArmor 那样只有一个包装器。
To summarize, SELinux is a more complex technology that controls more operations on a system and separates containers by default. This level of control is not possible with AppArmor because it lacks MCS. In addition, not having MLS means that AppArmor cannot be used in highly secure environments.
References:
[1] https://www.redhat.com/en/topics/linux/what-is-selinux
[3] https://selinuxproject.org/page/NB_TE
[4] https://selinuxproject.org/page/NB_MLS
[5] https://katacontainers.io/
[6] https://github.com/containers/udica
[ Getting started with containers? Check out this free course. Deploying containerized applications: A technical overview. ]