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

docker 运行时权限和 Linux 能力了解

文档参考:
https://docs.docker.com/engine/containers/run/#runtime-privilege-and-linux-capabilities
https://docs.docker.com/reference/cli/docker/container/run/#privileged

本片主要了解容器在运行时如何赋予的格外的权限,默认情况下,Docker 容器是“非特权”的,无法,对于 示例,在 Docker 容器内运行 Docker 守护进程。这是因为 默认情况下,容器不允许访问任何设备,但可以 特权容器被授予访问所有设备的权限

docker run 选项:

  • --cap-add 添加 Linux 功能
  • --cap-drop 丢弃 Linux 权限
  • --privileged 给此容器赋予扩展权限
  • --device=[] 允许您在容器内运行设备而不需要使用 –privileged 标志。

一、privileged 权限

使用 --privileged 标志将所有权限赋予容器。当操作员执行 docker run --privileged 时,Docker 将启用对主机上所有设备的访问,并重新配置 AppArmor 或 SELinux 以允许容器几乎与主机上运行在容器外的进程相同的访问权限。

--privileged 标志给容器以下权限:

  • 启用所有 Linux 内核功能
  • 禁用默认的 seccomp 配置文件
  • 禁用默认的 AppArmor 配置文件
  • 禁用 SELinux 进程标签
  • 允许访问所有主机设备
  • 使 /sys 可读写
  • 使 cgroups 挂载可读写

seccomp(Secure Computing Mode) 是 Linux 内核的一种安全机制,用于限制进程可以调用的系统调用集,本质上是linux系统调用的防火墙。
AppArmor(Application Armor)是一个 Linux 内核安全模块,它提供强制访问控制(MAC,Mandatory Access Control)功能。AppArmor 通过定义安全策略来限制程序可以访问的资源,从而增强系统的安全性。它是一种轻量级、灵活且易于配置的强制访问控制系统,旨在保护系统免受恶意软件和攻击者的侵害。
使 /sys 可读写 意味这容器可以获取主机以下权限:

  1. 读取系统信息:用户空间程序可以读取 /sys 中的文件来获取关于系统硬件、驱动程序状态、内核参数等信息。
  2. 修改系统设置:用户空间程序可以写入 /sys 中的文件来改变系统的运行时参数,例如调整 CPU 频率、设置电源管理策略、配置网络设备等。
  3. 设备控制:对于某些设备,/sys 文件系统提供了控制接口,允许用户空间程序直接控制硬件设备的行为。

使 cgroups 挂载可读写意味着赋予容器对宿主机 cgroups 文件系统的访问权限,这将允许容器内的进程对 cgroups 进行读取和修改操作。具体来说,这可能包括:

  1. 读取系统信息:容器可以读取 cgroups 中的文件来获取关于系统资源使用情况的信息,例如 CPU、内存、磁盘 I/O 等。
  2. 修改系统设置:容器可以写入 cgroups 中的文件来改变系统的运行时参数,例如调整 CPU 频率、设置内存限制、配置网络设备等
  3. 设备控制:对于某些设备,cgroups 文件系统提供了控制接口,允许用户空间程序直接控制硬件设备的行为

二、device 权限

如果您想限制对特定设备或设备的访问,可以使用 --device 标志。这允许您指定一个或多个,在容器内可访问的设备。
例如:

docker run --device=/dev/snd:/dev/snc

这将把宿主机的/dev/snd设备映射到容器/dev/snc,如果不指定容器的设备名,默认会创建跟宿主机一样的设备名。如果想要指定将宿主机多个设备映射到容器中,可以指定多个–device,例如:

docker run --device=/dev/snd --device=/dev/snc ...

你还可以指定映射到容器中的设备的权限,权限有 读取、写入和 mknod,可以使用rwm代替。

mknod 权限允许容器内的进程创建新的设备文件。这是一项强大的权限,因为它可以允许容器内的进程创建新的设备节点,这可能会影响宿主机的设备访问和系统安全性。

例如:

docker run --device=/dev/snd:/dev/snd:rwm

三、 cap-add 向容器追加权限,cap-drop 删除容器权限。

cap-addcap-drop 可以更加精细的控制容器的权限,如果直接使用privileged 将直接覆盖cap-add=ALL 的所有权限。

默认情况下,Docker 保留了一个默认的能力列表。下表列出了默认允许并可删除的 Linux 能力选项。

支持 docker run --cap-drop=ALL 卸载所有权限或者 docker run --cap-drop=ALL --cap-add=SETFCAP 保留SETFCAP权限。

功能键功能描述
AUDIT_WRITE将记录写入内核审计日志。
CHOWN随意更改文件的所有者和组 ID(参见 chown(2))。
DAC_OVERRIDE跳过文件读、写、执行权限检查。
FOWNER跳过对通常需要进程文件系统 UID 与文件 UID 匹配的操作的权限检查。
FSETID当文件被修改时,不要清除设置用户 ID 和设置组 ID 权限位。
KILL跳过发送信号的权限检查。
MKNOD使用 mknod(2)创建特殊文件。
NET_BIND_SERVICE将套接字绑定到互联网域的特权端口(端口号小于1024)。
NET_RAW使用 RAW 和 PACKET 套接字。
SETFCAP设置文件权限。
SETGID进行进程 GID 和补充 GID 列表的任意操作。
SETPCAP修改进程能力。
SETUID对进程 UID 进行任意操作。
SYS_CHROOT使用 chroot(2),更改根目录。

下表显示了默认未授权且可能添加的功能。

支持 docker run --cap-add=ALL 添加以下所有权限或者 docker run --cap-add=ALL --cap-drop=MKNOD 除了MKNOD

功能键功能描述
AUDIT_CONTROL启用和禁用内核审计;更改审计过滤器规则;检索审计状态和过滤规则。
AUDIT_READ允许通过多播 netlink 套接字读取审计日志。
BLOCK_SUSPEND允许防止系统挂起。
BPF允许创建 BPF 映射、加载 BPF 类型格式(BTF)数据、检索 BPF 程序的 JIT 代码等。
CHECKPOINT_RESTORE允许检查点/恢复相关操作。自内核 5.9 版本引入。
DAC_READ_SEARCH绕过文件读取权限检查和目录读取执行权限检查。
IPC_LOCK锁定内存(mlock(2)、mlockall(2)、mmap(2)、shmctl(2))。
IPC_OWNER绕过对 System V IPC 对象操作的权限检查。
LEASE在任意文件上建立租约(参见 fcntl(2))。
LINUX_IMMUTABLE设置 FS_APPEND_FL 和 FS_IMMUTABLE_FL i 节点标志。
MAC_ADMIN允许 MAC 配置或状态更改。为 Smack LSM 实现。
MAC_OVERRIDE覆盖强制访问控制(MAC)。为 Smack Linux 安全模块(LSM)实现。
NET_ADMIN执行各种网络相关操作。
NET_BROADCAST进行套接字广播,并监听多播。
PERFMON允许使用 perf_events、i915_perf 和其他内核子系统执行系统性能和可观测性特权操作
SYS_ADMIN执行一系列系统管理操作。
SYS_BOOT使用 reboot(2) 和 kexec_load(2),重启并加载新的内核以供后续执行
SYS_MODULE加载和卸载内核模块。
SYS_NICE提高进程优先级(nice(2),setpriority(2))并更改任意进程的优先级。
SYS_PACCT使用 acct(2),开启或关闭进程会计。
SYS_PTRACE使用 ptrace(2)跟踪任意进程。
SYS_RAWIO执行 I/O 端口操作(iopl(2)和 ioperm(2))。
SYS_RESOURCE覆盖资源限制。
SYS_TIME设置系统时钟(settimeofday(2),stime(2),adjtimex(2));设置实时(硬件)时钟。
SYS_TTY_CONFIG使用 vhangup(2);在虚拟终端上使用各种特权 ioctl(2)操作。
SYSLOG执行特权 syslog(2)操作。
WAKE_ALARM触发某个将唤醒系统的事件。

相关文章:

docker 运行时权限和 Linux 能力了解

文档参考: https://docs.docker.com/engine/containers/run/#runtime-privilege-and-linux-capabilities https://docs.docker.com/reference/cli/docker/container/run/#privileged 本片主要了解容器在运行时如何赋予的格外的权限,默认情况下&#xff0…...

图纸安全防护管理:构建企业核心竞争力的关键屏障

在当今高度竞争的商业环境中,图纸作为企业核心技术的重要载体,其安全防护管理已成为企业知识产权保护体系中的关键环节。无论是建筑行业的施工蓝图、制造业的产品设计图,还是高科技企业的研发图纸,都承载着企业的核心竞争力和商业…...

如何用WordPress AI插件自动生成SEO文章,提升网站流量?

1. 为什么你需要一个WordPress AI文章生成插件? 每天手动写文章太耗时?SEO优化总是不达标?WordPress AI插件能帮你24小时自动生成原创内容,从关键词挖掘到智能排版,全程无需人工干预。 痛点:手动写作效率低…...

借助内核逻辑锁pagecache到内存

一、背景 内存管理是一个永恒的主题,尤其在内存紧张触发内存回收的时候。系统在通过磁盘获取磁盘上的文件的内容时,若不开启O_DIRECT方式进行读写,磁盘上的任何东西都会被缓存到系统里,我们称之为page cache。可以想象&#xff0…...

Nacos简介—2.Nacos的原理简介

大纲 1.Nacos集群模式的数据写入存储与读取问题 2.基于Distro协议在启动后的运行规则 3.基于Distro协议在处理服务实例注册时的写路由 4.由于写路由造成的数据分片以及随机读问题 5.写路由 数据分区 读路由的CP方案分析 6.基于Distro协议的定时同步机制 7.基于Distro协…...

【信息系统项目管理师】高分论文:论人力资源管理与成本管理(医院信息系统)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文一、规划人力资源管理二、组建项目团队三、建设项目团队四、管理项目团队论文 一个完善的医院信息系统通常由上百个子系统构成,而这些系统随着医院发展需求逐步建设的,他们来源于不同厂家,基于不同的技…...

Docker Compose和 Kubernetes(k8s)区别

Docker Compose 和 Kubernetes(k8s)是两种不同层次的容器编排工具,主要区别体现在设计目标、使用场景和功能特性上。以下是它们的核心对比: 1. 设计目标 Docker Compose 单机编排:专注于在单个主机上定义和运行多容器应…...

IP查询专业版:支持IPv4/IPv6自动识别并切换解析的API接口使用指南

以下是根据您提供的网页内容编辑的符合CSDN内容发布要求的Markdown格式文本: 一、API概述 在开发过程中,我们常常需要对IP地址进行查询,以获取其详细信息,如地理位置、运营商等。万维易源的“IP查询专业版”API接口能够提供丰富…...

Spring Boot中的监视器:Actuator的原理、功能与应用

在 Spring Boot 应用中,监视器通常指 Spring Boot Actuator,一个内置的生产就绪工具,用于监控和管理运行中的应用。Actuator 提供了一系列 RESTful 端点,暴露应用的运行时信息,如健康状态、性能指标、日志配置和环境变…...

P12167 [蓝桥杯 2025 省 C/Python A] 倒水

P12167 [蓝桥杯 2025 省 C/Python A] 倒水 题目描述 小蓝有 n n n 个装了水的瓶子,从左到右摆放,第 i i i 个瓶子里装有 a i a_i ai​ 单位的水。为了美观,小蓝将水循环染成了 k k k 种颜色,也就是说,第 i i i …...

TCP协议理解

文章目录 TCP协议理解理论基础TCP首部结构图示字段逐项解析 TCP是面向连接(Connection-Oriented)面向连接的核心表现TCP 面向连接的核心特性TCP 与UDP对比 TCP是一个可靠的(reliable)序号与确认机制(Sequencing & Acknowledgment&#xf…...

用 LangChain 手搓 RAG 系统:从原理到实战

一、RAG 系统简介 在当今信息爆炸的时代,如何高效地从海量数据中获取有价值的信息并生成准确、自然的回答,成为了人工智能领域的重要课题。检索增强生成(Retrieval-Augmented Generation,RAG)系统应运而生,…...

联合体和枚举类型

1.联合体类型 1.1:联合体类型变量的创建 与结构体类型一样,联合体类型 (关键字:union) 也是由⼀个或者多个成员变量构成,这些成员变量既可以是不同的类型,也可以是相同的类型。但是编译器只为最⼤的成员变量分配⾜够的内存空间。联合体的特…...

一种企业信息查询系统设计和实现:xujian.tech/cs

一种企业信息查询系统设计和实现:xujian.tech/cs 背景与定位 企业在对外合作、风控审查或市场调研时,常需快速获取公开的工商信息。本文介绍一个企业信息搜索引擎,面向普通用户与开发者,帮助快速定位企业名称、统一社会信用代码…...

C语言指针5

1.void*概述 void称为无类型,void*称为无类型指针,void不可以单独定义变量,却可以定义无类型的指针,而且所定义的指针称为泛型指针,所谓泛型指针,其含义是void*类型的指针可以接收一切类型变量的地址 struc…...

[4A/OP]

2.2 安装程序 2.2.1 解压缩.tar.gz文件 调用UNIX命令tar会在当前目录下创建4A/OP子例程主目录4AOP-1.5/,包括所有必要的子目录。只需键入以下命令即可解压缩和“untar”4AOP-1.5.tar.gz: tar -xzvf 4AOP-1.5.tar.gz4AOP-1.5/目录现在应该已经创建&…...

来云台跑腿配送平台:用户体验至上的服务理念

来云台跑腿配送平台始终秉持用户体验至上的服务理念,从下单到收货的每一个环节,都致力于为用户提供优质、便捷的服务。​ 简洁的下单流程是良好体验的开端。用户通过 APP 或小程序,只需几步操作就能完成下单。清晰的服务分类、自动定位功能和…...

本地部署 Dify + Ollama 到 D盘,并挂载本地大模型 的完整教程,结合 Docker 运行环境

一、环境准备 1. 软件与硬件要求 • 操作系统:Windows 10/11 专业版(需开启 Hyper-V) • 硬件配置: • CPU ≥ 4核(推荐 Intel i5 及以上) • 内存 ≥ 16GB(大模型运行需预留 8GB 以上&#…...

文档构建:Sphinx全面使用指南 — 强化篇

文档构建:Sphinx全面使用指南 — 强化篇 Sphinx 是一款强大的文档生成工具,使用 reStructuredText 作为标记语言,通过扩展兼容 Markdown,支持 HTML、PDF、EPUB 等多种输出格式。它具备自动索引、代码高亮、跨语言支持等功能&#…...

深度理解C语言函数之strlen()的模拟实现

文章目录 前言一、strlen的模拟实现二、模拟实现代码及思路2.1 计数法2.2 指针相减法三、递归计数法 总结 前言 我写这篇文章的目的主要是帮助理解C语言中重要函数的用法,后面也会总结C相关的函数的模拟实现,这里的算法不一定是最好的,因为只…...

0基础 | Proteus仿真 | 51单片机 | 继电器

继电器---RELAY 本次选择一款5v一路继电器进行讲解 信号输入 IN1输入高电平,三极管导通,LED1点亮,电磁铁12接通吸引3向下与4接通,J1A的12接通 IN1输入低电平,则J1A的23接通 产品引脚定义及功能 序号 引脚符号 引脚…...

Python解析地址中省市区街道

Python解析地址中省市区街道 1、效果 输入:海珠区沙园街道西基村 输出: 2、导入库 pip install jionlp3、示例代码 import jionlp as jiotext 海珠区沙园街道西基村 res jio.parse_location(text, town_villageTrue) print(res)...

在vscode终端中运行npm命令报错

解决方案 这个错误信息表明,你的系统(可能是 Windows)阻止了 PowerShell 执行脚本,这是由于 PowerShell 的执行策略导致的。PowerShell 的执行策略控制着在系统上运行哪些 PowerShell 脚本。默认情况下,Windows 可能…...

提升变电站运维效率:安科瑞无线测温系统创新应用

一、引言 变电站作为电力系统的关键枢纽,承担着变换电压、分配电能以及控制电力流向等重要任务。在变电站的运行过程中,电气设备的接点温度监测至关重要。过热问题可能由多种因素引发,如电阻过大、接头质量欠佳、衔接不紧密、物理老化等&…...

vue3 使用 vite 管理多个项目,实现各子项目独立运行,独立打包

场景: 之前写过一篇 vite vue2 的配置,但是现在项目使用 vue3 较多,再更新一下 vue脚手架初始化之后的项目,每个项目都是独立的,导致项目多了之后,node依赖包过多,占用内存较多。想实现的效果…...

WebRTC服务器Coturn服务器用户管理和安全性

1、概述 Coturn服务器对用户管理和安全方面也做了很多的措施,以下会介绍到用户方面的设置 1.1、相关术语 1.1.1 realm 在 coturn 服务器中,域(realm)是一种逻辑上的分组概念,用于对不同的用户群体、应用或者服务进行区…...

如何使用极狐GitLab 的外部状态检查功能?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 外部状态检查 (ULTIMATE ALL) pending 状态引入于极狐GitLab 16.5 pending 状态检查的超时时间为两分钟引入于极狐GitLab 16…...

如何在 Element UI 中优雅地使用 `this.$loading` 显示和隐藏加载动画

如何在 Element UI 中优雅地使用 this.$loading 显示和隐藏加载动画 在现代 Web 应用开发中,用户体验至关重要。当执行耗时操作(如网络请求或数据处理)时,显示一个友好的加载动画可以让用户知道系统正在工作,而不是卡…...

大模型微调 - 自注意力机制

一.什么是自注意力机制 注意力机制(Attention Mechanism)是一种能够根据输入的相关性动态分配权重的机制,广泛应用于自然语言处理、计算机视觉等领域。其核心思想是:“让模型在处理当前元素时,关注与其最相关的其他部…...

TDengine 集群高可用方案设计(二)

四、TDengine 集群高可用方案设计 4.1 硬件与网络架构设计 服务器选型:选择配置高、稳定性强的服务器,如戴尔 PowerEdge R740xd、华为 RH2288H V5 等。以戴尔 PowerEdge R740xd 为例,它配备英特尔至强可扩展处理器,具备高性能计…...