2013-08-16 89 views
1

我想拦截Linux服务器中的每个磁盘写入操作。详细地说,我想在每次磁盘写入操作发生的时候捕获每个磁盘写入操作,并能够确定哪个进程发起了调用,它正在尝试写入的位置等等。为了简单起见,现在我只专注于ext3。我意识到auditfs和其他的“观察者”,一旦手术发生就会让你知道。如前所述,我想拦截它,并能够检索有关操作的所有信息(过程信息,目标位置,正在写入的内容)。如果存在中断/回调机制(例如,通过进程,进程组或会话 - pid,pgid,sid接收任何写入操作的通知),则会更好。在Linux中拦截磁盘写入

感谢

+0

你想拦截' write()'系统调用,还是截取数据实际发送到磁盘?因为后者可能因缓冲而延迟。而Unix使用共享缓冲区缓存,所以多个进程可能是“负责任的”。如果进程使用内存映射,则不会有'write()'。 – Barmar

+0

感谢Barmar的快速响应。我想在其他地方复制写入操作(也可能是删除操作)。我希望在磁盘写入过程中拦截可能是正确的。我不明白'多个过程可能是负责任的'。我对执行写入的高级过程感兴趣。请建议我最好的选择。谢谢。 – user630286

+1

两个进程在同一个文件上都使用'mmap()'。它们通过这个共享内存对文件的同一页面进行一些更新。最终页面刷新到磁盘 - 应该返回哪些进程信息? – Barmar

回答

1

我做了一些搜索上就此问题,而这些看好: •Copyhook处理程序 - 适用于MSDOS外壳,WinReg项 提起拦截DLL•NtSetInformationFile •微过滤器 - 我认为这是便携式用于跨平台 •可安装的文件系统驱动程序 - 当然,还有

文件共享类型:某些文件系统支持审计和保护强化,但可能只是“事后”。

CopyHook看起来很有希望简单:拦截shell文件操作调用窗口:

https://msdn.microsoft.com/en-us/library/bb776048.aspx

司机层次的东西变得非常毛茸茸的,非常快......