linux内核之Namespaces、Cgroups、Capabilities、Seccomp和Landlock

这几个技术都属于Linux内核的关键部分,但它们扮演的角色截然不同。总的来说,NamespacesCgroups是容器技术的“基石”,负责构建运行环境;而CapabilitiesSeccompLandlock则构成层层递进的“安全防线”,共同实现纵深防御。

下面是它们具体角色的一个梳理:

角色分工 Namespaces Cgroups Capabilities Seccomp Landlock
一句话总结 隔离"视图"
负责"看什么"
限制"用量"
负责"用多少"
拆分"特权"
负责"给什么权力"
过滤"系统调用"
负责"能打什么电话"
控制"文件访问"
负责"能碰哪些文件"
核心功能 为进程提供独立的系统资源视图,实现资源隔离。 限制和统计进程组的资源使用(CPU、内存等)。 将传统root用户的"万能"特权拆分为一个个独立的小权限,遵循最小权限原则 拦截和过滤进程发起的系统调用,限制其与内核的交互方式。 提供路径级别的细粒度文件访问控制,可限制对特定文件或目录的读写执行等操作。
类比理解 为进程创建独立、封闭的"房间",不同房间内看到的内容不同。 为进程设定"预算",限制其能使用的硬件资源。 将"万能钥匙"变成一串单独的钥匙,使用时只给必要的钥匙。 限制进程能拨打哪些"内核电话",防止其滥用。 在文件柜的每个抽屉上加装独立的"密码锁",而非仅锁住整个柜子。
适用场景 容器的核心:构建容器隔离环境的基础,用于进程、网络、文件系统等隔离。 资源管控:在容器和云平台中,确保每个容器不会耗尽宿主机资源。 权限收紧:为容器或服务进程"降权",移除其不需要的敏感权限(如修改系统时间、加载内核模块)。 攻击面缩减:阻止容器内进程执行mountswapon等危险系统调用。 精细化沙箱:在容器内进一步隔离子进程(如浏览器渲染引擎),或为非容器化应用(如Web服务器、数据库)自身增加安全限制。

🎬 它们如何协同工作?

这几个技术常常协同工作,形成一个纵深防御体系。例如,在启动一个容器时:

  1. Namespaces 负责创建隔离环境(如独立的网络和文件系统),让进程"住进独立的房间"。
  2. Cgroups 则设置资源上限,防止这个"房间"占用过多"水电"(CPU和内存)。
  3. Capabilities 会丢弃容器进程绝大多数不必要的特权(如加载内核模块的权限)。
  4. Seccomp 会设置过滤器,禁止调用mountswapon等危险系统调用。
  5. 最后,Landlock 可以作为一个额外的、细粒度的沙盒,例如限制容器内的Web服务器只能写入特定日志目录,即使它被攻破也无法破坏其他文件。

🆚 Namespaces vs Landlock

这里想再特别说明一下,Namespaces 和 Landlock 都涉及文件系统隔离,但机制和粒度存在关键差异:

  • 机制不同:Namespaces 的隔离发生在系统视图层面。当容器中执行 chrootpivot_root 时,进程看到的是一个新的文件系统视图,但对这个"新视图"里的所有文件享有同等访问权限。而 Landlock 是基于路径的访问控制,它直接限制进程对宿主机中真实文件路径的访问。
  • 管控深度不同:Namespaces 是粗粒度的,一旦进入 namespace,对所有挂载的文件都拥有相同权限。而 Landlock 允许你定义精细的策略,例如,允许读取 /etc 但禁止写入,只允许在 /tmp 下创建新文件等。Landlock 甚至可以作用于宿主机全局的文件系统,这是 Namespaces 做不到的。

💎 总结

简单来说,这张表格可以帮你从宏观上理解它们的角色:

  • Namespaces:为进程分配独立的“房间”。
  • Cgroups:为房间设定“水电煤”用量。
  • Capabilities:拆分“万能钥匙”,只给必要的门钥匙。
  • Seccomp:屏蔽“电话本”上危险的号码。
  • Landlock:为房间内的每个“抽屉”加装独立的锁。
posted @ 2026-06-15 17:21  悠哉大斌  阅读(10)  评论(0)    收藏  举报