我正在写一个应用程序,我需要截取一些文件系统调用。取消链接。我想保存一些文件,比如abc。如果用户删除了该文件,则我需要将其复制到其他位置。因此,在删除abc之前,我需要取消链接来调用我的代码,以便我可以保存它。我经历了与截取系统调用相关的线程,但像LD_PRELOAD这样的方法在我的例子中不起作用,因为我希望它是安全的,并在内核中实现,所以这个方法没有用。inotify在事件发生后通知,所以我无法保存它。你能推荐任何这样的方法吗?我希望在内核模块中实现这一点,而不是修改内核代码本身。由Graham Lee建议的另一种方法,我已经想到了这种方法,但它有一些问题,我需要所有文件的硬链接镜像它不消耗空间,但仍然可能是有问题的,因为我必须重复镜像驱动器来保持我的镜像最新,而且它不会跨分区和分区不支持链接,所以我想要一个解决方案,通过它我可以附加挂钩到文件/目录,然后观察更改而不是重复扫描。我也想添加支持写入修改后的文件,我不能使用硬链接。我想通过替换系统调用来拦截系统调用,但在linux > 3.0中,我还没有找到这样做的任何方法。请建议一些这样做的方法。
发布于 2011-12-23 01:11:07
就挂接内核和拦截系统调用而言,这是我在我编写的安全模块中所做的事情:
https://github.com/cormander/tpe-lkm
查看hijacks.c和symbols.c s.c中的代码;它们是如何在security.c中的hijack_syscalls函数中使用的。我还没有在linux > 3.0上尝试过这一点,但是相同的基本概念应该仍然有效。
这有点棘手,而且在取消链接之前,您可能需要编写大量内核代码来复制文件,但在这里是可行的。
发布于 2011-12-22 01:14:22
一种建议是用户空间中的文件系统(FUSE)。也就是说,编写一个FUSE模块(在用户空间中被授权),它拦截与文件系统相关的syscall,执行您想要的任何任务,然后可能调用“默认”syscall。
然后,您可以使用FUSE文件系统挂载某些目录,并且在大多数情况下,似乎不需要覆盖默认的syscall行为。
发布于 2011-12-21 19:25:22
您可以使用inotify查看解除链接事件,尽管对于您的目的来说,这可能发生得太晚了(我不知道,因为我不知道您的目的,您应该尝试找出答案)。基于LSM (我指的是SMACK、TOMOYO和friends)的内核替代方案实际上是针对强制访问控制的,因此可能不适合您的目的。
https://stackoverflow.com/questions/8588386
复制相似问题