当前位置: 首页 > news >正文

Docker 容器隔离关键技术:Seccomp

Docker 容器隔离关键技术:Seccomp

在 Docker 容器中,Seccomp(Secure Computing Mode) 是一种内核安全机制,用来限制容器内的程序可以调用哪些系统调用(Syscalls)。通过列清单的方式,Seccomp 可以指定哪些系统调用被允许、被拒绝或需要特殊处理,从而增强容器的安全性。


什么是 Seccomp?

通俗比喻

想象你是一个公司安全管理员(宿主机),容器里的程序就像员工,而系统调用(Syscalls)就是员工用来操作外界资源的方式,比如:

  • 打电话订货(文件操作)。
  • 打电话开账户(网络操作)。
  • 打电话调整公司系统(高权限操作)。

Seccomp 就是员工的“电话管理系统”

  • 只允许员工打某些“安全电话”(系统调用)。
  • 拒绝任何“高风险电话”(例如直接改系统配置)。
  • 如果电话违规,直接挂断或报警。

Seccomp 的作用

  1. 限制系统调用范围:Seccomp 通过列清单(白名单或黑名单)的方式,限制程序只能调用经过允许的系统调用。
  2. 增强容器安全性:减少恶意程序通过高风险系统调用(如 ptracemount)攻击宿主机。
  3. 减少攻击面:系统调用是与内核交互的关键接口,限制调用种类可以降低被攻击的可能性。

Seccomp 与 Capabilities 的关系

  1. 核心区别

    • Seccomp 限制的是容器内进程调用的“系统调用”(Syscalls)。
    • Capabilities 限制的是容器的“权限”(如挂载、修改文件权限)。

    比喻

    • Capabilities 是限制“容器能不能开某扇门”(权限)。
    • Seccomp 是限制“容器能不能用某种工具”(系统调用)。
  2. 互相配合

    • Capabilities 可以禁用容器的高权限操作(如 CAP_SYS_ADMIN 禁用挂载权限)。
    • Seccomp 则进一步限制具体的系统调用,即使拥有 CAP_SYS_ADMIN 权限,也可以通过禁止 mount 调用来加强安全。

Seccomp 在 Docker 中的使用

1. 默认 Seccomp 策略

Docker 默认启用了一个标准的 Seccomp 策略文件(default.json),其特点是:

  • 允许常用系统调用:如 readwriteopen
  • 禁止高风险系统调用:如 keyctl(管理内核密钥)、create_module(加载内核模块)、delete_module(卸载内核模块)。
  • 限制进程相关调用:如 ptrace(调试进程)。

这种默认策略适合大多数容器任务,同时保证了安全性和功能性之间的平衡。

2. 自定义 Seccomp 策略

如果默认策略无法满足需求(如更严格的限制),可以使用自定义策略文件,以 JSON 格式定义:

{"defaultAction": "SCMP_ACT_ERRNO","syscalls": [{"names": ["read", "write", "exit", "sigreturn"],"action": "SCMP_ACT_ALLOW"},{"names": ["ptrace", "kexec_load"],"action": "SCMP_ACT_ERRNO"}]
}
  • SCMP_ACT_ALLOW:允许调用。
  • SCMP_ACT_ERRNO:拒绝调用并返回错误。

运行容器时加载自定义策略:

docker run --security-opt seccomp=/path/to/custom-seccomp.json -it ubuntu
3. 禁用 Seccomp

某些情况下可能需要完全禁用 Seccomp(如调试容器):

docker run --security-opt seccomp=unconfined -it ubuntu

特权容器无法配置 Seccomp

什么是特权容器?

特权容器(Privileged Container)是 Docker 中一种特殊模式,启动时通过 --privileged 参数开启:

docker run --privileged -it ubuntu

特性

  • 拥有几乎所有的系统权限(类似于直接运行在宿主机上)。
  • 访问宿主机的所有设备(如 /dev)。
  • 默认禁用 Seccomp、AppArmor 等安全机制。
为什么特权容器无法配置 Seccomp?

特权容器的权限设计初衷是为了绕过所有安全限制,因此它会自动禁用 Seccomp。即使尝试配置自定义 Seccomp 策略,也会被忽略。

安全风险

由于特权容器拥有宿主机级别的权限,攻击者可以轻易利用容器中的漏洞获取宿主机的控制权。建议仅在测试或特定需求场景中使用特权容器


Seccomp 常见系统调用限制

系统调用作用默认策略安全建议
read读取文件或输入数据允许通常是安全的
write写入文件或输出数据允许通常是安全的
mount挂载文件系统禁止高风险,应禁用
umount卸载文件系统禁止高风险,应禁用
ptrace调试其他进程禁止高风险,应禁用
clone克隆当前进程限制根据任务需求谨慎允许
keyctl管理内核密钥禁止极高风险,应禁用
create_module加载内核模块禁止极高风险,应禁用

Seccomp 的优点

  1. 减少攻击面
    • 限制系统调用的种类,减少攻击者的利用路径。
  2. 增强隔离性
    • 即使容器被攻破,Seccomp 限制可以防止恶意程序滥用关键系统调用。
  3. 灵活性
    • 支持自定义策略,满足不同场景需求。

Seccomp 的局限性

  1. 特权容器无法使用
    • 特权容器(--privileged)直接绕过 Seccomp,无法配置任何策略。
  2. 需要配置策略
    • 默认策略可能无法满足所有场景,自定义策略需要理解系统调用。
  3. 依赖内核版本
    • Seccomp 是内核功能,某些旧版本内核可能不支持。

Seccomp 与 Capabilities 的对比

特性SeccompCapabilities
作用限制系统调用(Syscalls)。限制操作权限(Privileges)。
粒度细粒度控制,指定允许或禁止的系统调用。中粒度控制,按权限分配任务能力。
示例禁止 ptrace 调试其他进程。禁止 CAP_SYS_ADMIN 系统管理权限。
配合场景禁止高风险的系统调用。限制容器的高权限操作。

总结

Seccomp 是 Docker 容器的一项重要安全技术。它通过限制系统调用的范围,减少攻击面,提升容器的隔离性。尽管默认启用了标准策略,但 Seccomp 可以根据需求进行自定义,进一步加强容器的安全性。

重要注意:特权容器(--privileged)默认禁用 Seccomp。由于特权容器本质上绕过了所有安全限制,使用时需极其谨慎。

相关文章:

Docker 容器隔离关键技术:Seccomp

Docker 容器隔离关键技术:Seccomp 在 Docker 容器中,Seccomp(Secure Computing Mode) 是一种内核安全机制,用来限制容器内的程序可以调用哪些系统调用(Syscalls)。通过列清单的方式&#xff0c…...

【大模型】深度解析 NLP 模型5大评估指标及 应用案例:从 BLEU、ROUGE、PPL 到METEOR、BERTScore

在自然语言处理(NLP)领域,无论是机器翻译、文本生成,还是问答系统开发,模型性能评估指标始终是开发者绕不开的工具。BLEU、ROUGE、PPL(困惑度)、METEOR 和 BERTScore 是五个最具代表性的指标&am…...

LinuxC高级

gdb调试工具 gdb调试的作用 gdb用于调试代码中逻辑错误,而非语法错误 gdb调试流程 生成可以使用gdb调试的执行文件 gcc -g xxx.c ---> 生成的文件可以使用gdb调试 进入gdb工具 gdb 可执行文件 ---> 使用gdb工具开始调试可执行文件 r/run:运行代码 …...

实现PDF文档加密,访问需要密码

01. 背景 今天下午老板神秘兮兮的来问我,能不能做个文档加密功能,就是那种用户下载打开需要密码才能打开的那种效果。boss都发话了,那必须可以。 需求:将pdf文档经过加密处理,客户下载pdf文档,打开文档需要…...

LangChain——加载知识库文本文档 PDF文档

文档加载 这涵盖了如何加载目录中的所有文档。 在底层,默认情况下使用 UnstructedLoader。需要安装依赖 pip install unstructuredpython导入方式 from langchain_community.document_loaders import DirectoryLoader我们可以使用 glob 参数来控制加载特定类型文…...

深度学习2:从零开始掌握PyTorch:数据操作不再是难题

文章目录 一、导读二、张量的定义与基本操作三、广播机制四、索引与切片五、内存管理六、与其他Python对象的转换本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,…...

MyBatis的if标签的基本使用

在MyBatis框架中,if标签用于在构建SQL语句时,根据参数条件判断的结果,动态地选择加入或不加where条件中。 一 常见使用 在使用MyBatis处理查询逻辑的时候,常用的是判断一些参数是否为空,列举常用的几种情况展示 1.1…...

【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成

问题描述 在Azure Redis的导出页面,突然不能配置Storage Account的SAS作为授权方式。 image.png 那么是否可以通过AZ CLI或者是Powershell来实现SAS的配置呢? 问题解答 可以的。使用 az redis export 可以实现 az redis export --container --prefix[--a…...

【微服务】Nacos

一、安装 1、官网地址:https://nacos.io/download/nacos-server/ 2、启动:找到bin目录下的startup.cmd双击启动,或者打开一个命令窗口输入: startup.cmd -m standalone双击启动后如下:可以访问控制台地址 访问后的…...

5、定义与调用函数

大家好,欢迎来到Python函数入门课程! 在编程中,函数就像一个可以重复使用的代码块,它接受输入(参数),执行特定的任务,并可能返回一个结果。想象一下,函数就像一个厨房里的搅拌机,你放入水果(参数),按下按钮(调用函数),它就会帮你制作出美味的果汁(返回值)。…...

Linux 网络编程之TCP套接字

前言 上一期我们对UDP套接字进行了介绍并实现了简单的UDP网络程序,本期我们来介绍TCP套接字,以及实现简单的TCP网络程序! 🎉目录 前言 1、TCP 套接字API详解 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 connect 2、…...

前海湾地铁的腾通数码大厦背后的临时免费停车点探寻

临时免费停车点:前海湾地铁的腾通数码大厦背后的桂湾大街,目前看不仅整条桂湾大街停了​车,而且还有工地餐点。可能是这个区域还是半工地状态,故暂时还不会有​罚单的情况出现。 中建三局腾讯数码大厦项目部A栋 广东省深圳市南山…...

OpenCV相机标定与3D重建(7)鱼眼镜头立体校正的函数stereoRectify()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::fisheye::stereoRectify 是 OpenCV 中用于鱼眼镜头立体校正的函数。该函数计算两个相机之间的校正变换,使得从两个相机拍摄的图像…...

前端如何获取unpkg的资源链接

在现代前端开发中,快速获取和使用npm包是一个常见需求。unpkg是一个全球性的CDN服务,它为npm上的每个包提供了快速访问。通过unpkg,你可以轻松地通过URL获取任何npm包的文件。本文将介绍如何获取unpkg的资源链接。 unpkg简介 unpkg是一个快…...

Flink 离线计算

文章目录 一、样例一&#xff1a;读 csv 文件生成 csv 文件二、样例二&#xff1a;读 starrocks 写 starrocks三、样例三&#xff1a;DataSet、Table Sql 处理后写入 StarRocks四、遇到的坑 <dependency><groupId>org.apache.flink</groupId><artifactId&…...

Git | 理解团队合作中Git分支的合并操作

合并操作 团队合作中Git分支的合并操作分支合并过程1.创建feature/A分支的过程2. 创建分支feature/A-COPY3.合并分支查看代码是否改变 团队合作中Git分支的合并操作 需求 假设团队项目中的主分支是main,团队成员A基于主分支main创建了feature/A&#xff0c;而我又在团队成员A创…...

C++多态的实现原理

【欢迎关注编码小哥&#xff0c;学习更多实用的编程方法和技巧】 1、类的继承 子类对象在创建时会首先调用父类的构造函数 父类构造函数执行结束后&#xff0c;执行子类的构造函数 当父类的构造函数有参数时&#xff0c;需要在子类的初始化列表中显式调用 Child(int i) : …...

[极客大挑战 2019]PHP--详细解析

信息搜集 想查看页面源代码&#xff0c;但是右键没有这个选项。 我们可以ctrlu或者在url前面加view-source:查看&#xff1a; 没什么有用信息。根据页面的hint&#xff0c;我们考虑扫一下目录看看能不能扫出一些文件. 扫到了备份文件www.zip&#xff0c;解压一下查看网站源代码…...

map用于leetcode

//第一种map方法 function groupAnagrams(strs) {let map new Map()for (let str of strs) {let key str ? : str.split().sort().join()if (!map.has(key)) {map.set(key, [])}map.get(key).push(str)} //此时map为Map(3) {aet > [ eat, tea, ate ],ant > [ tan,…...

CommonJS 和 ES Modules 的 区别

CommonJS 和 ES Modules 的 区别 1. CommonJS 和 ES Modules 区别?1.1 语法差异CommonJS&#xff1a;ES Modules&#xff1a; 1.2. 加载机制CommonJS&#xff1a;ES Modules&#xff1a; 1.3. 运行时行为CommonJS&#xff1a;ES Modules&#xff1a; 1.4. 兼容性和使用场景Com…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...