seccomp通过限制系统调用增强Linux安全,主要使用seccomp-bpf模式,支持STRICT和FILTER两种模式,其中FILTER结合BPF实现灵活过滤。

seccomp(Secure Computing Mode)是 Linux 内核提供的一种安全机制,允许进程限制自身或子进程能执行的系统调用。通过过滤掉不需要的系统调用,可以显著减少攻击面,防止恶意代码利用某些系统调用来提权或逃逸。尤其在容器环境(如 Docker、Kubernetes)中,seccomp 被广泛用于增强隔离性。
理解 seccomp 的工作原理
seccomp 运行在内核层面,当用户程序发起系统调用时,内核会先检查是否被 seccomp 过滤规则拦截。目前主流使用的是 seccomp-bpf 模式,它结合 Berkeley Packet Filter(BPF)机制,实现灵活的系统调用过滤。
seccomp 有三种主要操作模式:
- SECCOMP_MODE_STRICT:仅允许极少数系统调用(如 read、write、exit、sigreturn),过于严格,实用性低。
- SECCOMP_MODE_FILTER:使用 BPF 程序定义过滤规则,可精细控制哪些系统调用允许、拒绝、记录或终止进程。
现代应用多采用 MODE_FILTER,配合 BPF 规则实现定制化安全策略。
编写 seccomp 过滤规则(C 语言示例)
以下是一个简单的 C 程序示例,使用 libseccomp 库限制只允许 read、write、exit 和 sigreturn 四个系统调用:
#includeint main() { scmp_filter_ctx ctx; ctx = seccomp_init(SCMP_ACT_KILL); // 默认行为:拒绝并杀死进程 // 允许特定系统调用 seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(sigreturn), 0); // 加载规则到内核 seccomp_load(ctx); // 测试:调用不允许的系统调用(如 open) open("/tmp/test", O_RDONLY); // 会触发 SIGSYS,进程终止 seccomp_release(ctx); return 0; }
编译前需安装 libseccomp 开发包:
sudo apt-get install libseccomp-dev
gcc -o seccomp_example example.c -lseccomp
在容器中使用 seccomp 配置文件
Docker 和 Kubernetes 支持通过 JSON 格式的 seccomp 配置文件来限制容器中的系统调用。
系统易学易懂,用户只需会上网、不需学习编程及任何语言,只要使用该系统平台,只要会打字,即可在线直接完成建站所有工作。本程序适合不懂php环境配置的新手用来在本机调试智能SiteSEO网站优化软件,安装过程极其简单。您的网站地址:http://localhost您的网站后台:登录地址: http://localhost/admin.php密 码: admin服务器套件所包含的软件:nginx-0.7
例如,创建一个名为 restricted.json 的配置文件,禁止 ptrace、mount、chroot 等危险调用:
{
"defaultAction": "SCMP_ACT_ERRNO",
"syscalls": [
{
"names": ["ptrace", "mount", "umount2", "chroot", "pivot_root"],
"action": "SCMP_ACT_KILL"
}
]
}
运行容器时加载该配置:
docker run --security-opt seccomp=./restricted.json myapp
Kubernetes 中可通过 Pod 注解方式指定 seccomp profile:
apiVersion: v1
kind: Pod
metadata:
annotations:
seccomp.security.alpha.kubernetes.io/pod: localhost/restricted.json
最佳实践与注意事项
启用 seccomp 时应注意以下几点以避免服务异常:
- 不要盲目禁用系统调用,应根据应用实际需求分析所需调用(可用 strace 跟踪)。
- 使用 SCMP_ACT_LOG 或 SCMP_ACT_ERRNO 替代直接杀进程,便于调试。
- 定期更新 seccomp 配置,配合最小权限原则。
- 生产环境中建议使用社区验证过的 profile,如 Docker 默认 profile。
可通过 strace -e trace=all ./your_program 分析程序使用的系统调用,辅助制定规则。
基本上就这些。合理使用 seccomp 能有效阻止许多基于系统调用的攻击手段,是提升 Linux 应用和容器安全的重要一环。配置虽小,作用不小。









