c - 修改 Ext4 文件系统写入磁盘的数据

标签 c linux-kernel cryptography filesystems ext4

我正在从事学术项目,其中一部分是对存储在磁盘上的选定 Ext4 文件应用透明加密 (AES-CTR)(我已经可以使用新的 ioctl 等将它们标记为加密)。

为此,我需要找到最佳位置来调用我的数据算法,同时从设备读取数据或向设备写入数据。由于文件系统提供的大量功能(如日志、内联、o-direct、扩展),我现在正在努力寻找合适的解决方案——我需要对原始数据进行操作,因为它存储在数据 block 。

我脑子里几乎没有什么想法,一个是在 sys_read(...)sys_write(...) 的调用路径上的某个地方 Hook ,更准确地说ext4_file_write(...)generic_file_aio_read(...) - 但这不适用于 mmap,而且可能不是这样去。当内存页面是写入磁盘。

因为它不是生产版本,只是一个概念验证 - 我可以关闭一些 Ext4 功能以简化任务。在使用该算法时,我需要能够访问 inode 的 xargs(存储 key id 的位置),并且还要知道 block 号,以便生成 [en/de] 加密中使用的初始 vector 。您对这个问题有什么想法和/或建议吗?

最佳答案

有许多备选方案可以为此设计解决方案。

一种方法是使用 Wrapfs (可堆叠的文件系统)这将帮助您拦截从 VFS 到底层物理文件系统的调用。您可以选择在调用底层文件系统调用之前或之后添加 Hook 。

这样做的好处是。 1. 您的代码可以无缝地与任何物理文件系统一起工作。 2. 您无需更改/修改原始文件系统代码。 3. 你将拥有完全不同的模块。

所以调用层次结构看起来像, 应用程序 <=> VFS <=> Wrapfs <=> 物理文件系统 (ext3/ext4/etc)

关于c - 修改 Ext4 文件系统写入磁盘的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24619620/

相关文章:

Python C-Api...如何从 C 创建 "IntEnum"对象

c - 向上搜索包含层次结构

linux - 用户线程到内核线程的多对一映射

c# - .NET 和 MySQL 中 SHA1 的区别

c# - C# RSACryptoServiceProvider Encrypt() 方法如何工作?

c - 在字符串数组中搜索字符串

c++ - 尝试在 C++ Visual Studio 2010 中声明枚举时出现奇怪错误

process - 进程地址空间中每个共享库的附加文本、数据和 bss 部分,这是真的吗?

企业 Linux 内核开发的 Git 工作流程

python - 解密 SSL 预主 key