我的网站受到FTP恶意攻击,破解者在我的主目录中修改/创build了一些文件。
假设恶意创build/修改的date是2011-4-5 21:38:09。 我怎样才能find其他文件在public_html被修改/创build的那个时间?
试图通过谷歌search,但没有有用的发现。 你能给我举一些例子吗? 像LS还是find? 谢谢!
touch -m -t 201104052138.08 /tmp/timestamp find /dir --newer /tmp/timestamp
最初的触摸创build一个文件,在你需要的时间戳之前有一秒钟的时间,然后查找然后使用它来查找在那段时间之后被修改的文件(就内容而言)。
您还需要检查权限和组的所有权。 你不能使用上述技术来做到这一点,因为touch只能改变atime和mtime。 所以,你最好决定什么是正确的权限,并重新设置它们。 例如,如果您的Web文件通常由组名为www-pub的root拥有,并且对于目录拥有0755的权限,对于文件拥有0644的权限,则可以使用
find /dir \! -user root
find不属于root的文件和目录
find /dir \! -group www-pub
find不属于www-pub的文件和目录
find的-perm标志也可以用来查找基于权限的文件,但是最好把它们设置成它们应该是的。
find /dir -exec chown root:www-pub {} \; find /dir -type f -exec chmod 0644 {} \; find /dir -type d -exec chmod 0755 {} \;
使用find
# find /home -ctime -2
这意味着“find/最近48小时更改的文件”。 2乘以24小时,所以如果你需要72小时你使用3,依此类推。 如果您需要查找超过X天更改的文件,请使用+而不是 – 。
你可能想列出这些文件:
# find /home -ctime -2 -exec ls -l {} \;
请记住, ctime包含在过去X小时内创build或更改的文件。
find /dir -newerma "2011-xx-xx"
或者你可以看看这里
要查找特定date/周围的文件(而不是特定date之后),您需要编写一个自定义脚本。 有两个select:
第一个肯定是更有效率的。 一个非常粗糙的Perl例子是:
#!/usr/bin/perl use strict; use warnings; use POSIX(); use File::Find(); sub usage() { die "usage: finddate yyyy-mm-ddThh:mm:ss marginsecs dirs..." } my( $mindate, $maxdate ); sub checkdate() { my @data = stat($_); foreach my $idx ( 9, 10 ) # mtime and ctime { if( $data[$idx] >= $mindate && $data[$idx] <= $maxdate ) { print "$File::Find::name\n"; last; } } } # Main Program { my $dtxt = shift(@ARGV); my $margin = shift(@ARGV); my $date; if( $dtxt =~ /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)$/ ) { $date = POSIX::mktime( $6, $5, $4, $3, $2-1, $1-1900 ); } else { usage(); } $mindate = $date - $margin; $maxdate = $date + $margin; File::Find::find( \&checkdate, @ARGV ); }
示例用法:
finddate.pl 2011-03-02T01:40:00 600 .
单个文件testing几乎是相同的东西,除了:
exit( !checkdate(@ARGV) ); 然后你可以在一个普通的查找命令中使用这个
find dir -exec finddate.pl 2011-03-02T01:40:00 600 {} \; -print
您可以使用交换机mtime来完成此任务。