Docker 容器隔离关键技术:Capabilities

Docker 容器隔离关键技术:Capabilities

在 Docker 中,Capabilities 是一种权限管理技术,它将 Linux 系统中传统的超级用户(root)权限拆分为多个独立的小权限(目前为 38 项)。这使得我们可以为容器按需分配权限,而不是直接授予完全的 root 权限。


什么是 Capabilities?

Capabilities 就像一组钥匙,每把钥匙对应某种权限。例如:

  • 一把钥匙允许你绑定网络端口(CAP_NET_BIND_SERVICE)。
  • 另一把钥匙允许你修改文件系统(CAP_SYS_ADMIN)。

通过分配具体的钥匙,你可以让容器只完成特定任务,而不会获取过多的权限。


完整的 Capabilities 列表及作用

以下是 Linux 内核最新版本(5.x)的 38 项 Capabilities,包含每项的作用、引入版本和 Docker 容器中默认是否启用(14 项默认启用的权限已标注)。

名称作用引入版本Docker 默认启用 (14 项)
CAP_AUDIT_CONTROL管理审计子系统(启用或禁用审计规则)。Linux 2.6.11
CAP_AUDIT_READ读取审计日志,用于系统审计工具。Linux 3.16
CAP_AUDIT_WRITE写入审计日志(通常用于记录系统事件)。Linux 2.6.11
CAP_BLOCK_SUSPEND阻止系统挂起,确保设备不会进入休眠状态。Linux 3.5
CAP_BPF加载和操作 eBPF 程序,允许用户空间与内核交互。Linux 5.8
CAP_CHECKPOINT_RESTORE执行进程的检查点和恢复操作(如迁移进程状态)。Linux 5.9
CAP_CHOWN修改文件或目录的所有权。Linux 2.2
CAP_DAC_OVERRIDE绕过文件的权限检查,允许访问受限制的文件。Linux 2.2
CAP_DAC_READ_SEARCH绕过目录的只读或搜索权限限制,允许读取特定文件内容。Linux 2.2
CAP_FOWNER忽略对文件的只读属性,允许修改文件属性。Linux 2.2
CAP_FSETID修改文件的 set-user-ID 或 set-group-ID 标志。Linux 2.2
CAP_IPC_LOCK锁定共享内存片段,防止被交换到磁盘。Linux 2.2
CAP_IPC_OWNER绕过进程间通信 (IPC) 的权限检查,允许直接访问共享资源。Linux 2.2
CAP_KILL向其他进程发送信号,例如 SIGKILLLinux 2.2
CAP_LEASE修改文件租约属性。Linux 2.4
CAP_LINUX_IMMUTABLE修改或删除文件的不可变属性(如 chattr +i 标志)。Linux 2.2
CAP_MAC_ADMIN管理强制访问控制 (MAC) 配置,如 SELinux 策略修改。Linux 2.6.25
CAP_MAC_OVERRIDE绕过强制访问控制规则,允许访问受限文件或资源。Linux 2.6.25
CAP_MKNOD创建特殊文件(如设备文件)。Linux 2.2
CAP_NET_ADMIN管理网络配置(如修改路由表、设置网络接口)。Linux 2.2
CAP_NET_BIND_SERVICE绑定低号端口(如 80 和 443)。Linux 2.2
CAP_NET_BROADCAST使用网络广播和多播数据包。Linux 2.2
CAP_NET_RAW使用原始套接字,允许发送或接收低级网络数据。Linux 2.2
CAP_PERFMON使用性能监控工具(如 perf,收集内核性能数据)。Linux 5.8
CAP_SETFCAP设置文件的功能标志(文件级的 Capabilities)。Linux 2.6.24
CAP_SETGID更改进程的 GID(组 ID),包括设置 GID 权限。Linux 2.2
CAP_SETPCAP调整进程的 Capabilities 设置,允许进程自身修改权限。Linux 2.2
CAP_SETUID更改进程的 UID(用户 ID),包括设置 UID 权限。Linux 2.2
CAP_SYS_ADMIN广泛的系统管理权限(如挂载文件系统、修改网络配置),几乎等同于 root 权限。Linux 2.2
CAP_SYS_BOOT允许重新启动系统。Linux 2.2
CAP_SYS_CHROOT使用 chroot() 系统调用,更改进程的根目录。Linux 2.2
CAP_SYS_MODULE加载和卸载内核模块。Linux 2.2
CAP_SYS_NICE调整进程优先级,例如设置实时调度策略。Linux 2.2
CAP_SYS_PACCT启用或禁用进程审计(Process Accounting)。Linux 2.2
CAP_SYS_PTRACE追踪其他进程,例如通过调试器(如 GDB)进行跟踪或注入代码。Linux 2.2
CAP_SYS_RAWIO执行直接内存访问或原始设备访问操作。Linux 2.2
CAP_SYS_RESOURCE修改系统资源限制(如调整 ulimit 配置)。Linux 2.2
CAP_SYS_TIME修改系统时间或时钟。Linux 2.2
CAP_SYS_TTY_CONFIG修改 TTY 设备的配置,例如设置串行端口属性。Linux 2.2

Docker 默认启用的 Capabilities

Docker 容器默认启用了 14 项 Capabilities:

  1. CAP_AUDIT_WRITE
  2. CAP_CHOWN
  3. CAP_DAC_OVERRIDE
  4. CAP_DAC_READ_SEARCH
  5. CAP_FOWNER
  6. CAP_FSETID
  7. CAP_IPC_LOCK
  8. CAP_IPC_OWNER
  9. CAP_KILL
  10. CAP_LEASE
  11. CAP_MKNOD
  12. CAP_NET_BIND_SERVICE
  13. CAP_NET_RAW
  14. CAP_SETUID

其他 Capabilities 默认被禁用,必须通过 --cap-add 显式启用。


在 Docker 中如何使用 Capabilities?

1. 添加特定权限

如果容器需要额外权限(如管理网络接口),可以通过 --cap-add 启用:

docker run --cap-add=CAP_NET_ADMIN -it ubuntu
2. 移除默认权限

为了更高的安全性,可以通过 --cap-drop 移除某些默认权限:

docker run --cap-drop=CAP_NET_RAW -it ubuntu
3. 移除所有权限

在高安全场景下,可以移除所有权限,仅保留必要权限:

docker run --cap-drop=ALL --cap-add=CAP_NET_BIND_SERVICE -it ubuntu

为什么 Capabilities 对容器安全重要?

  1. 按需授权:避免授予容器过多权限,降低被攻击后的风险。
  2. **最小

权限原则**:容器只能执行特定任务,提升隔离性。
3. 灵活配置:可以根据需要动态调整权限,满足任务需求。


总结

Capabilities 是 Docker 容器隔离的重要技术之一。它将传统 root 权限细化为 38 项小权限,既能满足功能需求,又能最大限度地降低安全风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯备赛笔记(一)

这里的笔记是关于蓝桥杯关键知识点的记录,有别于基础语法,很多内容只要求会用就行,无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout: 1.3 string以下是字符串的一些简介:字符串…

【Redis】Redis介绍

目录 1.Redis是什么? 2. Redis特性 2.1 速度快 2.2 基于键值对的数据结构服务器 2.3 丰富的功能 2.4 简单稳定 2.5 客户端语言多 2.6 持久化 2.7 主从复制 2.8 高可用和分布式 3. Redis使用场景 3.1 缓存(Cache) 3.2 排行榜系统 3.3 计数器应用 3.4 社交网络 …

Redis使用场景-缓存-缓存穿透

前言 之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题,其中缓存穿透、击穿、雪崩在面试中问的最频繁,本文加了图解,希望帮助你更直观的了解缓存穿透😀 (放出之前写的针对实习面试的关于Redis生产问题的博…

STM32 ADC --- 多通道序列采样

STM32 ADC — 序列通道采样 文章目录 STM32 ADC --- 序列通道采样CubeMX配置代码编写总结 CubeMX配置 使用cubeMX生成HAL工程 扫描模式在配置多个通道时会自动变为Enable,这里需要注意的是需要将连续转换模式配置为Disable,将结束转换选择选择为每个通道…

C语言数据结构——详细讲解《队列》

C语言数据结构——详细讲解《队列》 前言一、队列的概念二、队列的操作(一)定义队列结构(二)初始化队列(三)入队列操作(四)出队列操作(五)获取队头元素&#…

【游资悟道】-作手新一悟道心法

作手新一经典语录节选: 乔帮主传完整版:做股票5年,炼成18式,成为A股低吸大神!从小白到大神,散户炒股的六个过程,不看不知道自己水平 围着主线做,多研究龙头,研究涨停&am…

2025年入职/转行网络安全,该如何规划?网络安全职业规划

网络安全是一个日益增长的行业,对于打算进入或转行进入该领域的人来说,制定一个清晰且系统的职业规划非常重要。2025年,网络安全领域将继续发展并面临新的挑战,包括不断变化的技术、法规要求以及日益复杂的威胁环境。以下是一个关…

使用pymupdf提取PDF文档中的文字和其颜色

最近我在捣鼓一个PDF文件,想把它里面的文字和文字颜色给提取出来。后来发现有个叫pymupdf的库能搞定这事儿。操作起来挺简单的,pymupdf的示例文档里就有现成的代码可以参考。 how-to-extract-text-with-color 我本地的测试代码如下: impor…

STM32 + CubeMX + 串口 + IAP升级

这篇文章分享一个简单的串口IAP Demo,实现使用串口更新我们自己的App程序。 目录 一、IAP简介二、Stm32CubeMx配置三、Boot代码及配置1、代码2、配置 四、App代码及配置1、代码2、配置 五、效果展示 一、IAP简介 IAP介绍可以在网上找找,相关资料很多&am…

A051-基于Spring Boot的网络海鲜市场系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

《String类》

目录 一、定义与概述 二、创建字符串对象 2.1 直接赋值 2.2 使用构造函数 三、字符串的不可变性 四、常用方法 4.1 String对象的比较 4.1.1 比较是否引用同一个对象 4.1.2 boolean equals(Object anObject)方法:按照字典序比较 4.1.3 int compareTo(Strin…

探讨播客的生态系统

最近对播客发生了兴趣,从而引起了对播客背后的技术,生态的关注。本文谈谈播客背后的技术生态系统。 播客很简单 播客(podcast)本质上就是以语音的方式发布信息。它和博客非常类似。如果将CSDN 网站上的文字加一个语音播报。CSDN …

@bytemd/vue掘金markdown插件预览内容有误

vue项目使用bytemd/vue 来预览字符串格式的markdown内容,总会多出如图的一段代码, 请问有没有大佬知道为什么? 很急,求教!!!!!

windows下编译IEC 61850依赖库

windows下编译IEC 61850依赖库 0、引言1、环境准备2、源码下载3、下载WpdPack4、生成vs解决方案5、在VS上对解决方案进行编译 0、引言 最近刚好在学习IEC 61850的一些标准规范,主要包含了两大块协议:MMS和GOOSE。61850是一个非常强大的协议,…

科技为翼 助残向新 高德地图无障碍导航规划突破1.5亿次

今年12月03日是第33个国际残疾人日。在当下科技发展日新月异的时代,如何让残障人士共享科技红利、平等地参与社会生活,成为当前社会关注的热点。 中国有超过8500万残障人士,其中超过2400万为肢残人群,视力障碍残疾人数超过1700万…

C++类的自动转换和强制类型转换

目录 一、类型转换 二、转换函数 一、类型转换 C⽀持内置类型隐式类型转换为类类型对象,需要有相关内置类型为参数的构造函数 简单说就是可以将内置类型转化为自定义类型 示例: class Test { public:Test(int n1 0):num1(n1){}void pr…

什么是sfp,onu,​为什么PON(​俗称“光猫”​)模块使用SC光纤接口

在现代网络设备中,我们经常会看到SFP或SFP接口的身影,这些接口有时被简称为光口,但这个称呼并不严谨。有些厂商则称之为多功能口或多用途口,然而这对于不了解的人来说可能还是一头雾水。SFP,即Small Form-Factor Plugg…

【Linux】线程池设计 + 策略模式

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 线程池 1-1 ⽇志与策略模式1-2 线程池设计1-3 线程安全的单例模式1-3-1 什么是单例模式1-3-2 单例模式的特点1-3-3 饿汉实现⽅式和懒汉实现⽅式1-3-4 饿汉…

flutter项目AndroidiOS自动打包脚本

从业数年余,开发出身,经数载努力位项目经理,因环境欠佳,终失业.失业达七月有余,几经周转,现又从开发,既回原点亦从始.并非与诸位抢食,仅为糊口,望海涵!因从头开始,所经之处皆为新奇,遂处处留痕以备日后之需. 自动打包脚本原文地址:https://zhuanlan.zhihu.com/p/481472311 转…

循环神经网络:从基础到应用的深度解析

🍛循环神经网络(RNN)概述 循环神经网络(Recurrent Neural Network, RNN)是一种能够处理时序数据或序列数据的深度学习模型。不同于传统的前馈神经网络,RNN具有内存单元,能够捕捉序列中前后信息…