首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截取文件系统系统调用

截取文件系统系统调用
EN

Stack Overflow用户
提问于 2011-12-21 18:31:07
回答 4查看 6.6K关注 0票数 10

我正在写一个应用程序,我需要截取一些文件系统调用。取消链接。我想保存一些文件,比如abc。如果用户删除了该文件,则我需要将其复制到其他位置。因此,在删除abc之前,我需要取消链接来调用我的代码,以便我可以保存它。我经历了与截取系统调用相关的线程,但像LD_PRELOAD这样的方法在我的例子中不起作用,因为我希望它是安全的,并在内核中实现,所以这个方法没有用。inotify在事件发生后通知,所以我无法保存它。你能推荐任何这样的方法吗?我希望在内核模块中实现这一点,而不是修改内核代码本身。由Graham Lee建议的另一种方法,我已经想到了这种方法,但它有一些问题,我需要所有文件的硬链接镜像它不消耗空间,但仍然可能是有问题的,因为我必须重复镜像驱动器来保持我的镜像最新,而且它不会跨分区和分区不支持链接,所以我想要一个解决方案,通过它我可以附加挂钩到文件/目录,然后观察更改而不是重复扫描。我也想添加支持写入修改后的文件,我不能使用硬链接。我想通过替换系统调用来拦截系统调用,但在linux > 3.0中,我还没有找到这样做的任何方法。请建议一些这样做的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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上尝试过这一点,但是相同的基本概念应该仍然有效。

这有点棘手,而且在取消链接之前,您可能需要编写大量内核代码来复制文件,但在这里是可行的。

票数 7
EN

Stack Overflow用户

发布于 2011-12-22 01:14:22

一种建议是用户空间中的文件系统(FUSE)。也就是说,编写一个FUSE模块(在用户空间中被授权),它拦截与文件系统相关的syscall,执行您想要的任何任务,然后可能调用“默认”syscall。

然后,您可以使用FUSE文件系统挂载某些目录,并且在大多数情况下,似乎不需要覆盖默认的syscall行为。

票数 3
EN

Stack Overflow用户

发布于 2011-12-21 19:25:22

您可以使用inotify查看解除链接事件,尽管对于您的目的来说,这可能发生得太晚了(我不知道,因为我不知道您的目的,您应该尝试找出答案)。基于LSM (我指的是SMACK、TOMOYO和friends)的内核替代方案实际上是针对强制访问控制的,因此可能不适合您的目的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8588386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档