【Docker基础】Docker核心概念:命名空间(Namespace)之User详解

目录

引言

1 基础概念回顾

1.1 命名空间概述

1.2 命名空间的类型

2 User命名空间详解

2.1 基本概念

2.2 工作原理

User命名空间的工作流程

User命名空间架构

3 应用场景

4 配置与使用

5 总结


引言

随着容器化技术的广泛应用,Docker已成为现代软件开发、部署与运维的重要工具。在Docker的底层实现中,Linux命名空间(Namespace)技术为容器提供了资源隔离的基础,使得多个容器可以在同一宿主机上独立运行,互不干扰。其中,User命名空间作为实现容器安全隔离的关键组件,通过用户ID的映射机制,极大地增强了容器的安全性。

1 基础概念回顾

1.1 命名空间概述

  • 命名空间是Linux内核提供的一种资源隔离机制,它允许将全局资源封装在独立的命名空间中,使得不同命名空间内的进程无法直接访问或干扰其他命名空间内的资源
  • 这种隔离机制为容器提供了独立的运行环境,使得容器内的进程就像运行在一个独立的操作系统中一样

1.2 命名空间的类型

Linux 内核提供了多种类型的命名空间,每种命名空间负责隔离不同类型的资源。常见的命名空间类型包括:
  • Mount Namespace(MNTNamespace):隔离文件系统挂载点
  • UTS Namespace:隔离主机名和域名
  • IPC Namespace:隔离进程间通信资源(如消息队列、共享内存等)
  • PID Namespace:隔离进程ID
  • Network Namespace:隔离网络接口、IP地址、路由表等网络资源
  • User Namespace:隔离用户ID和组ID

2 User命名空间详解

2.1 基本概念

  • User命名空间的核心在于它允许容器内的用户和组ID与宿主机上的用户和组ID不同
  • 在容器内以root用户运行的进程,在宿主机上可能对应一个非特权用户,这种差异通过用户ID的映射实现,极大地增强了容器的安全性
  • 即使容器内的root用户尝试进行特权操作,这些操作在宿主机上也会被限制为普通用户的权限,从而防止了潜在的安全威胁

2.2 工作原理

User命名空间通过映射容器内的用户和组ID到宿主机上的用户和组ID来实现隔离,这种映射关系在创建User命名空间时定义,并可以在容器启动时通过特定的配置选项来指定
  • 映射定义:在宿主机上,需要预先定义一个映射规则,这个映射规则通常存储在/etc/subuid/etc/subgid文件中,Docker守护进程在启动时会读取这些文件来获取映射信息
  • 命名空间创建:当容器启动时,Docker会根据映射规则创建一个新的User命名空间
  • 权限隔离:在容器内,进程看到的用户和组ID是映射后的值,即使容器内的进程以root身份运行,它们在宿主机上看到的也是映射后的非特权用户ID

User命名空间的工作流程

  • 宿主机:运行Docker守护进程的主机,负责管理容器的生命周期
  • 读取用户ID映射规则:Docker守护进程在启动时读取/etc/subuid/etc/subgid文件,获取用户ID映射规则
  • 创建User命名空间:根据映射规则,Docker为容器创建一个新的User命名空间
  • 定义用户ID映射:在User命名空间中,定义容器内用户ID与宿主机用户ID之间的映射关系
  • 容器启动:Docker根据配置启动容器,容器内的进程将在User命名空间中运行
  • 容器内进程以root身份运行:在容器内部,进程以root用户身份执行
  • 映射到宿主机上的非特权用户:容器内的root用户ID被映射到宿主机上的一个非特权用户ID
  • 执行特权操作(受限):容器内的进程尝试执行特权操作
  • 操作在宿主机上表现为普通用户权限:由于User命名空间的隔离,这些特权操作在宿主机上被限制为普通用户的权限
  • 操作结果返回容器:操作的结果(如成功或失败)被返回给容器内的进程

User命名空间架构

  • 宿主机:包含Docker守护进程、User命名空间管理器、用户ID映射表和宿主机内核
  • Docker守护进程:负责管理容器的生命周期,包括创建、启动、停止等操作
  • User命名空间管理器:负责创建和管理User命名空间,以及维护用户ID映射表
  • 用户ID映射表:存储容器内用户ID与宿主机用户ID之间的映射关系
  • 宿主机内核:提供命名空间等底层支持,确保容器内的进程在隔离的环境中运行
  • 容器:包含容器内进程和User命名空间
  • 容器内进程:在容器内部运行的进程,它们看到的用户ID是映射后的值
  • User命名空间:为容器内进程提供用户ID隔离的环境,确保容器内的特权操作不会影响到宿主机
  • 映射后的用户ID:容器内进程看到的用户ID是经过映射后的值,与宿主机上的实际用户ID不同

3 应用场景

User命名空间在以下场景中尤为重要:
  • 增强安全性:通过限制容器内root用户的权限,减少潜在的安全风险。即使容器内的进程被攻击者控制,它们也无法在宿主机上执行特权操作,从而防止了数据泄露、系统破坏等安全事件
  • 多租户环境:在多租户环境中,确保不同租户的容器不会相互干扰或访问宿主机上的敏感资源,每个租户的容器都运行在自己的User命名空间中,拥有独立的用户ID映射,从而实现了租户间的资源隔离
  • 开发测试:在开发测试环境中,允许开发者以root身份在容器内进行操作,而不会影响到宿主机。这提高了开发效率,同时保证了宿主机的安全性
  • 合规性要求:在某些行业或应用场景中,可能存在严格的合规性要求,要求应用程序在隔离的环境中运行

4 配置与使用

在Docker中,可以通过以下方式配置和使用User命名空间:
  • 启用User命名空间:在Docker守护进程的配置文件中设置userns-remap选项,指定一个映射规则
  • 验证配置:重启Docker守护进程后,使用docker info命令验证User命名空间是否已启用
  • 运行容器:使用docker run命令启动容器,容器内的进程将自动在User命名空间中运行。此时,容器内的root用户将对应宿主机上的非特权用户
  • 查看映射关系:可以使用id命令在容器内查看当前进程的用户ID,然后与宿主机上的用户ID进行对比,以验证映射关系是否正确

5 总结

  • User命名空间是Docker实现容器安全隔离的关键技术之一
  • 通过映射容器内用户和组ID到宿主机上的用户和组ID,User命名空间有效地限制了容器内特权操作的影响范围,增强了容器的安全性

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

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

相关文章

DIDCTF-应急响应

前言 最近在学长分享应急响应与电子取证的知识,又恰逢期末周没有课,记录自己在取证道路的成长。 linux-basic-command 下载附件,得到Apache 服务器访问日志文件,根据题目要求找出排名前五的ip,题目提示写脚本&#…

MybatisPlus深入学习

今天深入的学习了一下mp,从头开始学习!哈哈哈哈哈 本节只讲干的! 我们上来先看一段代码,不知道你能不能看明白! package com.itheima.mp.mapper;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapp…

安卓9.0系统修改定制化____安卓9.0系统精简 了解系统app组件构成 系统app释义 常识篇 一

在安卓 9.0 系统的使用过程中,许多用户都希望能够对系统进行深度定制,让手机系统更加贴合个人需求。而系统精简作为定制化的重要一环,不仅能够释放手机存储空间,还能提升系统运行速度,优化资源分配。想要安全有效地对安卓 9.0 系统进行精简,深入了解系统 app 组件的构成是…

2.4 Windows Conan编译FFmpeg 4.4.1

Conan的安装与使用参考之前的文章:Conan简单使用 一、Conan编译ffmpeg 1.1 Conan的配置文件 创建配置文件:C:\Users\wujh\.conan2\profiles\vs2019 [settings] archx86_64 build_typeRelease compilermsvc compiler.cppstd14 compiler.runtimedynami…

社群经济视域下开源链动2+1模式与AI智能名片赋能S2B2C商城小程序的创新发展研究

摘要:在数字经济蓬勃发展的背景下,社群经济作为连接用户情感与价值反哺的新型经济形态,正通过技术创新与模式重构实现深度演化。本文基于社群经济“创造有价值连接”的本质特征,系统探讨“开源链动21模式”“AI智能名片”与“S2B2…

【计算机网络】——reactor模式高并发网络服务器设计

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹:【计算机网络】非阻塞IO——epoll 编程与ET模式详解——(easy)高并发网络服务器设计 🔖流水不…

Uniapp跨端兼容性全方位解决方案

在当今多端融合的移动互联网时代,Uniapp作为一款优秀的跨平台开发框架,已成为许多开发者的首选。然而,真正的挑战在于如何优雅地处理不同平台之间的差异。本文将全面剖析Uniapp跨端开发的兼容性处理方案,提供从基础到高级的完整解…

迅为RK3576开发板NPUrknn-toolkit2环境搭建和使用docker环境安装

开发板采用核心板底板结构,在我们的资料里提供了底板的原理图工程以及PCB工程,可以实现真正意义上的裁剪、定制属于自己的产品,满足更多应用场合。 迅为针对RK3576开发板整理出了相应的开发流程以及开发中需要用到的资料,并进行详…

什么是 OpenFeigin ?微服务中的具体使用方式

什么是Feign? Feign 是一种声明式的 HTTP 客户端框架,主要用于简化微服务架构中服务之间的远程调用,也可以通过定义接口和注解的方式调用远程服务,无需手动构建 HTTP 请求或解析响应数据。Spring Cloud 对 Feign 进行了增强&…

对抗性提示:进阶守护大语言模型

人工智能模型正快速进化 —— 变得更具帮助性、更流畅,并且更深入地融入我们的日常生活和商业运营中。但随着其能力的提升,风险也在增加。在维护安全可信的人工智能方面,最紧迫的挑战之一是对抗性提示:这是一种微妙且通常富有创意…

运营商频段

以下是三大运营商(中国移动、中国电信、中国联通)及中国广电的 5G 主要频段 及其所属运营商的整理表格: 运营商频段上行频率 (MHz)下行频率 (MHz)带宽备注广电n28703-733758-788230MHz移动共享n794900-4960-60MHz-移动n412515-2675-160MHz-n7…

项目拓展-Apache对象池,对象池思想结合ThreadLocal复用日志对象

优化日志对象创建以及日志对象复用 日志对象上下文实体类 traceId 请求到达时间戳 请求完成时间戳 请求总共耗费时长 get/post/put/delete请求方式 Http状态码 原始请求头中的所有键值对 请求体内容 响应体内容 失败Exception信息详细记录 是否命中缓存 package c…

Javaweb - Vue入门

Vue是一款用于构建用户界面的渐进式的JavaScript框架。 使用步骤 引入Vue模块,创建Vue的应用实例,定义元素,交给Vue控制。 一、引入Vue模块 因为使用的是模块化的JavaScript,因此在script标签内要声明一个属性:typ…

C++ 标准模板库各个容器的应用场景分析

C 标准模板库(STL)中的容器分为序列式容器、关联式容器和无序容器,各自适用于不同场景。以下是主要容器的应用场景及案例: 一、序列式容器 元素按插入顺序存储,支持线性访问。 1. vector 场景:动态数组…

安装前端vite框架,后端安装fastapi框架

前期准备 首先新建一个文件夹,文件夹里面新建一个文件夹,用于安装依赖 安装vite框架 npm init -y 目的是安装package.json配置文件 npm install vite --save-dev 安装vite框架 安装完是这个样子 新建了一个文件夹和js文件 后端内容 main.js document.…

深度学习:基础与概念(第1章:深度学习革命)

目录 第1章:深度学习革命 1.1深度学习的影响 1.1.1医疗诊断 1.1.2蛋白质结构预测 1.1.3图像合成 1.1.4大语言模型 1.2一个教学示例 1.2.1合成数据 1.2.2线性模型 1.2.3误差函数 1.2.4模型复杂度 1.2.5正则化 1.2.6模型选择 1.3机器学习简史 1.3.1单层…

通过触发器统计访问数据库的客户端IP地址

通过触发器统计访问数据库的客户端IP地址 创建用户登录审计表创建登录审计触发器查看登录审计结果禁用和启用触发器创建用户登录审计表 创建记录表: create table appuser1.user_login_audit (login_time DATE,session_id number,username VARCHAR2(30),os_user VARCHAR2(30…

在MCU上的1微秒的延迟实现方案及测量方法

运行环境: stm32h743iit6; 主频480MHz; APB1; 240MHz; TIM5 240MHz; 预分频系数为1; 定时器计数频率240MHz; 应用需求:实现软件模拟IIC,延迟精度2个微秒; 量变引起质变,当延迟粒度太小时,需要考…

macos电脑本地搭建mistral-7b大模型出现4-bit量化和缓存不足问题的记录

问题背景 本人想再本地笔记本电脑上搭建一个mistral-7b的大模型,在搭建的过程中,出现了4-bit量化模式无法处理的问题,以及电脑内存/显存不足的问题,导致无法搭建 电脑硬件信息 名称:2019 Mac book pro 内存&#xff1a…

C# 基础知识总结(带详细文字说明)

1. 基础语法结构 C# 程序由命名空间、类和方法组成。每个程序必须有一个 Main 方法作为入口点。using 指令用于导入命名空间,Console.WriteLine() 是常用的输出方法。 csharp 复制 下载 using System; // 引入核心命名空间class Program // 类定义 {static v…