overlayfs是一种叠加文件系统,在openwrt和安卓系统中都有很广泛的应用,overlayfs通常用于将只读根文件系统(rootfs)和可写文件系统(jffs2)进行叠加后形成一个新的文件系统, 挂载过程 在openwrt系统中,overlayfs 挂载需要使用 fstools工具。 的工具,它支持4种模式: 默认(无参数):挂载overlayfs模式 ram :挂载基于ram的overlayfs stop:获取SHUTDOWN环境变量状态 done:挂载结束后置文件系统状态位 mount_root 1.将当前进程的/ 重新挂载到ro_root目录,也就是/rom 2.将/mnt重新挂载为新的/,因为上一步中overlayfs挂载到 /mnt,所以这一步结果是 overlayfs挂载到 /。 当mount_root挂载基于Flash的overlayfs失败时,也会切换至这种模式。
今天早上,我为未来潜在容器杂志画了一幅 OverlayFS 的漫画,我对这个主题感到兴奋,想写一篇关于它的博客来提供更多详细信息。 叠加如何工作 OverlayFS,也被称为 联合文件系统或 联合挂载,它可让你使用 2 个目录挂载文件系统:“下层”目录和“上层”目录。 当进程“写入”文件时,OverlayFS 会将其写入上层目录。 让我们使用 mount 制造一个叠加层! 这有点抽象,所以让我们制作一个 OverlayFS 并尝试一下! 我想这就是 overlayfs 驱动表示删除的文件的方式。 如果我们尝试复制这个奇怪的字符设备文件,会发生什么? Docker 也可以使用 btrfs 快照 现在,我使用的是 ext4,而 Docker 使用 OverlayFS 快照来运行容器。
The lower filesystem can even be another overlayfs. Metadata only copy up -------------------- When metadata only copy up feature is enabled, overlayfs will If files are accessed from two overlayfs mounts which share or overlap the upper layer and/or workdir An overlayfs mount with "inodes index" enabled will fail with EOPNOTSUPP if the lower filesystem does Non-standard behavior --------------------- Overlayfs can now act as a POSIX compliant filesystem with
OverlayFS伪文件系统, 在 Linux 内核 3.18版本中被首次包含,它允许我们以对用户完全透明的方式组合两个目录树或文件系统(“上层”和“下层”),用户可以像在标准文件系统上一样访问“合并”
由于 Linux 下有多种的 UnionFS (如 AUFS、OverlayFS 和 Btrfs 等),所以我们以实现相对简单的 OverlayFS 作为分析对象。 OverlayFS 使用 我们先来看看 OverlayFS 基本原理(图片来源于网络): ? 使用 OverlayFS 前需要进行挂载操作,挂载 OverlayFS 文件系统的基本命令如下: $ mount -t overlay overlay -o lowerdir=lower1:lower2 OverlayFS 实现原理 下面我们开始分析 OverlayFS 的实现原理。 OverlayFS 文件系统挂载 前面介绍过挂载 OverlayFS 文件系统的命令,挂载 OverlayFS 文件系统会触发系统调用 sys_mount(),而 sys_mount() 会执行 虚拟文件系统
overlayfs存储驱动的使用以及技术探究 1.overlayfs 基本概念 一种联合文件系统,设计简单,速度更快。 优势劣势 1.OverlayFS支持页缓存共享,多个容器访问同一个文件能共享一个页缓存,以此提高内存使用 2.OverlayFS消耗inode,随着镜像和容器增加,inode会遇到瓶颈。 3.4 overlayfs的原理测试 overlayfs挂载后系统文件的page cache是全部共享的。 overlayfs用这种删除标记的方式标识文件被删除,(如果upper中没有该文件的话,则底层low中的同名文件又恢复出来显示了,因此需要有这个空文件来标识删除,并且覆盖底层的文件) 4.overlayfs 在docker中的使用 首先,overlayfs是在高版本的内核上才支持的存储驱动,因此不管使用的官方内核,还是自己patch的内核,首先需要检查overlayfs是否被加载 overlayfs 并且同样重要的是
Ubuntu 18 04 LTS Ubuntu 16 04 LTS Ubuntu 14 04 ESM 漏洞类型 本地权限提升 利用条件 影响范围应用 漏洞概述 Ubuntu的一个具体问题是在Linux内核中的overlayfs 文件系统,它没有正确地验证文件系统功能在用户名称空间方面的应用,由于Ubuntu中的一个补丁允许非特权的overlayfs挂载,本地攻击者可以利用它来获得更高的权限。 这里的关键调用是cap_convert_nscap,它检查有关namespaces的权限 如果我们在namespaces和mount上设置文件功能,就没有问题,而且我们有这样做的权限,问题是当OverlayFS BIN_UPPER); } 参考链接 https://ubuntu.com/security/CVE-2021-3493 https://ssd-disclosure.com/ssd-advisory-overlayfs-pe
Ubuntu 18 04 LTS Ubuntu 16 04 LTS Ubuntu 14 04 ESM 漏洞类型 本地权限提升 利用条件 影响范围应用 漏洞概述 Ubuntu的一个具体问题是在Linux内核中的overlayfs 文件系统,它没有正确地验证文件系统功能在用户名称空间方面的应用,由于Ubuntu中的一个补丁允许非特权的overlayfs挂载,本地攻击者可以利用它来获得更高的权限。 err(1, "execl %s", BIN_UPPER); } 安全建议 等待官方发布最新补丁包 参考链接 https://ssd-disclosure.com/ssd-advisory-overlayfs-pe
系统允许非特权用户创建命名空间,这是OverlayFS提权的必要路径。结果=0:系统加固了。普通用户无法创建命名空间,漏洞利用会被拦截。 这说明内核已经修补,或者管理员通过安全策略限制了OverlayFS的使用。 然而,Ubuntu的内核代码在处理OverlayFS的扩展属性(xattr)同步时,漏掉了这一层校验。 从虚拟特权到真实提权攻击者利用这种逻辑上的疏忽,在虚拟环境中通过OverlayFS创建一个Shell的副本,并将其标记为root拥有的SUID程序。 根据OverlayFS的工作机制,所有在合并层发生的写操作,其实际的物理文件和元数据最终都会被存储在“上层目录”中。
`overlayroot` 是一种使用 OverlayFS 实现的功能,可将根文件系统挂载为只读,并通过一个临时的写层实现对文件系统的修改。 目标系统:确保系统支持 OverlayFS(内核版本 ≥ 3.18)。 2. 工具和依赖: 一个支持 OverlayFS 的 Linux 内核。 `busybox` 或其他必要的系统工具。 1.2 OverlayFS 的基本原理 OverlayFS 将文件系统分为以下两层: Lowerdir:只读的底层文件系统,通常是现有的根文件系统。 Workdir:OverlayFS 的工作目录,用于支持文件操作。 1.3 制作步骤 1.3.1 创建 OverlayFS 配置结构 首先创建一个工作目录来组织文件系统结构。 cgroup_enable=memory swapaccount=1 swiotlb=0x10000 net.ifnames=0"; }; 4.2 修改内核配置 确保内核启用了 OverlayFS
简介 OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性: 1) 更简单地设计; 2) 从3.18开始,就进入了Linux内核主线; 因此,OverlayFS在Docker社区关注度提高很快,被很多人认为是AUFS的继承者。就像宣称的一样,OverlayFS还很年轻。所以,在生成环境使用它时,还是需要更加当心。 注意:自从OverlayFS加入kernel主线后,它在kernel模块中的名称就被从overlayfs改为overlay了。 overlay和overlay2 OverlayFS(overlay)的镜像分层与共享 OverlayFS使用两个目录,把一个目录置放于另一个之上,并且对外提供单个统一的视角。 OverlayFS兼容性 有以下两点OverlayFS和其他文件系统不太兼容: open(2)。OverlayFS支持吃POSIX标准的一个子集。
OverlayFS OverlayFS 是 Linux 内核的一个功能,Docker 利用它来实现存储驱动。 与 AUFS 类似,OverlayFS 也支持联合挂载多个文件系统,但它在写入操作上表现更优秀。OverlayFS 在 Docker 社区中得到广泛支持,成为较新版本的默认存储驱动。 1.3. 当前,OverlayFS 是社区支持度最高的存储驱动,得到了广泛的测试和使用。AUFS 逐渐被淘汰,而 Device Mapper、Btrfs 和 ZFS 也得到了一定程度的支持。 3. 对于大规模云服务提供商来说,OverlayFS 和 Device Mapper 是常见的选择,因为它们在性能和可扩展性方面表现优秀。 数据密集型应用 对于需要大量存储和高性能的数据密集型应用,推荐使用 OverlayFS 或者 Device Mapper。它们在处理大量写入操作时性能较好。 4.2.
因为lowerdir是只读的,用户想修改来自lowerdir数据时,overlayfs会首先拷贝一份lowerdir中文件副本到upperdir中(这也被称作OverlayFS的copy-up特性)。 OverlayFS引入了whiteout文件的概念。如果需要删除lower层的文件或目录,需要在upper层创建一个whiteout文件。 rename目录 当我们想重命名一个在lower层的目录,OverlayFS有两种处理方式: 返回EXDEV错误码:rename系统调用试图穿过文件系统边界移动一个文件或目录时返回这个错误。 OverlayFS方式挂载,以使之前的修改生效。 OverlayFS也被应用在把多个不同分区的目录堆叠到一个目录下面,可以更好做到软件系统的组件解耦,不同特性的组件内容分别放到不同分区,最后通过OverlayFS堆叠到一个目录下,提升软件的可维护性。
漏洞描述 OverlayFS漏洞允许Ubuntu下的本地用户获得root权限。 Linux内核中overlayfs文件系统中的Ubuntu特定问题,在该问题中,它未正确验证关于用户名称空间的文件系统功能的应用程序。 由于Ubuntu附带了一个允许非特权的overlayfs挂载的补丁,因此本地攻击者可以使用它来获得更高的特权。 参考链接 https://ubuntu.com/security/CVE-2021-3493 https://ssd-disclosure.com/ssd-advisory-overlayfs-pe/
OverlayFS 。 简单介绍完 overlay 和 overlay2 ,我们将重点回归到 OverlayFS 上。 我们启动一个容器,以此为切入点来认识下 OverlayFS,注意:以下内容使用 Linux 5.4 内核以及 Docker 20.10.21,不同环境下可能结果略有差异。 将镜像各层作为 lower 基础层,同时增加 diff 这个可写层,通过 OverlayFS 的工作机制,最终将 merged 作为容器内的文件目录展示给用户。 总结 本节,我为你介绍了 OverlayFS 及 Overlay2 存储驱动相关的内容。通过实际启动容器生成的相关目录来介绍 overlay2 的工作流程,想必通过这种方式能更易理解。 ----
fuse-overlayfs 是怎么做到这一点的呢? fuse-overlayfs 这命令利用 FUSE 这个库,开发了一个运行在 userland 的 fuse-overlayfs driver。 当 ls 命令询问这个 overlayfs driver /packages/A-953bc 目录里有啥的时候,这个 fuse-overlayfs driver 记得之前用户运行过 fuse-overlayfs Docker 的 overlayfs 以及它的后续版本 overlayfs2 都是运行在 kernel mode 里的 —— 这也是 Docker 需要机器的 root 权限的原因之一,而这又是 Docker 其实 Docker 也可以被配置使用 fuse-overlayfs。
0x01 漏洞描述 Ubuntu OverlayFS 模块中已发现两个权限提升漏洞,漏洞源于 Ubuntu 对容器环境中广泛使用的 OverlayFS 模块的实现差异。 (OverlayFS 是一种联合装载文件系统实现,因其允许通过用户名称空间进行无特权访问,并且受到容易被利用的漏洞的干扰,过去曾多次受到威胁攻击者的攻击) CVE-2023-2640 涉及某些 Ubuntu
“ 今天说说overlay,并且制作一个炒鸡简单的Docker镜像” 小鲸鱼有大能量 01.Overlayfs存储驱动 Overlay是一种联合文件系统,设计简单,速度更快。 Overlayfs在Linux主机上只有两层,一个目录在下层,用来保存镜像,另外一个目录在上层,用来存储容器信息。 在overlayfs中,底层的目录叫做lowerdir,顶层的目录叫做upperdir,对外提供统一的文件系统为merged。 ?
docker数据在哪里 首先说一下这边以docker-ce 19.03.4版本举例,GraphDriver是overlay2 这里说明下,overlay技术是一种虚拟网络技术,这里说的overlay是overlayfs overlayfs在linux主机上只有两层,一个目录在下层,用来保存镜像(docker),另外一个目录在上层,用来存储容器信息。 在overlayfs中,底层的目录叫做lowerdir,顶层的目录称之为upperdir,对外提供统一的文件系统为merged。 可以看到对应前面的6层overlayfs,其排列也是有顺序的,从上到下依次表示镜像层的最低层到最顶层 diff_id如何关联进行层? 可以肯定的是在可读写层,结合overlayfs原理看,就是在upperdir,也就是可读写层中的diff目录,比如我们进入容器,在home目录下写入个测试文件,然后查看diff目录 ? ?
图片CODING CI 3.0 是腾讯云面向云原生打造的全新 CI 平台,基于 OverlayFS 的高性能 CI 技术,为持续构建应用、灵活定制流水线提供高效、稳定的服务保障。 图片基于 OverlayFS 的高性能方案在上文中也提到,传统的 CI 流水线中一个很麻烦的问题就是任务的并行和效率,尤其是当代码仓库非常庞大的时候。 图片其本质上是使用缓存,然后主要通过 OverlayFS 技术实现缓存的“瞬间复制”。 图片这里通俗来理解就是,第一次执行没有缓存的时候,所有流程走完一遍,执行 git clone 命令,把整个仓库克隆下来;但后续的 CI 流水线,只要发现机器上有这个仓库的代码,就可以先通过 OverlayFS 如下图所示,当 clone 方式从 git worktree 切换到 OverlayFS 瞬时复制方案后,带来的效果就是代码的准备时间大幅度缩短,从而提高效率。