Linux文件系统的安全保障---Overlayroot!

ops/2025/1/12 13:45:25/

`overlayroot` 是一种使用 OverlayFS 实现的功能,可将根文件系统挂载为只读,并通过一个临时的写层实现对文件系统的修改。这种方法非常适合嵌入式设备或需要保持系统文件完整性和安全性的场景。下文以 RK3568 平台为例,介绍制作 overlayroot 的详细步骤。

103.png

1. 制作精简文件系统ramdisk

1.1   环境准备

1. 目标系统:确保系统支持 OverlayFS(内核版本 ≥ 3.18)。

2. 工具和依赖:

  •  一个支持 OverlayFS 的 Linux 内核。

  • `busybox` 或其他必要的系统工具。

1.2   OverlayFS 的基本原理

OverlayFS 将文件系统分为以下两层:

  • Lowerdir:只读的底层文件系统,通常是现有的根文件系统。

  • Upperdir:可写的顶层,存储所有的临时更改。

  • Workdir:OverlayFS 的工作目录,用于支持文件操作。

1.3   制作步骤

1.3.1    创建 OverlayFS 配置结构

首先创建一个工作目录来组织文件系统结构。

mkdir -p /tmp/ramdisk/{bin,sbin,etc,proc,sys,dev,tmp}
  • bin 和 sbin:存放用户工具(例如 busybox)。

  • etc:存放必要的配置文件。

  • proc、sys、dev:为内核文件系统挂载预留的挂载点。

  • tmp:用于临时存储文件。

将 busybox 和相关依赖文件复制到适当的目录

1.3.2   配置挂载脚本

在ramdisk 的脚本中配置相关的挂载和优化

root_rw=/userdata   #读写挂载点root_ro=/root-ro   #只读文件系统挂载点ROOTMNT=${rootmnt} # use global name to indicate created outside thisOVERLAYROOT_DEBUG=0#优化userdata分区自动修复e2fsck -y /dev/disk/by-partlabel/userdatatune2fs -O has_journal /dev/disk/by-partlabel/userdata

2. ramdisk.img 镜像打包和解包制作

2.1 打包脚本

创建脚本 pack_ramdisk.sh,将 RAMDisk 内容打包为 ramdisk.img:

#!/bin/bash
cd ramdisk_contents
find .| cpio -o -H newc >../ramdisk.cpio
gzip ../ramdisk.cpio
mv ../ramdisk.cpio.gz   ../ramdisk.img

2.2 解包脚本

创建脚本 unpack_ramdisk.sh,将 ramdisk.img 解包到工作目录:

#!/bin/bash
mkdir ramdisk_contents
cd ramdisk_contents
gunzip -c ../ramdisk.img > ramdisk.cpio
cpio -idv < ramdisk.cpio
rm ramdisk.cpio

通过上面打包解包脚本可以直接修改已经制作好的ramdisk.img镜像

3. 打包到boot.img

3.1 配置项目文件

在项目 defconfig 文件中,添加以下内容:

RK_USE_FIT_IMG=y
RK_BOOT_FIT_ITS="bootramdisk.its"
RK_RAMDISK_IMG="ramdisk.img"

在 rk356x_bsp/device/rockchip/common/scripts/mk-kernel.sh 文件中添加打包逻辑:

                          if[-n "$RK_BOOT_FIT_ITS"]; thenif[-z "$RK_ROOTFS_INITRD"]; thenrun_command \"$SCRIPTS_DIR/mk-fitimage.sh" \"build-$VANXOAK_CUSTOMER_NAME/kernel/$RK_BOOT_IMG" \"$RK_BOOT_FIT_ITS" \"build-$VANXOAK_CUSTOMER_NAME/$RK_KERNEL_IMG" \"build-$VANXOAK_CUSTOMER_NAME/kernel/$RK_RAMDISK_IMG"fifi

4. Kernel 配置与设备树修改

4.1 设备树配置修改

修改设备树文件 chosen 节点,添加 overlayroot 参数:

    chosen: chosen {//bootargs = "earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait";bootargs ="earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0 root=PARTLABEL=rootfs rootfstype=ext4 ro rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 coherent_pool=1m systemd.gpt_auto=0 cgroup_enable=memory swapaccount=1 swiotlb=0x10000 net.ifnames=0";};

4.2 修改内核配置

确保内核启用了 OverlayFS:

CONFIG_OVERLAY_FS=y

5. 测试效果与优化

将更新后的 boot.img 刷写到开发板,重启后执行:

df -h

输出类似以下内容:

root@hd-rk3568:~# df -h文件系统        容量   已用   可用已用% 挂载点udev            963M   8.0K   963M    1%/devtmpfs           196M   1.3M   195M    1%/run/dev/mmcblk0p6   3.2G   3.1G     0   100%/root-ro/dev/mmcblk0p8   23G   590M   23G    3%/userdataoverlayroot      23G   590M   23G    3%/

添加完上面内容后,更新boot.img到开发板,执行df -h命令可以看到rootfs分区挂载为/root-ro变为只读分区,userdata分区挂载为overlayroot保存文件系统修改差异部分。若要重置系统状态,只需清空userdata内容即可。

6. 总结

通过以上步骤,您可以成功为 RK3568 平台配置 overlayroot。这种设置使得系统文件更加安全,同时提供灵活的更新和重置能力,非常适合嵌入式场景。


http://www.ppmy.cn/ops/149465.html

相关文章

python学opencv|读取图像(三十一)缩放图像的三种方法

【1】引言 前序学习进程中&#xff0c;我们至少掌握了两种方法&#xff0c;可以实现对图像实现缩放。 第一种方法是调用cv2.resize()函数实现&#xff0c;相关学习链接为&#xff1a; python学opencv|读取图像&#xff08;三&#xff09;放大和缩小图像_python opencv 读取图…

Jaeger UI使用、采集应用API排除特定路径

Jaeger使用 注&#xff1a; Jaeger服务端版本为&#xff1a;jaegertracing/all-in-one-1.6.0 OpenTracing版本为&#xff1a;0.33.0&#xff0c;最后一个版本&#xff0c;停留在May 06, 2019。最好升级到OpenTelemetry。 Jaeger客户端版本为&#xff1a;jaeger-client-1.3.2。…

国产编辑器EverEdit - 扩展脚本:在当前文件目录下新建同类型文件

1 扩展脚本&#xff1a;在当前文件目录下新建同类型文件 1.1 应用场景 用户在进行编程语言学习时&#xff0c;比如&#xff1a;Python&#xff0c;经常做完一个小练习后&#xff0c;又需要新建一个文件&#xff0c;在新建文件的时候&#xff0c;不但要选择文件类型&#xff0c…

请求方式(基于注解实现)

1.编写web.xml文件配置启动信息 <!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app><display-name>Archetype Created Web Application</di…

计算机网络——网络层-IP地址

一、IP 地址及其表示方法 • 我们把整个因特网看成为一个单一的、抽象的网络。IP 地址就是给每个连接在因特网上的主机&#xff08;或路由器&#xff09;分配一个在全世界范围是唯一的 32 位的标识符。 • IP 地址现在由因特网名字与号码指派公司ICANN (Internet Corporation f…

2025广州国际汽车内外饰技术展览会:引领汽车内外饰发展新潮流-Automotive Interiors

随着科技的不断进步和消费者对汽车品质的要求日益提高&#xff0c;汽车内外饰的设计和制造也在不断创新和发展。AUTO TECH China 2025广州国际汽车内外饰技术展览会作为行业内的重要盛会&#xff0c;将于2025年11月20日至22日在广州保利世贸博览馆盛大举办。本次展览会将汇集全…

系统架构设计师考点—信息安全和网络安全

一、备考指南 信息安全和网络安全主要考查的是信息安全属性、加密解密数字摘要、数字签名、PKI体系等相关知识&#xff0c;同时也是重点考点&#xff0c;在系统架构设计师的考试中一般会考选择题&#xff0c;占2~4分&#xff0c;在案例分析和论文中有时也会考到&#xff0c;属于…

深度学习|表示学习|一个神经元可以干什么|02

如是我闻&#xff1a; 如果我们只有一个神经元&#xff08;即一个单一的线性或非线性函数&#xff09;&#xff0c;仍然可以完成一些简单的任务。以下是一个神经元可以实现的功能和应用&#xff1a; 1. 实现简单的线性分类 输入&#xff1a;一组特征向量 x x x 输出&#xff…