拦截文件系统系统调用

gau*_*rav 10 linux filesystems system-calls kernel-module intercept

我正在编写一个应用程序,我需要拦截一些文件系统系统调用,例如.断开链接.我想保存一些文件说abc.如果用户删除了该文件,那么我需要将其复制到其他地方.因此,在删除abc之前,我需要取消链接以调用我的代码,以便我可以保存它.我已经完成了与拦截系统调用相关的线程,但像LD_PRELOAD这样的方法在我的情况下不起作用,因为我希望这是安全的并在内核中实现,所以这个方法不会有用.事件发生后inotify通知我无法保存它.你能建议任何这样的方法.我想在内核模块中实现它,而不是修改内核代码本身.格雷厄姆·李建议的另一种方法,我曾想过这种方法,但它有一些问题,我需要所有文件的硬链接镜像它不占用空间但仍然可能有问题,因为我必须反复镜像驱动器以保持我的镜像到日期,它也不会工作跨分区和分区不支持链接所以我想要一个解决方案,通过它我可以挂钩到文件/目录,然后观察更改而不是重复扫描.我还想添加对修改文件的写入支持,我不能使用硬链接.我想通过替换系统调用拦截系统调用,但我还没有找到任何在linux> 3.0中执行此操作的方法.请提出一些方法.

Cor*_*son 7

至于挂钩内核和拦截系统调用,这是我在我写的安全模块中做的事情:

https://github.com/cormander/tpe-lkm

查看代码的hijacks.c和symbols.c; 它们的使用方式是在hijack_syscallssecurity.c 中的函数中.我还没有在linux> 3.0上尝试过这个,但同样的基本概念应该仍然有效.

这有点棘手,你可能需要编写大量的内核代码才能在取消链接之前进行文件复制,但这里有可能.