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

Tom*_*icz 9 c filesystems cryptography linux-kernel ext4

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

为了做到这一点,我需要找到在数据上调用算法的最佳位置,同时从设备读取或写入数据.由于文件系统提供了大量的功能(如日志,内联,o-direct,范围),我现在很难找到合适的解决方案 - 我需要对原始数据进行操作,因为它存储在数据块.

我脑子里想的一些想法,一个是在某处挂钩从CALLPATH sys_read(...)sys_write(...),更精确ext4_file_write(...)generic_file_aio_read(...)-但不会一起工作mmap,并且可能不是要走的路.当内存页面写入磁盘时,另一种方法是通过ext4_writepages(...)ext4_readpages(...)(以及它的回调,因为它是异步)来完成它.

因为它不是生产版本,只是一个概念证明 - 我可以关闭一些Ext4功能以简化任务.在使用算法时,我需要能够访问inode的xargs(存储密钥id),并且还要知道块编号,以便生成[en/de] cryption中使用的初始向量.您对此问题有任何想法和/或建议吗?

Mav*_*vla 3

为此设计解决方案有许多替代方案。

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

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

因此,调用层次结构如下:应用程序 <=> VFS <=> Wrapfs <=> 物理 FS(ext3/ext4/etc)