2008-01-15

Linux filemon, 你在哪里?

Linux filemon, 你在哪里?
2007-12-28 01:16:25

今天遇到一个问题,确切地说是同事遇到的一个问题引起了我的兴趣:log显示在User Mode Linux中有一个文件的访问频率异乎寻常的高,这种频繁的File IO似乎不应该出现,那我们怎么找到那一个/几个正在访问这个文件的程序呢?

要是在Windows下面比较好办,装一个filemon(
sysinternals上一帮人写的)就可以了,注:sysinternals上有很多类似的工具,可以监视文件、网络、注册表等等,对于平常debug程序来说是些不错的辅助工具。

那在Linux下面呢?对于我这个Linux Newbie来说可就犯难了。经过简单的资料搜索,我的结论是:在Linux下面情况似乎有些复杂...
在Linux-kernel 2.6.x的早期版本里面提供了dnotify的机制来实现file system monitor,确切地说是directory monitor,它提供给应用程序一种途径去监视某个目录下文件的访问情况,但是:
- 它只能监视目录,不能监视指定的某个文件;我们那个文件在/tmp/目录下面。
- 它好像不能告诉应用程序是哪个程序在访问该文件,handler里面倒是有si_pid这个item,但是我发现在UML里面即使我用不同的程序打开那个文件,handler输出来的都是一个PID?!

在Linux-kernel 2.6.x的最近版本提供了inotify机制来弥补dnotify的一些不足(具体什么不足我还不是很清楚,因为两者对我来说都是新鲜事物)。但是我们用的UML是base在2.6.10上的,所以inotify就不予考虑了。

后来看到论坛上有人说可以借助LSM(Linux Security Module)来满足我的需求,于是我又下载了一篇
Usenix Security 2002上的文献 - Linux Security Module Framework(Chris Wright and Crispin Cowan, Stephen Smalley, James Morris and Greg Kroah-Hartman),看起来像是会议文献。根据文献所说,LSM提供了包括File Hook在内的多种Hook以实现其安全框架。满心欢喜,准备实践,根据文献说明:
"LSM is available as a kernel patch for both the 2.4 and 2.5 Linux kernels. The patches are available from http://lsm.immunix.org."
但是很不幸,
http://lsm.immunix.org不能访问,网络原因?这个project中止了?

接着google了一下LSM,好家伙,居然发现Linux有很多Security Solutions,其中以LSM和SELinux为主。按照论坛里一个日本人的说法,LSM是path-based-security,而 SELinux是Label-based-security。但是好像至今为止LSM并没有merge到Mainline里面去,还是必须打patch。

找工具这条路好像有些走不通了,留给我的问题很多:
- LSM的patch在哪里?
- LSM的patch能不能在UML(linux-kernel-2.6.10)里面打?
- 就算LSM可用了,它的File Hook能不能提供足够的信息,比如是哪一个进程在访问哪一个文件?

因为我们的问题域是在UML里,所以我们还有这样的选择:
- Hook文件IO函数;
- 重新编译UML;
- 重新在UML中部署我们的应用;
- 复现那个问题;

但我还是倾向于第一种方案

No comments: