linux user namespace 和cgroup

Linux的命名空间 命名空间提供了虚拟化的一种轻量级形式,使得我们可以从不同的方面来查看运行系统的全局属性。 一、基本概念 命名空间(Linux namespace)是linux内核针对实现容器虚拟化映入的一个特性。我们创建的每个容器都有自己的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样,命名空间保证了容器之间互不影响。 Linux的命名空间机制提供了一种资源隔离的解决方案。PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。Namespace是对全局系统资源的一种封装隔离, 阅读详情

user namespace

用户命名空间 提供了普通权限映射root权限的能力,但这个root权限只是在子命名空间中的虚构,需要配合其他的命名空间。本身不具有操作父命名空间真实root资源的能力。
在这里插入图片描述
这里的source主要是文件系统资源,因为硬件资源应该是通过cgroup的机制限制的。
图中有点不准确,root映射的root的子user namespace是外部的普通进程。这里的普通是指uid为0但capabilities为空,可以读写很多root创建的文件。

正常用户都需要在user ns中映射自己的用户,不映射默认uid = 65534。映射之后存在文件资源访问限制的机制,如上图。user ns提供了上层构建内核系统的能力。

chr.c

#include <unistd.h>
 int main(){
char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};
char *envp[ ]={"PATH=/bin", NULL};  
int ret = chroot("./newroot");
printf("error %d \n",ret);
chdir("/");
execve("/bin/ls", argv, envp);
}

gcc chr.c -o chr

lier@lier-virtual-machine:~/qemu$ sudo chroot newroot/ /bin/ls
a.out    bin      lib      linuxrc  ns.c     sbin     usr
lier@lier-virtual-machine:~/qemu$ sudo ./chr
error 0 
ls: /etc/passwd: No such file or directory
lier@lier-virtual-machine:~/qemu$ unshare --user -r /bin/bash
root@lier-virtual-machine:~/qemu# ./chr
error 0 
ls: /etc/passwd: No such file or directory
root@lier-virtual-machine:~/qemu# exit
exit
lier@lier-virtual-machine:~/qemu$ ./chr
error -1 
-rw-r--r-- 1 root root 2287 Nov 14 10:12 /etc/passwd
lier@lier-virtual-machine:~/qemu$ 

可以看到,成功的利用映射的root切换根目录。命令找不到参数,因为新的目录里缺少一个参数。

小结

user命名空间应该就是基于用户账户的权限隔离方式。同一个文件在不同的命名空间读到的内容可能不同,要么就干脆不能读。某用户启动的进程启父命名空间拥有子命名空间的所有权限。主要是针对子命名空间的root账户而言,因为父命名空间中的root账户创建的内容,本层的其他账户本身不可写。

子命名空间中能不能执行可执行文件,完全取决于可执行文件可执行属性其他组的标志是否允许。

cgroup

在这里插入图片描述

cgroup 通过控制族群、层级的概念限制进程对资源的访问。

进程task_struct 和 cgroup存在多对多的概念,通过struct css_set结构联系。

每个cgroup存在susys子系统,用来描述被限制的资源。

cgroup文件系统

在这里插入图片描述
cgroup文件系统提供用户态配置cgroup内核的能力,系统默认挂载在/sys/fs/cgroup文件加下,通过mkdir建立配置项。新建目录下自动生成配置文件,与内核数据结构关联。也可以手动挂载在其他目录,用法相同。

Linux Namespace 深度拆解:从容器隔离原理到云原生排障实战 容器技术之所以能成为云原生时代的基石,核心并非硬件虚拟化,而是 Linux 内核提供的进程视角隔离机制。理解这一机制,是掌握 Docker、Kubernetes 底层逻辑和排查容器运行异常的关键前提。内核通过 Namespace 为进程组创建独立的资源视图,涵盖进程号、挂载点、网络协议栈、主机名等维度,使容器内的进程仿佛运行于独立的操作系统之中。本文从内核原理出发,梳理 8 种 Namespace 的隔离对象与适用场景,并通过 unshare 命令手动构建一个不依赖 Docker 的伪容器,直观还原容器创建 阅读详情

相关推荐

Docker容器原理深度解析:Namespace与Cgroup如何实现虚拟化替代

容器技术是当前云原生与后端工程实践的核心基石,它通过操作系统级虚拟化取代了传统虚拟机的硬件模拟模式。理解容器隔离机制,离不开Linux内核的两大技术支柱:Namespace负责隔离进程视野,Cgroup负责限制资源使用。相比虚拟机需要模拟完整硬件并运行独立Guest OS,容器共享宿主机内核,在镜像体积、启动速度与资源利用率上具备显著优势,特别适用于微服务部署、CI/CD流水线、中间件快速拉起等场景。在生产环境中,容器化与虚拟机也并非互斥,Kubernetes集群节点依然可以通过容器运行时支撑上层编排能力。

weixin_30768881的博客 269

Linux ns 1. User Namespace 详解

文章目录1. 简介2. user namespace的创建2.1 原理介绍2.2 操作实例2.3 代码分析3. `uid/gid`隔离3.1 原理介绍3.2 操作实例3.3 代码分析3.2.1 map_write()3.2.2 getuid()3.2.3 stat64()3.2.4 acl_permission_check()4. `capability`隔离4.1 原理介绍4.2 操作实例4.3 代码分析4.3.1 ns_capable()4.3.2 cap_bprm_set_creds()参考文档: 1

pwl999的博客 4041

Docker底层基石namespace与cgroup

Docker是使用容器container的平台,容器其实只是一个隔离的进程,除此之外啥都没有。这个进程包含一些封装特性,以便和主机还有其他的容器隔离开。一个容器依赖最多的是它的文件系统也就是image,image提供了容器运行的一切包括 code or binary, runtimes, dependencies, and 其他 filesystem 需要的对象。容器在Linux上本地运行,并与其他容器共享主机的内核。它运行一个独立的进程,占用的内存不比其他的filesystem多,因此它是轻量级的。

lingshengxiyou的博客 741

linux命名空间及底层原理的简单释义

Linux命名空间(Linux Namespaces)是Linux内核提供的一种隔离机制,用于将系统资源(如进程、网络、文件系统、用户等)隔离成不同的视图,使得不同的进程组在不同的命名空间中具有独立的资源视图。2、目录结构的虚拟化:文件系统命名空间通过虚拟化技术将物理文件系统的目录结构映射到逻辑上的命名空间中,使得用户可以以更直观的方式来访问和管理文件和目录。5、网络命名空间的父子关系:每个网络命名空间都有一个父进程,默认情况下,一个进程所属的网络命名空间是其父进程的子命名空间。

weixin_51460943的博客 1452

maxwell与steady state thermal 通过workbench耦合仿真

文章目录maxwellsteady state thermal maxwell 1加入maxwell并打开 2导入模型 3选择求解器类型:涡流求解器eddy current 4修改模型名字不能带_等特殊符号 5为模型赋材料 6设立3D边界,各边电流进出方向为0其余方向300 7设置激励条件,可设置电流大小,相位,方向 8设置集肤深度,选取中间铜导体的体然后设置,如何设置看帮助文档 9求解设置 迭代步数 收敛精度 交流电频率 10验证条件满足计算 11求解 发现无法求解,删除ai

roymustang的博客 9201

【脑电绘图教程 2】使用Brainstorm进行脑电处理及源定位

Brainstorm 是一个开源应用程序,支持MEG、EEG、fNIRS、ECoG、深度电极和其他电生理学的数据分析,尤其用于MEG、EEG的源定位。Brainstorm的主要优点是其简单直观的图形界面,不需要进行任何编程,即可上手MEG、EEG分析,此外,它还支持多种数据类型(基本上EEGLab支持的,它都支持),并且具有数据批量处理功能,可以很方便的分析自己的数据。

qq_40735196的博客 1万+

linux namespace-之使用

namespace命名空间-之应用                                                                                                                 shichaog@126.com 由于各种原因,用户空间命名空间的实现算是一个里程碑了,首先是历时五年最复杂命名空间之一的user命名空

shichaog的专栏 2万+

AMD Ryzen AI Max+ 395四机集群实战:开源工具链与大模型推理优化全解析

本文详细解析了基于AMD Ryzen AI Max+ 395处理器的四机集群搭建与优化实践,涵盖硬件配置、开源工具链评测及大模型推理优化技巧。通过深度测试,揭示了集群在AI推理中的性能瓶颈与解决方案,特别适合需要扩展显存的大模型实验场景。文章还提供了成本效益分析,帮助开发者做出更明智的选型决策。

weixin_29041767的博客 1521

介绍 Linux 的命名空间

介绍 Linux 的命名空间 背景 从Linux 2.6.24版的内核开始,Linux 就支持6种不同类型的命名空间。它们的出现,使用户创建的进程能够与系统分离得更加彻底,从而不需要使用更多的底层虚拟化技术。 CLONE_NEWIPC: 进程间通信(IPC)的命名空间,可以将 SystemV 的 IPC 和 POSIX 的消息队列独立出来。 CL...

weixin_34041003的博客 295

人机协作新纪元:AI会抢走IT人的饭碗吗?

产品经理用自然语言描述需求,AI将其转化为技术规格书(准确率已达89%)

819

Spring Cloud 整合(一) CRUD

Springcloud 整合之 CRUDSpringcloud介绍功能概述为什么要选用Springcloud Springcloud介绍 功能概述 实现微服务 Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。分布式系统的协调导致样板式样,并且使用Spring Cloud开发人员可以快速站起来实现这些样板的服务和应用程序。 为什么要选用Springcloud

Kerwin-Lin的博客 1501

docker-cgroup的理解和使用、namespace、微服务2026/1/22

共享一个操作系统靠内核虚拟机强隔离但笨重,容器轻量高效但。

m0_71510778的博客 1086

C/C++跳动的爱心(完整代码)

C语言实现跳动的爱心的完整代码。

AIGC 5842

Linux 命名空间(Namespace)实战指南:从原理到容器化应用

本文深入解析Linux命名空间(Namespace)的核心原理与七种隔离类型,并通过实战演示如何手动创建隔离环境及组合命名空间来构建一个“迷你容器”。文章揭示了Docker等容器技术实现隔离性的底层机制,帮助开发者从本质上理解容器化,并掌握利用命名空间进行高级运维和问题诊断的技能。

bread的博客 1036

贝叶斯网络在R语言中的应用

本文将介绍如何在R语言中使用贝叶斯网络进行建模和推断,并提供相应的源代码示例。以上就是在R语言中使用贝叶斯网络进行建模和推断的基本步骤。通过构建贝叶斯网络模型并使用相应的函数,我们可以对变量之间的依赖关系进行建模、推断和预测。在建立了贝叶斯网络模型后,我们可以使用数据集来估计变量之间的条件概率。接下来,我们可以使用数据集来构建贝叶斯网络模型。除了进行推断,我们还可以使用贝叶斯网络模型进行预测。一旦我们获得了贝叶斯网络模型和条件概率表,我们就可以使用该模型进行推断。首先,我们需要安装并加载相关的R包。

CodeMaven的博客 1277

Java/PHP:微信支付v3显示 “商户证书序列号有误。请使用签名私钥匹配的证书序列号。“(Spring Boot、thinkPHP微信支付失败返回错误,例如退款、企业付款到零钱等各种微信支付业务)

商户证书序列号有误。请使用签名私钥匹配的证书序列号,php,Java微信支付v3显示"商户证书序列号有误。请使用签名私钥匹配的证书序列号。"请问如何解决?httResponseBody[{"code":"SIGN_ERROR","message":"商户证书序列号有误。请使用签名私钥匹配的证书序列号"}]微信V3支付报错 平台证书及平台证书序列,vue3微信支付报错,Uniapp支付报错,微信支付签名错误解决方法,微信支付v3证书报错,微信支付平台证书过期(报错:证书序列号错误)计算签名时,商户号、商户AP

✅ 精选推荐文章 4598

Docker容器系列(一)Linux内核Namespace和Cgroup浅析

Linux内核中六种Namespace解析,和Cgroup各层级结构关系以及测试试验

97运维的博客 2973

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux Namespace和Cgroup的概念

Namespace(命名空间) 是 Linux 内核提供的一种资源隔离机制。它允许将系统资源分隔成多个虚拟的“空间”,每个命名空间内的进程只能访问该命名空间下的资源,而不能访问其他命名空间中的资源。通过 namespace,不同的进程可以在同一个操作系统内共享硬件资源,但又能感知到各自独立的环境。Docker 正是通过为每个容器创建一套独立的命名空间,让容器具备了类似 “独立虚拟机” 的运行环境,但无需像虚拟机那样加载完整操作系统内核(共享宿主机内核),因此更轻量。 二 Linux Cgroup 2.1 C

wqfhenanxc的专栏 950

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

关于linux namespace学习

Linux命名空间是实现容器隔离的核心技术,目前主要包括6种命名空间类型:Mount(文件系统隔离)、UTS(主机名隔离)、IPC(进程通信隔离)、PID(进程ID隔离)、Network(网络资源隔离)和User(用户权限隔离)。新内核还引入了Cgroup(控制组资源隔离)和Time(时间视图隔离)。这些命名空间通过抽象全局资源,使容器内进程拥有独占系统资源的错觉,Mount和PID命名空间尤其关键,前者隔离文件系统视图,后者隔离进程ID空间。Cgroup命名空间进一步隔离资源控制组路径,增强了安全性。这种

qq_50247813的博客 272

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux容器核心技术之: namespace

linux的namespace是什么 关于linux的namespace, 官方文档是这么说的: A namespace wraps a global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource. Changes to the glo

开心就好的专栏 4810

Linux Namespace和Cgroup

namespace 包含了Linux目前常用的6个namespace的介绍 Linux Namespace系列(01):Namespace概述 Linux Namespace系列(02):UTS namespace (CLONE_NEWUTS) Linux Namespace系列(03):IPC namespace (CLONE_NEWIPC) Linux N...

heianzhiye333的博客 514

Linux高级命名空间深度解析:User/Cgroup/Time与实战排查

Linux命名空间是容器隔离的基石,通过隔离进程对系统资源的视图,实现轻量级虚拟化。除常见的Mount、PID、Network外,User、Cgroup、Time等高级命名空间在权限边界、资源视图和时钟连续性上扮演关键角色。理解uid/gid映射、cgroup路径视图与时钟偏移量的原理,能解释容器内root权限受限、重启后时钟归零等诡异现象。在生产环境中,命名空间与capabilities、seccomp、挂载选项共同构成安全防线,合理配置可提升多租户隔离性并支撑热迁移场景。全面解析这些高级命名空间的工作机

weixin_31742871的博客 250

Linux NameSpace 与 Cgroup 系列学习

为了方便自己学习,我会将自己搜集的一些好的关于namespace和cgroup的文章统一列在这里,后续有新的内容后将会继续更新。这几篇虽然时间有点久,但比较系统、详细,建议先阅读学习,看完后收获很大。 namespace 包含了Linux目前常用的6个namespace的介绍 Linux Namespace系列(01):Namespace概述 Linux Namespace系列(02):U...

Zcoder`Blog 790

docker(4、容器3)容器的底层技术支持 cgroup 和 namespace

cgroup 实现资源限额, namespace 实现资源隔离。 cgroup cgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额 cgroup 可以在 /sys/fs/cgroup 中找到 /sys/fs/cgroup/memory/docker 内存的 cgroup 配置 /sys/fs/cgr...

二哈欢乐多的博客 375

【网址收藏】linux namespace和cgroup

namespace 包含了Linux目前常用的6个namespace的介绍 Linux Namespace系列(01):Namespace概述 Linux Namespace系列(02):UTS namespace (CLONE_NEWUTS) Linux Namespace系列(03):IPC namespace (CLONE_NEWIPC) Linux Namespace系列(04):mount namespaces (CLONE_NEWNS) Linux Namespace系列(05):pid na

学亮编程手记 441

docker - linux namespace

1.概述 Linux Namespace 是kernel的一个功能,它可以隔离一系列的系统资源,当前可隔离的资源有: 类型 Namespace 类型 系统调用参数 内核版本 文件系统 Mount Namespace CLONE_NEWNS 2.4.19 主机名hostname UTS Namespace CLONE_NEWUTS ...

vito 519
上一篇: arm64 内核 inline hook
下一篇: linux内核内存读写属性更改的问题
inquisiter
博客等级 码龄10年 374粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值