【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
英文地址,請注明出處:http://en.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…