0

0

Linux 安全:如何使用 seccomp 过滤不必要的系统调用

舞夢輝影

舞夢輝影

发布时间:2025-11-20 21:23:02

|

279人浏览过

|

来源于php中文网

原创

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

linux 安全:如何使用 seccomp 过滤不必要的系统调用

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 四个系统调用:

#include 

int 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 配置文件来限制容器中的系统调用。

智能网站优化SiteSEO1.52
智能网站优化SiteSEO1.52

系统易学易懂,用户只需会上网、不需学习编程及任何语言,只要使用该系统平台,只要会打字,即可在线直接完成建站所有工作。本程序适合不懂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_LOGSCMP_ACT_ERRNO 替代直接杀进程,便于调试。
  • 定期更新 seccomp 配置,配合最小权限原则。
  • 生产环境中建议使用社区验证过的 profile,如 Docker 默认 profile。

可通过 strace -e trace=all ./your_program 分析程序使用的系统调用,辅助制定规则。

基本上就这些。合理使用 seccomp 能有效阻止许多基于系统调用的攻击手段,是提升 Linux 应用和容器安全的重要一环。配置虽小,作用不小。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

408

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

249

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

494

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

398

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

436

2024.04.08

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

4

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 4.3万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 785人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号