有没有办法记录谁上传或更改了特定文件?(centos)

有没有办法记录谁上传或更改了特定文件?(centos)

可能重复:
我的服务器被黑了 紧急求助

有一个文件不断感染代码。我不明白为什么。所以我想记录谁上传或更改了文件。有没有办法记录谁上传或更改了特定文件?

PS:没有FTP登录。我们只使用SSH和Plesk。

答案1

是的,有。审计子系统有一些非常出色的会计功能。

运行以下命令将审核对文件的更改:

auditctl -w /my/specificly/modified/file.txt -p w -k "suspect file change"

这将对此文件设置一个监视,每当它被写入修改时,都会记录更改,并且会记录得相当广泛。

您可以通过以下方式检查日志:

ausearch -i -k "suspect file change"

这将返回如下输出:

type=PATH msg=audit(05/08/2012 17:32:32.353:13118) : item=1 name=/tmp/test.txt inode=5767528 dev=fd:00 mode=file,644 ouid=root ogid=root rdev=00:00 obj=staff_u:object_r:user_tmp_t:s0 
type=PATH msg=audit(05/08/2012 17:32:32.353:13118) : item=0 name=/tmp/ inode=5767169 dev=fd:00 mode=dir,sticky,777 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:tmp_t:s0 
type=CWD msg=audit(05/08/2012 17:32:32.353:13118) :  cwd=/home/matthew/Testbed/C/fanotify 
type=SYSCALL msg=audit(05/08/2012 17:32:32.353:13118) : arch=x86_64 syscall=unlinkat success=yes exit=0 a0=0xffffffffffffff9c a1=0xb540c0 a2=0x0 a3=0x7fff50cfba20 items=2 ppid=13699 pid=2773 auid=matthew uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=2 comm=rm exe=/usr/bin/rm subj=staff_u:sysadm_r:sysadm_t:s0 key=some file 

如果您想要更强大的功能,您可以选择监视通常不愿意删除的用户的任何删除操作。对于性能而言,规则越具体越好。

auditctl -a exit,always -F arch=b64 -S unlink -S rmdir -F auid=78 -F dir=/var/www/vhost

-F 定义过滤器,-S 定义系统调用,过滤器越多,内核跟踪过滤器的强度就越低。因此,在本例中,我过滤用户 (apache)、vhosts 目录和 arch。arch 变得很重要,b64 表示 64 位,b32 表示 32 位。

您可以通过将规则放入 /etc/audit.rules 来长期设置这些规则。

答案2

由于您使用的是 CentOS,因此您可以使用 SELinux 来处理这种情况。您可以重新标记相关文件,httpd_config_t如下所示:chcon -v --type=httpd_config_t /the/html/file/in/question.html

然后 SELinux 会将错误记录到 /var/log/audit/audit.log 。如果您在“宽容”模式下运行 SELinux,它将允许更改;如果您在“强制”模式下运行,它将不允许更改。

看一眼:http://wiki.centos.org/HowTos/SELinux了解更多信息。注意:默认情况下,SELinux 在 CentOS 中运行并强制执行,因此您只需更改此文件的标签即可。

相关内容