如何获取服务器上创建和删除的文件列表?

如何获取服务器上创建和删除的文件列表?

我有一个图像共享网站,用户昨晚登录并上传图像,我丢失了大约 30 张新连续上传的图像...我的意思是它们已经上传了......显然......它们在数据库中,但服务器上的实际图像已经不见了!

错误日志没有显示任何内容...所以我认为我的最佳选择是检查已创建和已删除文件的列表...如果有的话!服务器上是否有已创建和已删除文件的日志文件?我正在使用 directadmin

答案1

您可以使用以下功能跟踪文件系统中的更改auditd(8)

一个简单的例子:


# mkdir /root/test
# auditctl -w /root/test/ -p wa
# touch test/foo
# rm -f test/foo

日志被保存下来/var/log/audit/audit.log并可以进行进一步分析:


# tail /var/log/audit/audit.log
type=CONFIG_CHANGE msg=audit(1372668317.891:159): auid=0 ses=6 subj=unconfined_u:system_r:insmod_t:s0-s0:c0.c1023 op="add rule" key=(null) list=4 res=1
type=SYSCALL msg=audit(1372668344.279:160): arch=c000003e syscall=2 success=yes exit=3 a0=7fff4884994f a1=941 a2=1b6 a3=7fff48847900 items=2 ppid=3817 pid=5859 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 ses=6 tty=pts3 comm="touch" exe="/bin/touch" subj=unconfined_u:system_r:insmod_t:s0-s0:c0.c1023 key=(null)
type=CWD msg=audit(1372668344.279:160):  cwd="/root"
type=PATH msg=audit(1372668344.279:160): item=0 name="test/" inode=4271 dev=fe:01 mode=040700 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0
type=PATH msg=audit(1372668344.279:160): item=1 name="test/foo" inode=4723 dev=fe:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0
type=SYSCALL msg=audit(1372668371.491:161): arch=c000003e syscall=263 success=yes exit=0 a0=ffffffffffffff9c a1=15850c0 a2=0 a3=7fff0e0cd790 items=2 ppid=3817 pid=5866 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 ses=6 tty=pts3 comm="rm" exe="/bin/rm" subj=unconfined_u:system_r:insmod_t:s0-s0:c0.c1023 key=(null)
type=CWD msg=audit(1372668371.491:161):  cwd="/root"
type=PATH msg=audit(1372668371.491:161): item=0 name="test/" inode=4271 dev=fe:01 mode=040700 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0
type=PATH msg=audit(1372668371.491:161): item=1 name="test/foo" inode=4723 dev=fe:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0

# ausearch -m SYSCALL -ts recent
----
time->Mon Jul  1 10:45:44 2013
type=PATH msg=audit(1372668344.279:160): item=1 name="test/foo" inode=4723 dev=fe:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0
type=PATH msg=audit(1372668344.279:160): item=0 name="test/" inode=4271 dev=fe:01 mode=040700 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0
type=CWD msg=audit(1372668344.279:160):  cwd="/root"
type=SYSCALL msg=audit(1372668344.279:160): arch=c000003e syscall=2 success=yes exit=3 a0=7fff4884994f a1=941 a2=1b6 a3=7fff48847900 items=2 ppid=3817 pid=5859 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 ses=6 tty=pts3 comm="touch" exe="/bin/touch" subj=unconfined_u:system_r:insmod_t:s0-s0:c0.c1023 key=(null)
----
time->Mon Jul  1 10:46:11 2013
type=PATH msg=audit(1372668371.491:161): item=1 name="test/foo" inode=4723 dev=fe:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0
type=PATH msg=audit(1372668371.491:161): item=0 name="test/" inode=4271 dev=fe:01 mode=040700 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0
type=CWD msg=audit(1372668371.491:161):  cwd="/root"
type=SYSCALL msg=audit(1372668371.491:161): arch=c000003e syscall=263 success=yes exit=0 a0=ffffffffffffff9c a1=15850c0 a2=0 a3=7fff0e0cd790 items=2 ppid=3817 pid=5866 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 ses=6 tty=pts3 comm="rm" exe="/bin/rm" subj=unconfined_u:system_r:insmod_t:s0-s0:c0.c1023 key=(null)

答案2

您无法有效地获得这样的列表。inotifywatch如果您使用的是 Linux,并且您的 Linux 发行版支持它,您可以使用它来实时查看目录中正在创建和删除的文件,但不能查看历史记录(不会保留此类日志)。

如果文件丢失,您应该考虑检查文件系统的一致性。在 ext2 和其他一些文件系统中,它们将出现在lost+found分区根目录中的文件夹中,但确切的识别方法取决于您的文件系统。

还请检查您是否正在运行定期作业,该作业可能会由于某种原因(例如从备份中恢复目录)删除它们。

相关内容