如何记录特定目录下所有对 php 文件的写入?

如何记录特定目录下所有对 php 文件的写入?

有没有办法让我的 centos 服务器监视我的 /home 目录中对 .php 文件的任何写入请求并记录写入请求的文件名和时间戳?

我感觉有人在四处打探,只是想看看是否有未经授权的写入发生。

答案1

使用 auditd,首先需要确保服务 auditd 正在运行

service auditd status
auditd (pid  2973) is running...

现在,如果您有许多文件,您可以使用 find 来编写审计规则。

find /home/ -type f -name '*.php' -exec auditctl -a exit,always -F path={} -F perm=rwa \;

现在您可以尝试访问一个 php 文件。

cat /home/file.php 
hello world

现在你可以使用 ausearch

ausearch -f /home/file.php
----
time->Fri Jul 10 18:11:43 2015
type=PATH msg=audit(1436479903.574:224): item=0 name="/home/file.php" inode=9469 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:home_root_t:s0 nametype=NORMAL
type=CWD msg=audit(1436479903.574:224):  cwd="/root"
type=SYSCALL msg=audit(1436479903.574:224): arch=c000003e syscall=2 success=yes exit=3 a0=7fff6a695805 a1=0 a2=7fff6a693710 a3=7fff6a693160 items=1 ppid=1636 pid=3299 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)

正如您在上面的输出中看到的,您有以下信息:PID、PPID、SYSCALL NUMBER、COMM 等等。

答案2

您可以对它们进行哈希处理。这不是一个完美的解决方案,但您可以对每个 PHP 文件运行 md5sum,然后将其写入文件。然后过一会儿再运行它,将其写入文件。您可以对两个 md5sum 运行 diff,看看哪些文件发生了变化。

为了进行递归 md5sum,这里. 对于 diff,这里

您可以使用 find 列出目录下的每个 php 文件,获取该列表,并将该列表传递给每个 md5sum 检查。

请记住他们可能能够修改此文件,因此请采取措施确保您怀疑的任何人都不能更改 md5sum。

编辑:或者,像auditd这样的第三方程序。

再次编辑:你甚至不需要 diff,md5sum -c

答案3

我觉得这值得另一个答案,而不是编辑。

与我的回答类似,这是一个实际的实现。 http://pastebin.com/jXPAL8dS

保存脚本,使其可执行,然后运行:

mkdir /md5s && ./md5chk

然后使用 cron 作业或其他程序运行 ./md5chk。如果您让它在后台运行,请考虑将其通过管道传输到 wall 或写入日志文件(只需 ./md5chk >> /var/log/md5s.log)以提供适当的警报。在顶部添加一行,简单地说

date 

获取执行时间。

有些人可能认为这是重新发明轮子,但

  1. 我更喜欢这个输出
  2. auditd = 系统的另一个依赖项,而 md5sum 可能是预先安装的

相关内容