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

使用 Linux 命名空间隔离系统

在本文中我们将介绍基础知识:什么是 Linux 命名空间、它们用途是什么以及如何创建 Linux 命名空间?...所有其它进程都从进程树中这个进程下面开始。PID 命名空间允许我们用自己 PID 1 进程分拆出一颗新进程树。这样做进程仍然保留在父命名空间原始进程树中,但会使进程成为其自身进程根。...进程命名空间创建一系列嵌套命名空间:一个进程在一个新 PID 命名空间中启动一个进程,该进程又在一个新 PID 命名空间中产生另一个进程,以此类推。...用户命名空间允许一个进程命名空间中拥有 root 权限,但不允许进程访问命名空间进程。...要创建一个跨两个不同挂载命名空间 UNIX 套接字,你需要先创建进程,然后创建 UNIX 套接字,最后将进程隔离到单独挂载命名空间中。但是我们怎样才能先创建进程,然后再隔离它呢?

11910

命名空间介绍之五:用户命名空间

为了开始探究用户命名空间,我们将看一个小例子 demo_userns.c,该程序在新用户空间创建了一个进程。该进程仅展示其有效用户和组 ID 及 capabilities。...当一个用户命名空间创建,其内第一个进程将被赋予该命名空间所有权限。这允许进程命名空间其它进程创建之前,执行该命名空间内任意必需初始化操作。 第二个有趣地方是进程用户和组 ID。...最后一点是,命名空间可以嵌套;也就是说,每个用户命名空间(最初用户命名空间除外)都有一个父用户命名空间,并且可以有 0 个或多个子用户命名空间。...(即运行 demo-userns 进程用户命名空间)中运行 shell 终端,并在 demo-userns 创建用户命名空间中为进程创建一个用户 ID 映射: $ ps -C demo_userns...此规则允许用户命名空间初始进程(即 clone() 创建进程)为自己用户 ID(组 ID)写映射。

3.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

Docker原理之Namespaces

Linux 命名空间机制提供了以下六种不同命名空间,包括 pid 命名空间、net 命名空间、ip c命名空间、m n t命名空间、UTS 命名空间、user 命名空间,通过这六个选项我们能在创建进程时设置新进程应该在哪些资源上与宿主机器进行隔离...所有的 LXC 进程在 Docker 中进程为Docker进程,每个 LXC 进程具有不同命名空间。同时由于允许嵌套,因此可以很方便实现嵌套 Docker 容器。...mnt 命名空间允许不同命名空间进程看到文件结构不同,这样每个命名空间进程所看到文件目录就被隔离开了。...主机上一个进程 6、user 命名空间(用户) 每个容器可以有不同用户和组 id, 也就是说可以在容器内用容器内部用户执行程序而非主机上用户。...在新进程创建隔离挂载点命名空间需要在 clone 函数中传入 CLONE_NEWNS,这样子进程就能得到父进程挂载点拷贝,如果不传入这个参数进程对文件系统读写都会同步回父进程以及整个主机文件系统

61210

探索 Linux 命名空间和控制组:实现资源隔离与管理双重利器

每个子 PID 命名空间中都有 PID 为 1 init 进程,对应父命名空间进程,父命名空间对子命名空间运行状态是不隔离,但是每一个命名空间是互相隔离。...实战 创建和管理命名空间 在 Linux 系统中提供了以下几种常用创建和管理命名空间 API: clone:使用 clone 系统调用创建一个新进程时可以通过指定一个或多个上面列出命名空间标志参数来创建命名空间...,并且新进程进程也会默认被包含在新命名空间内 unshare:使用 unshare 系统调用将一个已存在进程放入新命名空间。...它可以指定一个或多个上面列出命名空间标志参数,创建具有指定类型命名空间,并将当前进程或其他指定进程放入其中 setns: 使用 setns 系统调用允许进程将自己放入已经存在命名空间中,而无需创建进程...Hierarchies 允许 Cgroup 在不同 subsystem 中进行组合和嵌套,形成多层资源管理结构。系统会默认为每个 subsystem 创建一个默认 Hierarchy。

75110

命名空间介绍之一:总览

最后,就命名空间使用方式而言,最近在用户命名空间实现方面的变化是一个规则改变:从 Linux 3.8 开始,没有特权进程可以创建用户命名空间,并在其内拥有全部特权,从而允许用户命名空间创建任何其它类型命名空间...PID 命名空间允许每个容器有自己 init(PID 1),它是“所有进程祖先”,管理各种系统初始化任务,并在孤儿进程终止时获取它们。...PID 命名空间可以嵌套:一个进程可从其所在 PID 命名空间开始,一直到根 PID 命名空间,每层命名空间都有一个 PID。...一个进程只能看到(例如,通过 /proc/pid 查看并使用 kill() 发送信号)它自己 PID 命名空间中包含进程以及该 PID 命名空间下面嵌套命名空间。...从 Linux 3.8 开始,无特权进程可以创建用户命名空间,这为应用程序添加了许多有趣可能性:因为在其他情况下,无特权进程可以在用户命名空间中拥有 root 权限,所以无特权应用程序现在可以访问之前仅限于

1.3K32

【重识云原生】第六章容器6.1.5节——Docker核心技术Namespace

全局ID使得内核可以有选择地允许或拒绝某些特权。虽然UID为0root用户基本上允许做任何事,但其他用户ID则会受到限制。例如UID为n 用户,不允许杀死属于用户m进程(m≠ n)。...但这不能防止用户看到彼此,即用户n可以看到另一个用户m也在计算机上活动。通常情况下,只要用户只能操纵他们自己进程,这就没什么问题,因为没有理由不允许用户看到其他用户进程。         ...(1) 在用fork或clone系统调用创建进程时,有特定选项可以控制是与父进程共享命名空间,还是建立新命名空间。         ...在进程已经使用上述两种机制之一从父进程命名空间分离后,从该进程角度来看,改变全局属性不会传播到父进程命名空间,而父进程修改也不会传播到进 程,至少对于简单量是这样。...这个术语不是描述性(无法从名字看出要创建哪种命名空间),因为挂载命名空间是第一种命名空间,设计人员没有预料到还有其他命名空间

62520

04 . Docker安全与Docker底层实现

终极目标是改进 2 个重要安全特性: 将容器root用户映射到本地主机上非root用户,减轻容器和主机之间因权限提升而引起安全问题; 允许Docker服务端在非root权限下运行,利用安全可靠进程来代理执行需要特权权限操作...这些进程将只允许在限定范围内进行操作,例如仅仅负责虚拟网络设定或文件系统管理、配置操作等。...pid命名空间 不同用户进程就是通过pid命名空间隔离开,且不同命名空间可以有相同pid,所有的LXC进程在Docker中进程为Docker进程,每个LXC进程具有不同命名空间,同时由于嵌套...mnt命名空间 类似chroot,将一个进程放到一个特定目录执行,mnt命名空间允许不同命名空间进程看到文件结构不同,这样每个命名空间进程所看到文件目录就被隔离开了,同chroot不同,每个命名空间容器在...uts命名空间 UTS命名空间允许每个容器拥有独立hostname和domain name,使其在网络上可以被视作一个独立节点而非主机上一个进程.

96340

命名空间介绍之三:PID 命名空间

PID 命名空间展示了进程 PID:一个是调用 clone() 命名空间,另一个是进程所在命名空间。...有两种方式可在父 PID 命名空间中,在不影响 /proc 挂载点情况下达到该目的。第一种,如果一个进程通过 CLONE_NEWS 标志创建,那么该进程将在与系统中其余进程位于不同挂载点中。...嵌套 PID 命名空间 如前所述,在 PID 命名空间内,可能会看到位于同一命名空间其他进程,也可以看到后代命名空间进程。...该程序在嵌套 PID 命名空间中递归创建了一系列子进程。命令行参数展示了当运行该程序时,会创建多少个 PID 命名空间: # ....PID(即在最深嵌套层中执行 sleep() 进程),在所有可见命名空间中: # grep -H 'Name:.

3.3K10

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

在Linux世界中,clone()系统调用通过复制调用进程创建一个新进程。新进程称为进程,原始进程称为父进程。clone()系统调用有几个选项,允许我们控制父进程进程之间资源共享。...Cloneflags是一个用于指定创建 Linux 命名空间标志位, 是 Linux 内核中用于进程创建参数之一,它用于控制新进程如何与父进程共享资源。...CLONE_NEWUSER:使新进程拥有一个新、独立用户命名空间,可以隔离用户和组 ID。 CLONE_FILES:使新进程共享打开文件描述符表,但不共享文件描述符状态(例如文件偏移量)。...nil { fmt.Println("Failed to create new UTS namespace:", err) return } // 创建用户命名空间...如果命名空间创建成功,我们就可以在新命名空间中运行进程,并且该进程将只能访问新命名空间资源,而不能访问主机上资源。

18210

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

另一方面,clone(CLONE_NEWUSER) 可创建一个新用户命名空间,并将创建进程放到该用户命名空间。...待会会看到,用户命名空间之间亲缘关系很重要,因为这定义了一个进程在新命名空间 capabilities。 每个进程都有三组相关 capabilities:允许,有效和可继承。...首先,在特定用户命名空间中有一个 capability,允许进程操作由该命名空间管理资源。当我们讨论用户命名空间与其他类型命名空间交互时,将进一步讨论这一点。...它在新用户命名空间创建一个进程,然后父(与启动 userns_setns_test 程序 shell 在同一用户命名空间进程进程都会试图通过 setns() 加入该命名空间;如上所述,setns...(本系列前面几篇文章中,我们看到仅仅在父用户命名空间特权进程可以创建除了创建命名空间进程有效用户和组 ID 以外 ID 映射,因此没有安全漏洞。) 另一方面,进程不能挂载文件系统。

1.8K10

操作系统级虚拟化概述

与KVM、XEN等虚拟化技术不同,所谓操作系统级虚拟化,也被称作容器化,是操作系统自身一个特性,它允许多个相互隔离用户空间实例存在。这些用户空间实例也被称作为容器。...例如,在没有操作系统级虚拟化Linux系统中,用户进程从1开始编号(PID)。引入操作系统虚拟化之后,不同容器有着不同PID命名空间,每个容器中进程都可以从1开始编号而不产生冲突。...calls) 下面3个系统调用用来操作命名空间: clone() —— 用来创建进程及新命名空间,新进程会被放到新命名空间中 unshare() —— 创建命名空间但并不创建进程,...之后创建进程会被放到新创建命名空间中去 setns() —— 将进程加入到已经存在命名空间中 注意:这3个系统调用都不会改变调用进程(calling process)pid命名空间,而是会影响其进程...unshare, 创建了一个新命名空间, //但不会创建进程.

2K60

命名空间介绍之二:API

CLONE_NEWUSER 和 CLONE_NEWUTS 在新命名空间创建一个空间:clone() 通过 clone() 可创建一个命名空间。...下面,看一下程序一些关键部分(忽略错误检查代码)。 示例程序中参数来自于命令行。当程序运行时会创建一个进程,该进程在新 UTS 命名空间中运行。...因为 CLONE_NEWUTS 是 flags 参数一部分,所以进程将会运行在新创建 UTS 命名空间。 然后让主程序睡眠一会。...(用户命名空间除外),需使用特权(尤其是 CAP_SYS_ADMIN)来创建 UTS 命名空间。...如果允许一个非特权用户使用任意主机名在一个 UTS 命名空间中跑应用,会使得应用遭受各种攻击。最简单,锁文件失效,会导致运行在不同 UTS 命名空间应用出错。

1.5K10

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

用户ID管理方式类似,即各个用户是通过一个全局唯一UID号标识。 全局ID使得内核可以有选择地允许或拒绝某些特权。虽然UID为0root用户基本上允许做任何事,但其他用户ID则会受到限制。...例如UID为n 用户,不允许杀死属于用户m进程(m≠ n)。但这不能防止用户看到彼此,即用户n可以看到另一个用户m也在计算机上活动。...只要用户只能操纵他们自己进程,这就没什么问题,因为没有理由不允许用户看到其他用户进程。 但有些情况下,这种效果可能是不想要。...虽然容器不了解系统中其他容器,但父容器知道子命名空间存在,也可以看到其中执行所有进程。图中子容器进程映射到父容器中,PID为4到 9。...在进程已经使用上述两种机制之一从父进程命名空间分离后,从该进程角度来看,改变全局属性不会传播到父进程命名空间,而父进程修改也不会传播到进 程,至少对于简单量是这样。

1.8K10

深入了解 Linux 容器调度

具有足够权限用户可以使用基本 shell 命令或 libcgroup-tools 提供高级实用程序轻松创建 cgroup、修改它们或将任务移动到它们安装包。...默认情况下,Docker 会为这个容器创建一个 pid 命名空间,将进程与其他命名空间隔离开来;Java 进程在执行之前附加到这个新 pid 命名空间,并由 Linux 内核分配 PID 1。...然而,这个进程并不完全与系统上其他进程隔离开来。因为 PID 命名空间嵌套,所以除了初始根命名空间之外每个命名空间都有一个父命名空间。...在命名空间中运行进程可以看到 pid 命名空间所有进程。这意味着在根命名空间中运行进程,例如我们 shell,可以看到系统上运行所有进程。...在最小 CentOS 安装中,我们通常可以忽略系统服务和用户进程影响。这将允许调度程序向 /docker 组提供与每个容器份额成比例几乎所有 CPU 时间。

75820

一篇搞懂容器技术基石: cgroup

我们先对这两项技术作用做个概括: cgroup 主要作用:管理资源分配、限制; namespace 主要作用:封装抽象,限制,隔离,使命名空间进程看起来拥有他们自己全局资源; 本篇,我们重点来聊...唯一允许值为1,当值为1时,会将 cgroup 及其所有节点中 cgroup 杀死(进程会被 SIGKILL 杀掉)。...它将 cgroup 命名空间视为委托边界,这是两种委派 cgroup 方式之一; 3.1.2 cgroup 委派方式 设置挂载选项 nsdelegate ; 授权用户对目录及其 cgroup.procs...一旦被委派,用户就可以在目录下建立层次结构,所有的资源分配都受父节点制约。目前,cgroup 对委托子层次结构中 cgroup 数量或嵌套深度没有任何限制(之后可能会受到明确限制)。...不保证此列表已排序或没有重复 TGID,如果需要此属性,用户空间应排序/统一列表。

1.5K41

命名空间介绍之四:PID 命名空间延伸

/ns_child_exec -p sh -c 'echo $$' 1 该命令行会在新 PID 命名空间创建一个进程,该进程会打印 shell PID。...我们(简单得多) simple_init 程序提供了一个简单 shell 工具,允许用户手动执行初始化命名空间所需任何 shell 命令;还允许我们自由执行 shell 命令,以便在命名空间中进行实验...然而,调用者所创建进程会被置于新命名空间中;第一个进程会成为命名空间 init 进程。...同 unshare(),setns() 也不会将调用者移到 PID 命名空间;但调用者所创建进程会被放到一个命名空间中。...关于 PID 命名空间讨论至此结束;下篇文章中,我们将看一下用户命名空间

2.1K60

Docker底层原理

Docker 守护进程 (Daemon)作为服务端接受来自客户端请求,并处理这些请求(创建、运行、分发容器)。...pid 命名空间 不同用户进程就是通过 pid 命名空间隔离开,且不同命名空间中可以有相同 pid。...所有的 LXC 进程在 Docker 中进程为 Docker 进程,每个 LXC 进程具有不同命名空间。同时由于允许嵌套,因此可以很方便实现嵌套 Docker 容器。...mnt 命名空间 类似 chroot,将一个进程放到一个特定目录执行。mnt 命名空间允许不同命名空间进程看到文件结构不同,这样每个命名空间进程所看到文件目录就被隔离开了。...user 命名空间 每个容器可以有不同用户和组 id, 也就是说可以在容器内用容器内部用户执行程序而非主机上用户

42611

彻底搞懂容器技术基石: cgroup

我们先对这两项技术作用做个概括: cgroup 主要作用:管理资源分配、限制; namespace 主要作用:封装抽象,限制,隔离,使命名空间进程看起来拥有他们自己全局资源; 本篇,我们重点来聊...唯一允许值为1,当值为1时,会将 cgroup 及其所有节点中 cgroup 杀死(进程会被 SIGKILL 杀掉)。...它将 cgroup 命名空间视为委托边界,这是两种委派 cgroup 方式之一; cgroup 委派方式 设置挂载选项 nsdelegate ; 授权用户对目录及其 cgroup.procs、cgroup.threads...一旦被委派,用户就可以在目录下建立层次结构,所有的资源分配都受父节点制约。目前,cgroup 对委托子层次结构中 cgroup 数量或嵌套深度没有任何限制(之后可能会受到明确限制)。...不保证此列表已排序或没有重复 TGID,如果需要此属性,用户空间应排序/统一列表。

1.9K31

Docker学习路线2:底层技术

它们允许Docker创建名为容器隔离工作区。命名空间确保容器内进程不能干扰容器外或主机系统上进程。有几种类型命名空间,如PID、NET、MNT和USER,每个命名空间负责隔离进程不同方面。...命名空间命名空间是 Docker 用于提供容器之间隔离核心技术之一。在本节中,我们将简要讨论命名空间是什么以及它们如何工作。命名空间是什么?...在 Linux 内核中,命名空间是一种功能,允许隔离各种系统资源,使得进程及其进程能够看到与其他进程分离系统子集。命名空间有助于创建抽象层,将容器化进程与彼此和主机系统分开。...User (USER):在容器和主机之间映射用户和组标识符,因此可以为容器内资源设置不同权限。IPC (进程间通信):允许或限制不同容器中进程之间通信。...Docker 如何使用命名空间Docker 使用命名空间为容器创建隔离环境。当容器启动时,Docker 会为该容器创建一组新命名空间

17820
领券