钩子function的Linux文件系统

在将数据写入硬盘之前,我想做一些事情。 我不知道任何解决scheme。 为了避免编辑内核源代码,有没有可以使用钩子函数作为可加载模块的位置?

更新:谢谢大家,LSM是API钩子。 但是我想find其他解决scheme,提供机制钩读/写数据块。 它可以避免更新文件后重新encryption所有文件

我认为我可以在文件系统(ext2,ext3,…)和缓冲区caching之间进行修改

如何在linux内核的memcpy函数添加一个钩子?

为什么Windows挂钩不会收到某些消息?

如何inheritanceWindows资源pipe理器的窗口

如何在Windows中挂钩本地帐户创build?

在x64系统中SSDT挂钩的替代scheme

钩住Windows中的所有新进程和命令行参数

是否有LdrLoadDll的内核模式callback?

如何挂钩特定的Windows消息没有子类化?

C#挂钩Windows进程来检查debugging进程

Linux内核:系统调用挂钩的例子

使用Linux安全模块 。 这些是可加载的内核模块,提供钩子来调解对内核中各种内部对象的访问。 您可以根据需要使用钩子到文件系统或inode。 开始的一个上帝的地方是阅读Greg Kroah Hartman关于LSM的论文 。 然后你可以访问这个链接 ,在那里显示如何使用LSM挂钩的例子。 这个例子只有当插入一个特定的USB时才能调解对系统的访问,并且是一个很好的参考点,就如何开始LSM挂钩。

那么这是一个有趣的问题。

不幸的是,即使是LSM在这里也没有帮助。 作为一个可能的解决方案,我会建议使用address_space_operations表和钩子writepage函数。 例如,看看ext3_writeback_aops :

1984 static const struct address_space_operations ext3_writeback_aops = { 1985 .readpage = ext3_readpage,1986 .readpages = ext3_readpages,1987 .writepage = ext3_writeback_writepage,1988 .write_begin = ext3_write_begin,1989 .write_end = ext3_writeback_write_end,1990 .bmap = ext3_bmap,1991 .invalidatepage = ext3_invalidatepage,1992 .releasepage = ext3_releasepage,1993 .direct_IO = ext3_direct_IO,1994 .migratepage = buffer_migrate_page,1995 .is_partially_uptodate = block_is_partially_uptodate,1996 .error_remove_page = generic_error_remove_page,1997 };

所以,在ext3文件系统的情况下,我们需要在内存中找到这个结构体,并将writepage指针替换为指向我们的our_writepage包装器。 还要注意,这个表是在只读内存中,你需要正确处理它。

编辑:

使用LSM,可以挂接inode打开操作,并替换inode->i_mapping->a_ops 。

试试FUSE ( https://github.com/libfuse/libfuse )。

这是用户空间中的文件系统。 您可以在用户空间中编写文件I / O处理程序,并将其作为应用程序的执行进行简单安装。

我不认为这是可能的。 当用户空间调用文件I / O时,文件系统实现或通用实现将从VFS调用。 你需要的是将这个函数指针改为指向你的模块,这个模块加密你的数据,然后调用文件系统函数

我在大学做了这样的事情,但是它是一个老内核,你必须设置一个特定的配置标志。 如果我记得这个标志已经消失了,因为你不想让内核模块乱用它们范围之外的函数指针。

无论如何,你可以在这里找到这个模块: https : //motzblog.wordpress.com/2007/10/27/linux-monitoring-module/

但要注意的是,这是一个大学项目,所以代码质量不是你从Linux内核代码中除外的。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....