Namespace 和 Cgroups 是“建筑材料”(底层内核机制),而沙箱是用这些材料建出来的“安全屋”(应用场景)。
我们可以从以下几个维度来理清它们的关系:
1. 概念上的本质区别
- Namespace(命名空间)与 Cgroups(控制组):它们是 Linux 内核提供的具体技术。正如我们之前聊的,Namespace 负责“障眼法”(隔离视野,比如让进程以为自己独占网络),Cgroups 负责“物理栅栏”(限制资源,比如限制只能用 1G 内存)。
- 沙箱(Sandbox):它是一个面向代码执行的安全隔离环境。它的核心目的不是为了部署服务,而是为了安全地运行不受信任的代码或文件。你可以把沙箱理解为一个“防爆实验室”,你在里面做实验,哪怕发生爆炸也不会炸毁整栋大楼。
2. 沙箱是如何利用 Namespace 和 Cgroups 的?
沙箱并不是凭空存在的,它正是基于 Namespace 和 Cgroups 构建起来的。当你要在沙箱里运行一段可疑代码时:
- 系统会调用 Namespace,为这段代码分配独立的进程树、网络栈和文件系统,让它无法窥探宿主机和其他程序的隐私。
- 系统会调用 Cgroups,给这段代码设定极其严格的 CPU 和内存上限,防止它写出死循环把服务器搞崩溃。