安全模型与访问控制
这页讲的是:Linux 内核不仅要提供功能,还要决定“谁能做什么”。安全模型与访问控制,讲的是权限边界、能力限制和系统自我保护规则如何嵌进内核运行之中。
这块是什么
安全模型与访问控制,讲的是内核如何判断某个操作是否被允许,以及如何降低系统被误用或滥用后的破坏范围。它不是只在“安全软件”里发生,而是从用户权限、文件访问、模块加载到系统调用边界,都有它的身影。
可以把它理解成“系统规则总控”:不是所有人都能去所有房间,也不是拿到钥匙的人就能随便动整栋楼。
它负责什么
控制访问边界
- 判断谁可以访问哪些对象
- 限制危险操作的触发条件
- 保护系统关键资源
- 让错误或恶意行为不至于无限扩散
细化权限模型
- 不只区分“能”或“不能”
- 把大权限拆成更细颗粒度能力
- 减少“一旦拿到就全能”的情况
- 让治理规则更精细
承接更强约束机制
- 支持更严格的安全策略
- 和系统调用边界、模块装载、文件访问等配合
- 帮助系统建立更可信的运行约束
- 为更高层的安全治理提供底座
为什么安全不是“额外加的一层”
| 场景 | 你现在怎么理解 | 为什么离不开内核 |
|---|
| 文件访问 | 程序能不能读、写、执行某个对象,不只是应用自己说了算。 | 真正的资源和边界都在内核这一层。 |
| 系统调用 | 应用请求某项能力时,需要有统一规则判断是否合法。 | 系统边界本来就在内核入口处。 |
| 模块加载 | 不是任何代码都该随时插进内核。 | 内核一旦被错误或恶意代码污染,影响的是整机。 |
| 容器与多租户 | 多个服务共处一机时,需要清晰控制越权和突破边界的风险。 | 隔离和权限都必须由底层系统认真落实。 |
关键概念
| 概念 | 现在怎么理解 |
|---|
| 权限检查 | 在关键操作发生前,由内核判断是否允许。 |
| 能力拆分 | 把原本过大的权限拆成更细的控制单位,减少全能权限滥用。 |
| 最小权限 | 只给完成任务所需的最少能力,不多给。 |
| 安全策略 | 对资源访问、行为边界和风险动作所施加的一组系统规则。 |
| 内核自保护 | 系统不仅要防外部越权,也要尽量降低内部错误带来的灾难性后果。 |
为什么重要
- 没有这层,系统功能越强,潜在破坏范围也越大。
- 现代 Linux 既服务单机也服务云和多租户环境,边界控制尤其重要。
- 很多你以为只是“权限问题”的事情,背后其实关系到系统整体可信度。
- 它和系统调用、文件系统、模块、容器、观测能力都深度交织。
常见误解
- 误解一:安全只和安全软件有关。实际上很多关键安全判断都在内核资源路径上发生。
- 误解二:权限就是 root 和非 root。实际上现代系统会把能力和约束拆得更细。
- 误解三:安全会削弱功能,所以只是附加限制。实际上安全是为了让系统在复杂环境中还能可信地提供功能。
它不负责什么
- 它不自己实现文件、网络、调度等功能,但会深刻影响这些功能的可访问方式。
- 它不等于某一套单独安全产品,而是贯穿内核边界与资源路径的基础规则。
- 它不保证绝对安全,但决定了系统能否建立清晰且可执行的防护边界。
和其他模块的关系
| 相关模块 | 关系 |
|---|
| 系统调用边界 | 很多权限和合法性判断都发生在用户请求正式进入内核时。 |
| 文件系统 | 文件和目录访问是最常见的权限判定场景之一。 |
| 构建 / 模块加载 | 是否允许加载模块、哪些能力可以动态接入,是重要安全边界。 |
| 容器 / cgroup | 隔离和资源治理想真正可信,也离不开安全规则配合。 |
你现在可以先把安全边界分成几类
| 边界类型 | 它主要在挡什么 | 为什么别混成一个词 |
|---|
| 身份与权限边界 | 谁能发起哪些敏感操作。 | 这更像“你有没有资格碰这个资源”。 |
| 资源访问边界 | 即使能运行,也不代表能随意读写所有文件、设备和接口。 | 这更像“你能碰哪一部分系统世界”。 |
| 内核扩展边界 | 什么代码可以被装进内核、什么能力可以动态接入。 | 这类边界一旦失守,影响往往不是单个进程,而是整机。 |
| 多租户隔离边界 | 一份系统里不同服务、容器或租户之间能否互相越界。 | 这能帮助你把安全问题和资源治理问题联系起来,而不是分开看。 |
读完这页后,你应该能回答
- 为什么安全不是附加在系统外面的功能,而是内核边界本身的一部分?
- 为什么“权限”不只是 root 和非 root 这么简单?
- 为什么模块、系统调用、容器这些主题都会和安全模型缠在一起?
后面适合继续问:能力拆分为什么比粗糙的大权限更重要?哪些边界最容易成为安全敏感点?容器隔离为什么既是资源问题也是安全问题?