我怎样才能得到在服务器上创build和删除的文件列表?

我有一个图像共享网站,用户login和上传图像昨晚我失去了大约30个新连续上传的图像…我的意思是他们已经上传…显然…他们在数据库中,但实际的形象在服务器上不见了!

错误日志不显示任何东西…所以我认为我最好的select是检查创build和删除的文件列表…如果有任何! 有没有在服务器上创build和删除文件的日志文件? 我正在使用directadmin

您可以使用auditd(8)function跟踪文件系统中的更改:

一个简单的例子:

 # 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) 

你不能有效地得到这样的清单。 你可以使用inotifywatch如果你正在使用linux,你的linux发行版支持它查看正在创build和删除目录中的文件的实时,但不是历史(这种日志不保留)。

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

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