13 不只是代码执行:内核实际执行的内容

# 13 不只是代码执行:内核实际执行的内容

Linux 内核不仅仅是执行代码,它还控制代码被允许做什么、何时做以及由谁来做。这种控制并非是建议性的或外部分层的,而是在权限与动作交汇的时刻直接执行。

当发出系统调用时,内核会根据目标资源的权限检查进程的凭据(其 UID、GID、补充组和能力)。这些检查决定是否允许访问。没有它们,用户之间以及用户空间和系统之间就没有界限。

但仅有权限是不够的。内核还定义了进程可以看到什么。通过使用命名空间(namespaces),它重新映射每个进程对 PID、挂载点和网络接口的视图。这种隔离使进程甚至无法知道其他资源的存在。没有它,权限检查就失去了意义。

即使进程能够看到某个资源,也不意味着它能够控制该资源。

特权执行确保影响系统状态的操作(如配置网络设备或加载模块)仅允许从正确的特权级别执行。用户模式和内核模式之间的转换在运行时会被严格验证。

为了避免“全有或全无”的 root 访问,Linux 应用了能力(capabilities)机制。内核并非通过 UID 0 授予完全控制权,而是按进程强制实施范围狭窄的权利(例如用于网络的 CAP_NET_ADMIN 或用于调试的 CAP_SYS_PTRACE)。在敏感操作期间会直接检查这些能力。

并非所有动作在所有上下文中都有效。系统调用内的代码可能会阻塞或分配内存,而中断内的代码则不能。内核持续跟踪此执行上下文,并执行安全操作。没有外部逻辑能够可靠地做出此决定。

策略执行增加了另一个维度。seccomp 过滤系统调用,SELinux 和 AppArmor 等 LSM(Linux 安全模块)应用强制访问规则,Cgroups 控制 CPU、内存和设备使用。这些控制直接集成到系统调用路径、调度器和资源记账中。

在虚拟化环境中,内核(或其支持的虚拟机管理程序)仲裁客户操作系统的访问。特权指令和硬件 I/O 会被捕获和模拟。没有这一点,客户机可能会危及主机。虚拟化执行保护的是整个系统,而不仅仅是进程。

这些机制并非独立运作。能力与 LSM 协同工作,命名空间限制可见性,而 Cgroups 限制使用。即使权限允许,上下文也会阻止不安全的动作;即使合法,策略规则也会拒绝危险行为。

它们共同阻止未授权访问、意外披露、特权升级、不稳定执行和跨虚拟机妥协。内核集成并执行这些机制,并非因为它优雅,而是因为它是唯一具有全面可见性和权威性的层。每个动作都流经它,控制必须存在于那里。

13 不只是代码执行:内核实际执行的内容(配图)

上次更新: 2026/07/14, 19:37:40

社区交流

讨论与留言

前往 GitHub Issues →

本留言区仅对应当前文章,欢迎补充观点、提出问题或帮助修正文中疏漏。 留言由 GitHub/Gitalk 提供,需要使用 GitHub 登录。

最近更新
第 1 课:专栏导论与安全边界
07-01
第 3 课:安装编译与调试环境
07-01
第 4 课:第三方库下载、编译与依赖管理
07-01
更多文章>