0

0

Linux 安全:如何使用 seccomp profile 限制容器系统调用

冰川箭仙

冰川箭仙

发布时间:2025-11-18 23:00:07

|

714人浏览过

|

来源于php中文网

原创

seccomp是linux内核安全机制,通过限制容器可执行的系统调用提升安全性。它默认允许read、write、exit、sigreturn,现代版本结合bpf实现细粒度控制。在docker中可通过--security-opt加载json格式的profile文件,如禁止ptrace、mount等高风险调用。kubernetes从v1.19支持该特性,需将profile置于节点/var/lib/kubelet/seccomp目录,并通过pod注解或securitycontext引用。配置时应平衡安全与兼容性,使用scmp_act_log记录拦截行为,借助strace或audit log调试。合理使用可显著降低容器逃逸风险。

linux 安全:如何使用 seccomp profile 限制容器系统调用

在容器环境中,限制应用程序能使用的系统调用是提升安全性的关键手段之一。seccomp(secure computing mode)是 Linux 内核提供的一种机制,允许你过滤进程可执行的系统调用,从而减少攻击面。通过为容器配置 seccomp profile,你可以明确允许或禁止某些系统调用,防止恶意或意外行为。

什么是 seccomp?

seccomp 是 Linux 内核的安全特性,最初设计用于将进程限制在极小的系统调用集合中,进入“安全计算模式”后,进程只能调用 readwriteexitsigreturn 四个系统调用。现代 seccomp 结合 Berkeley Packet Filter (BPF) 规则,可以实现更细粒度的控制。

在容器运行时(如 Docker 或 containerd)中,seccomp 通常通过加载 JSON 格式的 profile 文件来配置,定义哪些系统调用被允许、拒绝或记录。

如何为容器配置 seccomp profile

Docker 和 Kubernetes 都支持通过 seccomp profile 限制容器的系统调用。以下以 Docker 为例说明操作流程。

1. 准备 seccomp profile 文件

seccomp profile 是一个 JSON 文件,描述了允许或拒绝的系统调用规则。Docker 默认提供了一个默认 profile(default.json),位于:

/usr/share/containers/seccomp.json 或由 Docker 自带。

你可以从默认 profile 开始修改,例如创建一个自定义文件 restricted.json,禁止危险系统调用如 ptracemountchroot 等:

{
  "defaultAction": "SCMP_ACT_ERRNO",
  "syscalls": [
    {
      "names": ["ptrace", "mount", "umount2", "chroot", "pivot_root"],
      "action": "SCMP_ACT_ALLOW"
    },
    {
      "names": ["execve"],
      "action": "SCMP_ACT_ALLOW"
    }
  ]
}

defaultAction 设置默认动作为返回错误(ERRNO),只有显式列出的系统调用才会被允许。

2. 使用 Docker 运行容器并加载 profile

使用 --security-opt 参数指定 seccomp profile:

docker run --rm \
  --security-opt seccomp=./restricted.json \
  your-image

如果未指定,Docker 使用默认 profile;设置为 unconfined 则禁用 seccomp:

站长俱乐部购物系统
站长俱乐部购物系统

功能介绍:1、模块化的程序设计,使得前台页面设计与程序设计几乎完全分离。在前台页面采用过程调用方法。在修改页面设计时只需要在相应位置调用设计好的过程就可以了。另外,这些过程还提供了不同的调用参数,以实现不同的效果;2、阅读等级功能,可以加密产品,进行收费管理;3、可以完全可视化编辑文章内容,所见即所得;4、无组件上传文件,服务器无需安装任何上传组件,无需支持FSO,即可上传文件。可限制文件上传的类

下载
--security-opt seccomp=unconfined

在 Kubernetes 中使用 seccomp

Kubernetes 从 v1.19 开始支持 seccomp 作为 Beta 特性,v1.25 起 GA。你可以通过 Pod 注解或 SecurityContext 指定 profile。

1. 将 profile 加载到节点

seccomp profile 需要预先放在每个节点的 /var/lib/kubelet/seccomp 目录下,例如:

/var/lib/kubelet/seccomp/restricted.json

2. 在 Pod 中引用 profile

通过注解方式:

apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
  annotations:
    container.seccomp.security.alpha.kubernetes.io/hello: runtime/default
spec:
  containers:
  - name: hello
    image: busybox
    command: [ "sh", "-c", "sleep 3600" ]

或使用更精确的路径:

container.seccomp.security.alpha.kubernetes.io/hello: localhost/restricted.json

Kubernetes 支持以下前缀:

  • runtime/default:使用容器运行时的默认 profile
  • localhost/:引用节点上 /var/lib/kubelet/seccomp 下的文件

常见限制建议与调试技巧

配置 seccomp profile 时需平衡安全性与应用兼容性。过于严格的规则可能导致应用崩溃。

  • 禁止高风险系统调用:如 ptrace(可用于调试和注入)、mountcapsetchroot 等,除非明确需要
  • 允许基本调用:readwriteopenatcloseexecve 等通常是必需的
  • 使用日志辅助调试:设置 SCMP_ACT_LOG 可记录被拦截的调用,帮助分析问题
  • 逐步收紧策略:先使用宽松 profile,通过日志观察实际调用,再逐步限制

若容器启动失败,检查日志中是否有 “Operation not permitted”,可能是被 seccomp 拦截。可通过 strace 或 audit log 分析具体调用。

基本上就这些。合理使用 seccomp profile 能显著降低容器逃逸风险,是构建安全容器环境的重要一环。不复杂但容易忽略。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

453

2023.08.07

json是什么
json是什么

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

546

2023.08.23

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

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

331

2023.10.13

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

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

82

2025.09.10

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

235

2023.12.07

k8s和docker区别
k8s和docker区别

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

280

2023.07.24

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

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

515

2024.04.08

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

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

416

2024.04.08

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

1

2026.03.06

热门下载

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

精品课程

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

共28课时 | 6.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

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

共1课时 | 844人学习

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

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