一句话定义
Seccomp(secure computing mode,安全计算模式)是 Linux 内核提供的一道闸门:进程每次向内核发起系统调用(system call)之前,先按预设规则检查一遍,不在允许范围内的调用会被直接拒绝、报错,甚至让进程被杀掉。
它到底在拦什么
应用程序本身干不了多少事:读文件、建网络连接、申请内存、创建子进程,都得“请求内核代为执行”。这个请求就是系统调用,是普通程序和操作系统内核之间唯一的正式通道。
可以把它想成写字楼前台。进程是楼里的员工,内核是物业。你要打印文件、开会议室、取快递,都得先到前台填单。Seccomp 就是你工牌里预置的“可办业务清单”:清单上有的照办,没有的当场驳回。
它有两种形态。早期只有严格模式(strict mode):除了少到不能再少的几个调用,其他一律不准。后来有了过滤器模式(seccomp-bpf),可以用一段 BPF 程序按系统调用编号、甚至部分参数做判断,决定是放行、返回一个错误码,还是记日志、终止进程。容器普遍用的是后者。
和几个近亲的区别
容易和它混在一起的是 namespaces、cgroups、capabilities 和 LSM(如 AppArmor、SELinux)。它们管的是不同维度:
| 机制 | 管什么 | 一句话理解 |
|---|---|---|
| Namespaces | 进程能看到哪些资源 | 给你一个看起来独立的世界 |
| Cgroups | 能用多少 CPU、内存、IO | 给你一张有额度的饭卡 |
| Capabilities | root 权限被拆成哪些小块 | 把万能钥匙拆成小钥匙 |
| Seccomp | 能发起哪些系统调用 | 只准你跟前台办这几件事 |
| LSM | 按路径、标签等做访问控制 | 按房间管谁能进 |
关键差别:namespaces 解决“看不见”,cgroups 解决“用不多”,capabilities 解决“权限太大”,seccomp 解决“能说的话太多”。它们通常叠加使用,而不是互相替代。
对从业者和普通人的意义
对做容器和基础设施的人:主流容器运行时默认就带一份 seccomp 配置,屏蔽掉一批平时用不到、出事时却很好用的高危系统调用。不少内核漏洞利用要依赖特定调用,闸门一关,攻击面就小一截。自己写规则时,稳妥做法是从默认配置出发做减法,而不是从零放开再收。
对做 AI 智能体的人:让模型生成的代码真正在环境里跑起来时,语言层面的限制(禁用某些函数、静态检查)很容易被绕过。Seccomp 是在系统调用这一层兜底——无论代码写得多花哨,要读文件、开 socket,都得过这道闸。它也是容器沙箱、代码执行平台里最靠下的那层护栏。
但别把它当万能药。Seccomp 只能看到系统调用编号和寄存器里的标量参数,看不懂某个参数指向的路径字符串或网址;它也拦不住“合法但危险”的操作,比如用被允许的写操作破坏被允许的目录。所以它一般和文件系统隔离、降权运行、网络策略一起用,具体能力与默认配置以官方文档为准。
