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

时间:2014-07-07 20:48:11

标签: c linux-kernel cryptography filesystems ext4

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

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

我心里想的很少,一个是从sys_read(...)sys_write(...),更准确地ext4_file_write(...)generic_file_aio_read(...)挂钩到调用路径的某个地方 - 但那不会'使用mmap,可能不是可行的方法。另一种方法是在将内存页写入磁盘时通过ext4_writepages(...)ext4_readpages(...)(以及它的回调,因为它是异步)来完成它。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

所以调用层次结构看起来像, 应用< => VFS< => Wrapfs< =>物理FS(ext3 / ext4 / etc)

答案 1 :(得分:0)

FUSE(Filesystems in userspace)是一个很好的选择,因为它在用户空间中比在内核空间中更容易实现。您可以选择多种语言。这种方法会容易得多。