【问题标题】:Modifying data written to disk by Ext4 filesystem修改 Ext4 文件系统写入磁盘的数据
【发布时间】:2014-07-07 20:48:11
【问题描述】:

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

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

我的想法很少,一个是从sys_read(...)sys_write(...),更准确地说是ext4_file_write(...)generic_file_aio_read(...),挂接到调用路径上的某个地方——但这不适用于mmap,并且可能不是要走的路。另一种方法是通过ext4_writepages(...)ext4_readpages(...)(它是回调,因为它是异步的),当内存页面被写入磁盘时。

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

【问题讨论】:

    标签: c linux-kernel cryptography filesystems ext4


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢您的回答!这似乎是一个好方法,但我不确定是否可以接受,因为它是关于修改 Ext4 本身 - 这显然使事情变得更加困难......
    • 使用我提到的方法,您无需修改​​现有的 EXT4 实现,这就是使用 wrapfs 的好处。如果您需要进一步澄清,请告诉我。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,这似乎是一个有趣的方法。然而,正如我所指出的,重点是在内核空间中进行,扩展 ext4 fs。它是操作系统类的一部分。
    • 我认为 Mavla 试图说您应该重新考虑更改规范。如果您的老师说他希望您修改 Ext4,那可能是一个建议,而不是要求。在大学里,我经常在谈判变革方面没有问题。
    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 2012-03-28
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多