首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用`CLONE_NEWUSER|CLONE_NEWNS`调用克隆时,挂载传播的行为如何?

|CLONE_NEWNS`调用克隆时,挂载传播的行为是指在创建新的命名空间时,如何处理已经挂载的文件系统。

CLONE_NEWUSER标志用于创建一个新的用户命名空间,而CLONE_NEWNS标志用于创建一个新的挂载命名空间。当这两个标志一起使用时,会创建一个新的命名空间,并将当前进程的用户命名空间和挂载命名空间都复制到新的命名空间中。

在新的命名空间中,挂载传播的行为如下:

  1. 挂载点的传播:在新的命名空间中,已经挂载的文件系统会被复制到新的命名空间中,成为新命名空间的挂载点。这意味着在新的命名空间中,可以访问和操作已经挂载的文件系统。
  2. 子命名空间的传播:如果在新的命名空间中创建了子命名空间,子命名空间会继承父命名空间的挂载点。这意味着在子命名空间中,可以访问和操作父命名空间中已经挂载的文件系统。
  3. 父命名空间的传播:如果在父命名空间中挂载了新的文件系统,子命名空间会继承父命名空间的挂载点。这意味着在子命名空间中,可以访问和操作父命名空间中新挂载的文件系统。

挂载传播的行为可以通过mount命令进行控制,具体的操作可以参考相关的文档和手册。

腾讯云提供了一系列的云计算产品,包括云服务器、云数据库、云存储等,可以满足不同场景下的需求。具体的产品介绍和链接地址可以在腾讯云官网上找到。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Docker Notes-namespace

、共享内存 PID CLONE_NEWPID 进程编号 Network CLONE_NEWNET 网络栈、端口 Mount CLONE_NEWNS 文件系统 User CLONE_NEWUSER 用户与用户组...通常会在setns()执行后使用clone()创建子进程继续执行命令,让原进程结束运行 加入namespace后可以通过引入execve()函数执行用户命令(调用/bin/bash 接收参数,运行起一个...例如在docker中,docker exec会使用setns()加入一个已存在namespace,但是最终还是会调用clone()函数 MOUNT MOUNT namespace是第一个Linux...namespace,所以标识符并不是CLONE_NEWMOUNT而是CLONE_NEWNS。...创建MOUNT namespace,会把当前文件结构复制给新namespace,新namespace中mount操作只会影响自身文件系统,然后通过挂载传播来决定挂载事件传播到别的挂载对象

52330

Linux进程创建参数标志位-Cloneflags

具体来说,Cloneflags作用是通过设置位标志(flag)来改变新进程行为。这些标志可以用于控制新进程命名空间、信号处理、文件描述符和虚拟内存等方面。...Cloneflags 参数是 clone() 系统调用一部分,它通过一个位掩码来指定新进程应该继承哪些资源以及如何共享这些资源。...这个位掩码可以通过按位或(OR)操作来设置多个标志,下面是一些常见 Cloneflags 标志: CLONE_NEWNS:使新进程拥有一个新、独立挂载命名空间,可以隔离文件系统。...CLONE_NEWUSER:使新进程拥有一个新、独立用户命名空间,可以隔离用户和组 ID。 CLONE_FILES:使新进程共享打开文件描述符表,但不共享文件描述符状态(例如文件偏移量)。...,包括当前工作目录、根目录和挂载点。

20410
  • Docker原理之Namespaces

    一、Namespaces 在日常使用 Linux 或者 macOS ,我们并没有运行多个完全分离服务器需要,但是如果我们在服务器上启动了多个服务,这些服务其实会相互影响,每一个服务都能看到其他服务进程...namespace 隔离内容 系统调用参数 UTS 主机名与域名 CLONE_NEWUTS IPC 信号量、消息队列和共享内容 CLONE_NEWIPC PID 进程编号 CLONE_NEWPID Network...网络设备、网络栈、端口 CLONE_NEWNTE Mount 文件系统 CLONE_NEWNS User 用户和用户组 CLONE_NEWUSER 1、pid 命名空间(进程ID) 不同用户进程就是通过...在新进程中创建隔离挂载点命名空间需要在 clone 函数中传入 CLONE_NEWNS,这样子进程就能得到父进程挂载拷贝,如果不传入这个参数子进程对文件系统读写都会同步回父进程以及整个主机文件系统...如果一个容器需要启动,那么它一定需要提供一个根文件系统(rootfs),容器需要使用这个文件系统来创建一个新进程,所有二进制执行都必须在这个根文件系统中。

    65910

    命名空间介绍之一:总览

    这是本系列文章第一篇:在本文中,我们概述了当前可用命名空间;在后续文章中,我们将展示如何在程序中使用命名空间 API。 命名空间 目前,Linux 实现了六种命名空间。...Mount namespaces(CLONE_NEWNS, Linux 2.4.19)隔离一组被进程看到文件系统挂载点。因此,不同挂载命名空间中进程可具有不同文件系统层次结构视图。...随着挂载命名空间添加,mount() 和 umount() 系统调用不再对系统上所有进程可见全局挂载点集进行操作,而仅操作与调用进程相关挂载命名空间。...挂载命名空间用途之一是创建类似于 chroot 限制环境。然而,与使用 chroot() 系统调用相比,挂载命名空间更安全、灵活。挂载命名空间还可用于更复杂用途。...例如,可以在主从关系中单独设置一个挂载命名空间,以便挂载事件自动从一个命名空间传播到另一个命名空间;例如,允许挂载在一个命名空间中光盘设备自动出现在其它命名空间中。

    1.4K32

    linux namespace and cgroup

    分类 分类 系统调用参数 相关内核版本 隔离内容 Mount namespaces CLONE_NEWNS Linux 2.4.19 挂载点(文件系统) UTS namespaces CLONE_NEWUTS...2006 年引入挂载传播(mount propagation)解决了这个问题,挂载传播定义了挂载对象(mount object)之间关系,系统用这些关系决定任何挂载对象中挂载事件如何传播到其他挂载对象...所谓传播事件,是指由一个挂载对象状态变化导致其它挂载对象挂载与解除挂载动作事件。...但随着引入挂载传播特性,Mount Namespace变得并不是完全意义上资源隔离,这种传播特性使得多Mount Namespace之间挂载事件可以相互影响。...挂载传播定义了挂载对象之间关系,系统利用这些关系来决定挂载对象中挂载事件对其他挂载对象影响。

    4.1K40

    Docker 技术鼻祖 Linux Namespace 入门系列:Namespace API

    为了指定要操作 namespace 类型,需要在系统调用 flag 中通过常量 CLONE_NEW* 指定(包括 CLONE_NEWIPC,CLONE_NEWNS, CLONE_NEWNET,CLONE_NEWPID...这样就可以避免设置了 SUID(Set User ID on execution)程序因为主机名不同而做出一些愚蠢行为。...这些符号链接指向文件比较特殊,不能直接访问,事实上指向文件存放在被称为 nsfs 文件系统中,该文件系统用户不可见,可以使用系统调用 stat()[7] 在返回结构体 st_ino 字段中获取...如果调用者已经明确知道自己要加入了 namespace 类型,或者不关心 namespace 类型,就可以使用该参数来自动校验。...Linux 中自带 unshare 命令,就是通过 unshare() 系统调用实现使用方法如下: $ unshare [options] program [arguments] options

    2.3K30

    Linux命名空间详解--Linux进程管理与调度(二)【转】

    要创建新Namespace,只需要在调用clone指定相应flag。...在进程已经使用上述两种机制之一从父进程命名空间分离后,从该进程角度来看,改变全局属性不会传播到父进程命名空间,而父进程修改也不会传播到子进 程,至少对于简单量是这样。...CLONE_NEWNS 挂载命名空间,进程运行时可以将挂载点与系统分离,使用这个功能,我们可以达到 chroot 功能,而在安全性方面比 chroot 更高。...PID Namespace和IPC Namespace可以组合起来一起使用,只需在调用clone,同时指定CLONE_NEWPID和CLONE_NEWIPC,这样新创建Namespace既是一个独立...mount Namespace 当调用clone,设定了CLONE_NEWNS,就会创建一个新mount Namespace。

    1.9K21

    Docker如何实现资源隔离

    引言:理解docker如何做资源隔离,揭开容器神秘面纱。 我们在启动一个docker容器之后,在容器内资源和宿主机上其他进程是隔离,docker资源隔离是怎么做到呢?...Namespace是Linux提供资源隔离机制,说直白一点,就是调用Linux内核方法,实现各种资源隔离。...CLONE_NEWNS 挂载点 User CLONE_NEWUSER 用户用户组 下面我们使用go语言演示一下各种资源隔离实现效果: package main import ( "log"...proc /proc 把proc挂载到当前进程proc目录下 执行 ps -ef查看到当前容器进程,通过这个也进一步验证了PID隔离 执行ls /proc看到当前proc下面的内容已经发生了变化...Cgroups为每种可以控制资源定义了一个子系统 具体包括: cpu: 限制可以使用cpu使用率 cpuset:为进程单独分配cpu或者内存节点 cpuacct:统计cgroups中进程对cpu使用报告

    2.1K20

    容器底层 --- 超细节 Namespace 机制讲解

    分类 系统调用参数 相关内核版本 Mount Namespaces CLONE_NEWNS Linux 2.4.19 UTS Namespaces CLONE_NEWUTS Linux 2.6.19 IPC...下面我们重新挂载子进程 /proc 目录,从而可以使用 ps 来查看容器内部情况。...之后我们在代码中将一些特殊目录重新挂载,并使用 chroot() 系统调用将进程根目录改成上文 rootfs 目录。...假如你容器中程序使用 settimeofday(2) 系统调用修改了时间,整个宿主机时间都会被随之修改。...虽然,实践中可以使用 Seccomp 等技术对容器内部发起所有系统调用进行过滤和甄别来进行安全加固,但这种方式因为多了一层对系统调用过滤,也会对容器性能产生影响。

    2.2K30

    命名空间介绍之六:用户命名空间延伸

    调用也会在两个命名空间之间建立一个亲缘关系:每个用户命名空间(最初命名空间除外)都有一个父亲,即调用 clone(CLONE_NEWUSER) 创建该用户命名空间进程用户命名空间。...也可以通过在同一个使用 CLONE_NEWUSER clone() (或 unshare())中附加 CLONE_NEW* 标志来创建新用户命名空间。...因此,非特权进程可通过如下形式调用,创建一个同时为新用户命名空间和新 UTS 命名空间成员子进程: clone(child_func, stackp, CLONE_NEWUSER | CLONE_NEWUTS..., arg); 可使用 userns_child_exec 执行与上面相同 clone() 调用,并在子进程中启动一个 shell。...当通过 clone() 或 unshare() 创建新 IPC、挂载、网络、PID 或 UTS 命名空间,内核会根据新命名空间记录创建者用户命名空间。

    1.8K10

    Linux Namespace浅析

    编者注:Namespace是将内核全局资源做封装,使得每个Namespace都有一份独立资源,因此不同进程在各自Namespace内对同一种资源使用不会互相干扰。...Linux对Namespace操作,主要是通过clone、setns和unshare这3个系统调用来完成,clone创建新进程,接收一个叫flags参数,这些flag包括CLONE_NEWNS、...CLONE_NEWIPC、CLONE_NEWUTS、CLONE_NEWNET(Mount namespace)、CLONE_NEWPID和CLONE_NEWUSER,用于创建新namespace,这样...在创建了一个新Mount Namespace后,进程系统对文件系统挂载/卸载动作就不会影响到其他Namespace。...UTS UTS Namespace用于对主机名和域名进行隔离,也就是uname系统调用使用结构体structutsname里nodename和domainname这两个字段,UTS这个名字也是由此而来

    1.5K10

    Docker是如何实现隔离

    \n"); return 0; } 考虑到很多同学对C语言不是很熟悉,我这里简单解释下这段程序,这段程序主要就是执行clone()函数,去克隆一个进程,而克隆执行程序就是我们container_main...函数,接着下一个参数就是栈空间,然后CLONE_NEWPID和CLONE_NEWNS 表示Linux NameSpace调用类别,分别表示创建新进程命名空间和 挂载命名空间。...CLONE_NEWPID:会让执行程序内部重新编号PID,也就是从1号进程开始 CLONE_NEWNS:会克隆挂载环境出来,通过在子进程内部重新挂载 proc文件夹,可以屏蔽父进程进程信息。...资源限制 玩过 Docker 同学肯定知道,Docker 还是可以限制资源使用,比如 CPU 和内存等,那这部分是如何实现呢?...发现这里我们容器启动设置参数一样,也就是说通过这里文件值来限制容器cpu使用情况。

    1.8K50

    CVE-2021-3493:Ubuntu OverLayFS提权

    Linux内核中overlayfs文件系统,它没有正确地验证文件系统功能在用户名称空间方面的应用,由于Ubuntu中一个补丁允许非特权overlayfs挂载,本地攻击者可以利用它来获得更高权限。...漏洞分析 Linux支持file capabilities扩展文件属性,该属性作用类似于setuid-bit,但可以更细化,使用伪代码设置文件功能简化过程如下所示: setxattr(...):...这里关键调用是cap_convert_nscap,它检查有关namespaces权限 如果我们在namespaces和mount上设置文件功能,就没有问题,而且我们有这样做权限,问题是当OverlayFS...将此操作转发到底层文件系统,它只调用vfs_setxattr并跳过cap_convert_nscap中检查,这允许在外部namespaces/mount中文件上设置任意功能,在执行过程中也将应用这些功能...在Linux 5.11中,对cap_convert_scap调用被移动到vfssetx_attr中,因此它不再易受攻击。

    1.5K30

    从操作系统看Docker

    层次越多,调用链也相应地变长,运行时开销也就越大。...记录进程组使用资源数量,例如,可以记录某个进程组使用cpu时间 进程组隔离,例如,可以使不同进程组使用不同命名空间,以达到隔离目的,不同进程组有各自进程、网络、文件系统挂载空间。...目前Linux Namespace 大致有7种,如下表所示: 类型 系统调用参数 隔离资源 Mount CLONE_NEWNS 系统挂载点 IPC CLONE_NEWIPC system V IPC(信号量...,增加/删除文件都会转换为写操作写入可写层。...每次挂载一个 FS文件层,每层之间只会挂载增量。这些文件层就是堆栈式文件系统中所保存数据,AUFS就是用来管理、使用这些文件层文件系统。

    56230

    Docker容器里进程 pid 是如何申请出来

    内核又是如何显示容器中进程号? 前面我们在《Linux进程是如何创建出来?》中介绍了进程创建过程。事实上进程 pid 命名空间、pid 也都是在这个过程中申请。...如果不指定命名空间,所有进程使用都是使用缺省命名空间。...二、Linux 新 pid 命名空间创建 在这里,我们假设我们创建进程指定了 CLONE_NEWPID 要创建一个独立 pid 命名空间出来(Docker 容器就是这么干)。...CLONE_NEWPID: 是否创建新进程编号命名空间,以便与宿主机进程 PID 进行隔离 CLONE_NEWNS: 是否创建新挂载点(文件系统)命名空间,以便隔离文件系统和挂载点 CLONE_NEWNET...IPC 命名空间,以便隔离信号量、消息队列和共享内存 CLONE_NEWUSER: 用来隔离用户和用户组

    82410

    使用 Linux 命名空间隔离系统

    下面讨论其它命名空间也可以使用 unshare() 系统调用创建,而 PID 命名空间只能在使用 clone() 产生新进程创建。...有了 Linux 命名空间,就可以克隆这一数据结构,这样不同命名空间下进程就可以改变挂载点,而不会互相影响。创建单独挂载命名空间效果类似于使用 chroot()。...但是,当子进程出尝试将根分区更改为其它分区挂载命名空间隔离好处就很明显了,因为更改只会影响隔离挂载命名空间。...有趣是,这实际上使得直接使用 CLONE_NEWNS 标志创建目标子进程成为一个坏主意。...更好方式是使用 CLONE_NEWNS 标志启动一个特殊「init」进程,让该「init」进程根据需要修改 /、/proc、/dev 或其它挂载点,然后再启动目标进程。

    16310

    Docker 基础技术之 Linux namespace 源码分析

    创建新 namespace 初始化完之后,下面看看如何创建一个新 namespace,通过前面的文章,我们知道是通过 clone 函数来完成,在 Linux kernel 中,fork/vfork...copy_process 将父进程信息复制给子进程,然后调用 vfork() 完成相关初始化工作,接着调用 wake_up_new_task() 将进程加入调度器中,为之分配 CPU。...,比如 CLONE_NEWNS 与 CLONE_FS 是互斥 if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS)...) return ERR_PTR(-EINVAL); if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS...dup_task_struct() 复制当前进程描述符信息 task_struct,为新进程分配新堆栈,第二步调用 sched_fork() 初始化进程数据结构,为其分配 CPU,把进程状态设置为

    1.9K40
    领券