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 this

OVERLAYROOT_DEBUG=0

#优化userdata分区自动修复

e2fsck -y /dev/disk/by-partlabel/userdata

tune2fs -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"]; then
                                   if[-z "$RK_ROOTFS_INITRD"]; then
                                            run_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"

                                   fi

                          fi

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%/dev

tmpfs           196M   1.3M   195M    1%/run

/dev/mmcblk0p6   3.2G   3.1G     0   100%/root-ro

/dev/mmcblk0p8   23G   590M   23G    3%/userdata

overlayroot      23G   590M   23G    3%/

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

6. 总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/951701.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Http请求响应——请求

Http概述 Http协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff0c;是一种用于传输网页数据的协议&#xff0c;规定了浏览器和服务器之间进行数据传输的规则&#xff0c;简单说来就是客户端与服务器端数据交互的数据格式。 客户端…

2025域名出售交易平台PHP源码

源码介绍 2025域名出售交易平台PHP源码,搭建即可正常使用&#xff0c;后台功能测试正常&#xff0c;前台测试正常,无需到处找教程或修复&#xff0c;教程一次性到位 搭建教程 PHP必须是5.6的 导入数据库 数据库配置文件 config/config.php 后台 http://域名/ymadmin 用户&am…

Microsoft Azure Cosmos DB:全球分布式、多模型数据库服务

目录 前言1. Azure Cosmos DB 简介1.1 什么是 Azure Cosmos DB&#xff1f;1.2 核心技术特点 2. 数据模型与 API 支持2.1 文档存储&#xff08;Document Store&#xff09;2.2 图数据库&#xff08;Graph DBMS&#xff09;2.3 键值存储&#xff08;Key-Value Store&#xff09;…

后端技术选型 sa-token校验学习 上 登录校验复习

sa-token 的官网 Sa-Token 复习 首先我们要明确一下 cookie 是什么 登录校验 Sa-Token 官方文档里面的 对于一些登录之后才能访问的接口&#xff08;例如&#xff1a;查询我的账号资料&#xff09;&#xff0c;我们通常的做法是增加一层接口校验&#xff1a; 如果校验通过…

【教程】Unity 本地化多语种 | Localization 工具组

开发平台&#xff1a;Unity 6.0 编程平台&#xff1a;Visual Studio 2022 编程语言&#xff1a;CSharp 6.0 工具包类&#xff1a;Localization   一、前言 本地化多语言类型是软件面向国际化所必须的功能项。Unity 在 2022 版本后推出 Localization 工具包&#xff0c;以降低…

matlab编写分段Hermite插值多项式

文章目录 原理使用分段Hermite插值多项式原因公式第一类的两个插值积函数第二类的两个插值积函数 例题法一法二 代码分段 Hermite 插值的思路&#xff1a;分段 Hermite 插值多项式的构造&#xff1a;MATLAB 实现代码&#xff1a;结果如图&#xff1a;注归一化变量的作用&#x…

Elasticsearch:优化的标量量化 - 更好的二进制量化

作者&#xff1a;来自 Elastic Benjamin Trent 在这里&#xff0c;我们解释了 Elasticsearch 中的优化标量量化以及如何使用它来改进更好的二进制量化 (Better Binary Quantization - BBQ)。 我们的全新改进版二进制量化 (Better Binary Quantization - BBQ) 索引现在变得更强大…

【数据库】六、数据库设计

文章目录 六、数据库设计1 数据库设计步骤1.1 规划阶段1.2 需求分析1.3 概念设计阶段(重点)1.4 逻辑设计阶段(重点)1.5 物理设计阶段1.6 数据库的实现1.7 数据库运行与维护 2 概念模型设计2.1 ER模型2.1.1 ER模型的基本元素2.1.2 联系的设计2.1.3 采用ER模型的概念设计2.1.4 ER…

onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制

文章目录 1. 页面跳转方式2. 你的场景分析3. 页面生命周期4. 总结5. 建议 在微信小程序中&#xff0c;页面跳转时&#xff0c; onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制。以下是详细说明&#xff1a; 1. 页面跳转方式 微信小程序提供了多种页面…

51c~Pytorch~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/12311033 一、Pytorch~训练-使用 这里介绍了Pytorch中已经训练好的模型如何使用 Pytorch中提供了很多已经在ImageNet数据集上训练好的模型了&#xff0c;可以直接被加载到模型中进行预测任务。预训练模型存放在Pytorch的…

深度学习的原理和应用

一、深度学习的原理 深度学习是机器学习领域的一个重要分支&#xff0c;其原理基于多层神经网络结构和优化算法。以下是深度学习的核心原理&#xff1a; 多层神经网络结构&#xff1a;深度学习模型通常由多层神经元组成&#xff0c;这些神经元通过权重和偏置相互连接。输入数据…

基于人工智能的公司logo设计生成方法

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经深入到我们生活的方方面面。其中&#xff0c;基于AI的公司logo设计生成方法&#xff0c;不仅为品牌形象的塑造提供了新的思路&#xff0c;也为企业带来了前所未有的设计体验。本文将详细探讨这一新兴的、…

BO-CNN-BiLSTM-Multihead-Attention,贝叶斯优化CNN-BiLSTM融合多头注意力机制多变量回归预测

BO-CNN-BiLSTM-Multihead-Attention&#xff0c;贝叶斯优化CNN-BiLSTM融合多头注意力机制多变量回归预测 目录 BO-CNN-BiLSTM-Multihead-Attention&#xff0c;贝叶斯优化CNN-BiLSTM融合多头注意力机制多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Ma…

WPF系列九:图形控件EllipseGeometry

简介 EllipseGeometry用于绘制一个椭圆的形状。它通常与其他图形元素结合使用&#xff0c;比如 Path 或者作为剪切区域来定义其他元素的外形。 定义椭圆&#xff1a;EllipseGeometry 用来定义一个椭圆或者圆的几何形状。参与绘制&#xff1a;可以被用作 Path 元素的数据&…

ue5动画重定向,一键重定向。ue4小白人替换成ue5

这就是我们下载的 初学者动画内容包 点击设置选中列 绿色的是动画 黄色的关卡 蓝色是蓝图 ctrla 全选 ctrl鼠标左键 选中所有动画 重定向动画资产 不要选错&#xff0c;只要绿色 选择目标网格体 选择所有的绿色 动画 导出动画 添加前缀ycn 导出 一定要提前新建好存放的…

服务器漏洞修复解决方案

漏洞1、远程桌面授权服务启用检测【原理扫描】 Windows Remote Desktop Licensing Service is running: Get Server version: 0x60000604 1、解决方案&#xff1a;建议禁用相关服务避免目标被利用 方法一&#xff1a;使用服务管理器 打开“运行”对话框&#xff08;WinR&am…

uniapp 微信小程序内嵌h5实时通信

描述&#xff1a; 小程序webview内嵌的h5需要向小程序实时发送消息&#xff0c;有人说postMessage可以实现&#xff0c;所以试验一下&#xff0c;结果是实现不了实时&#xff0c;只能在特定时机后退、组件销毁、分享时小程序才能接收到信息&#xff08;小程序为了安全等考虑做了…

案例解读 | 香港某多元化综合金融企业基础监控+网管平台建设实践

PART01 项目背景 01客户简介案例客户是一家创立20多年的香港某多元化综合金融企业&#xff0c;其业务范围涵盖证券、期货、资产管理、财富管理等&#xff0c;凭借广泛的业务网络和多元化的金融服务产品&#xff0c;在市场中拥有显著的影响力。02痛点分析随着业务版图的持续拓展…

LabVIEW实现动态水球图的方法

水球图是一种直观展示百分比数据的图表&#xff0c;常用于数据监测与展示。LabVIEW 虽不直接支持水球图绘制&#xff0c;但可通过图片控件动态绘制波形&#xff0c;或借助 HTMLCSS 的 Web 控件实现。此外&#xff0c;还可以结合 Python 等第三方工具生成水球图&#xff0c;LabV…

Simulink中的正弦波模块学习【Sine Wave】

Simulink中的正弦波模块学习 Simulink库中的Sine Wave模块 如下图所示为MATLAB Simulink中的正弦波模块 其元器件库位置为Simulink→Sources→Sine Wave 各项设置参数如下, 点击Help可查看详细信息 正弦波的数学表达式为 y A sin ⁡ ( ω x φ ) k y A \sin(\omega x \va…