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


`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.mzph.cn/pingmian/66910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DEVIN AI==初步使用

注册 官网 Devin (the Developer) 开启一个对话session 体验第一个官方DEMO 工作内容是爬取两个网页&#xff0c;对比他们的注册流程&#xff0c;然后生成一个网页展示对比的结果 左边是对话&#xff0c;可以描述你的需求&#xff0c;右边是DEVIN根据你的要求做的一些事情&…

【Rust自学】11.3. 自定义错误信息

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.3.1. 添加错误信息 在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏&#xff0c;而这篇文章讲的就是它…

git - 用SSH方式迁出远端git库

文章目录 git - 用SSH方式迁出远端git库概述笔记以gitee为例产生RSA密钥对 备注END git - 用SSH方式迁出远端git库 概述 最近一段时间&#xff0c;在网络没问题的情况下&#xff0c;用git方式直接迁出git库总是会失败。 失败都是在远端, 显示RPC错误。 但是git服务器端是没问…

Linux第一个系统程序---进度条

进度条---命令行版本 回车换行 其实本质上回车和换行是不同概念&#xff0c;我们用一张图来简单的理解一下&#xff1a; 在计算机语言当中&#xff1a; 换行符&#xff1a;\n 回车符&#xff1a;\r \r\n&#xff1a;回车换行 这时候有人可能会有疑问&#xff1a;我在学习C…

智慧城市应急指挥中心系统平台建设方案

建设背景与目标 智慧城市应急指挥中心系统平台的建设&#xff0c;源于对城市管理精细化、智能化的迫切需求。平台旨在通过整合各方资源&#xff0c;实现应急事件的快速响应与高效处置&#xff0c;提升城市安全管理水平。 前端设计与信息采集 前端设计注重立体化、全方位信息…

011:利用大津算法完成图片分割

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一篇文章介绍了大津算法可以完成图片的前景和背景分割。 总的来说&#xff0c;大津算法的核心思想就两个&#xff1a; 数学上&#xff0c;通过确定一个像素阈值&#xf…

一键部署Netdata系统无需公网IP轻松实现本地服务器的可视化监控

文章目录 前言1.关于Netdata2.本地部署Netdata3.使用Netdata4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Netdata公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

【Artificial Intelligence篇】AI 入侵家庭:解锁智能生活的魔法密码,开启居家梦幻新体验

家庭智能化的时代已经到来&#xff0c;准备好了嘛&#xff01;&#xff01;&#xff01; 在当今数字化浪潮汹涌澎湃的时代&#xff0c;人工智能&#xff08;AI&#xff09;宛如一位神秘而强大的魔法师&#xff0c;悄然 “入侵” 了我…

如何用SQL语句来查询表或索引的行存/列存存储方式|OceanBase 用户问题集锦

一、问题背景 自OceanBase 4.3.0版本起&#xff0c;支持了列存引擎&#xff0c;允许表和索引以行存、纯列存或行列冗余的形式创建&#xff0c;且这些存储方式可以自由组合。除了使用 show create table命令来查看表和索引的存储类型外&#xff0c;也有用户询问如何通过SQL语句…

程序员如何高效学习API

API&#xff08;应用程序编程接口&#xff09;是软件开发中的关键组件&#xff0c;它允许不同的软件应用程序相互通信、交换数据和功能。作为程序员&#xff0c;掌握API的学习和应用是提升开发效率和代码质量的重要途径。本文将详细介绍程序员如何高效学习API&#xff0c;包括基…

如何播放视频文件

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节3. 示例代码4. 内容总结我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用的功能,不过Flutter官方…

Type-C单口便携显示器-LDR6021

Type-C单口便携显示器是一种新兴的显示设备&#xff0c;它凭借其便携性、高性能和广泛的应用场景等优势&#xff0c;正在成为市场的新宠。以下是Type-C单口便携显示器的具体运用方式&#xff1a; 一、连接与传输 1. **设备连接**&#xff1a;Type-C单口便携显示器通过Type-C接…

124.【C语言】数据结构之快速排序的小区间优化和非递归的解决方法

目录 1.小区间优化 测试代码 运行结果 2.非递归的解决方法(重要!) 递归产生的问题 一般来说,递归改非递归有两种方法 算法分析 递归产生的二叉树 栈的示意图 先写代码框架 再填写细节部分 1.小区间优化 回顾121.【C语言】数据结构之快速排序(未优化的Hoare排序存在…

汽车免拆诊断 | 2007款保时捷Carrera S车行驶中发动机冷却液温度报警灯异常点亮

故障现象 一辆2007款保时捷Carrera S车&#xff0c;搭载3.8 L自然吸气发动机&#xff0c;累计行驶里程约为7.8万km。车主反映&#xff0c;车辆行驶一段距离后&#xff0c;组合仪表上的发动机冷却液温度报警灯异常点亮。为此&#xff0c;在其他维修厂已更换过节温器、发动机冷却…

CES 2025|美格智能高算力AI模组助力“通天晓”人形机器人震撼发布

当地时间1月7日&#xff0c;2025年国际消费电子展&#xff08;CES 2025&#xff09;在美国拉斯维加斯正式开幕。美格智能合作伙伴阿加犀联合高通在展会上面向全球重磅发布人形机器人原型机——通天晓&#xff08;Ultra Magnus&#xff09;。该人形机器人内置美格智能基于高通QC…

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…

Opencv查找、绘制轮廓、圆形矩形轮廓和近似轮廓

查找、绘制轮廓、圆形矩形轮廓和近似轮廓 目录 查找、绘制轮廓、圆形矩形轮廓和近似轮廓1 轮廓查找和绘制1.1 轮廓查找1.1.1 函数和参数1.1.2 返回值 1.2 轮廓绘制1.2.1 函数和参数 1.3 步骤1.4 实际测试绘制轮廓 2 绘制近似轮廓2.1 函数和参数2.2 查找特定轮廓2.3 近似轮廓测试…

【Linux】模拟Shell命令行解释器

一、知识补充 1.1 snprintf snprintf() 是 C语言的一个标准库函数&#xff0c;定义在<stdio.h>头文件中。 snprintf() 函数的功能是格式化字符串&#xff0c;并将结果存储在指定的字符数组中。该函数的原型如下&#xff1a; int snprintf(char *str, size_t size, con…

云计算基础,虚拟化原理

文章目录 一、虚拟化1.1 什么是虚拟化1.2 虚拟化类型 二 、存储虚拟化2.1 存储指标2.2 存储类型2.3 存储协议2.4 RAID 三、内存 i/O虚拟化3.1 内存虚拟化基本概念地址空间转换原理内存共享与隔离原理 3.2 I/O 虚拟化基本概念模拟&#xff08;Emulation&#xff09;方式半虚拟化…

Vue3 + Vite + Electron + Ts 项目快速创建

一、创建 Vue 项目 1. 创建项目 pnpm create vite 2. 安装依赖 cd excel-electron pnpm install 3. 运行项目 pnpm dev 二、添加 Electron 1. 安装 electron pnpm add electron -D 2. 修改 package.json 添加入口 js 和执行命令。 {"main": "dist-ele…