我正在编写一个应用程序,我需要拦截一些文件系统系统调用,例如。取消链接。我想保存一些文件,比如 abc.txt。如果用户删除该文件,那么我需要将其复制到其他地方。所以我需要在删除 abc 之前取消链接来调用我的代码,以便我可以保存它。我已经完成了与拦截系统调用相关的线程,但是像 LD_PRELOAD 这样的方法在我的情况下不起作用,因为我希望它是安全的并在内核中实现,所以这个方法不会有用。 inotify 在事件发生后发出通知,因此我无法保存它。你能建议任何这样的方法吗?我想在内核模块中实现它,而不是修改内核代码本身。
Graham Lee建议的另一种方法,我曾想过这种方法,但它有一些问题,我需要所有文件的硬链接镜像,它不消耗空间,但仍然可能有问题,因为我必须重复镜像驱动器以保持镜像最新日期,它也不能跨分区工作,并且在不支持链接的分区上工作,所以我想要一个解决方案,通过它我可以将挂钩附加到文件/目录,然后监视更改而不是重复扫描。
我还想添加对写入修改文件的支持,我无法使用硬链接。
我想通过替换系统调用来拦截系统调用,但我在 linux > 3.0 中找不到任何执行此操作的方法。请建议一些方法来做到这一点。
至于挂接到内核并拦截系统调用,这是我在编写的安全模块中所做的事情:
https://github.com/cormander/tpe-lkm https://github.com/cormander/tpe-lkm
查看hijacks.c和symbols.c的代码;它们的使用方式是hijack_syscalls
security.c 内部的函数我还没有在 linux > 3.0 上尝试过这个,但是相同的基本概念应该仍然有效。
这有点棘手,您可能必须编写大量内核代码才能在取消链接之前进行文件复制,但这里是可能的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)