Мой сайт скомпрометирован грубой атакой FTP, и взломщик изменил / создал некоторые файлы в моем домашнем каталоге.
Допустим, дата создания / модификации вредоносного ПО - 2011-4-5 21:38:09. Как я могу найти другие файлы в public_html, которые были изменены / созданы примерно в это время?
Пытался выполнить поиск через Google, но ничего полезного не нашел. Не могли бы вы привести мне несколько примеров? Нравится ls или найти? Спасибо!
Ты можешь:
touch -m -t 201104052138.08 /tmp/timestamp
find /dir -newer /tmp/timestamp
Первоначальное касание создает файл с mtime, равным одной секунде перед требуемой меткой времени, и затем find использует это для поиска файлов, измененных (с точки зрения содержимого) после этого времени.
Вы также захотите проверить разрешения и владение группой. Вы не можете использовать описанную выше технику для этого, так как прикосновение может изменить только atime и mtime. Итак, вам лучше определить правильные разрешения и просто сбросить их. Например, если обычно ваши веб-файлы принадлежат пользователю root с группой www-pub и имеют разрешения 0755 для каталогов и 0644 для файлов, вы можете использовать
find /dir \! -user root
найти файлы и каталоги, не принадлежащие root и
find /dir \! -group www-pub
для поиска файлов и каталогов, не принадлежащих www-pub
Флаг -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
Это означает «найти файлы в / home, которые изменились за последние 48 часов». 2 умножается на 24 часа, поэтому, если вам нужно 72 часа, вы используете 3 и так далее. Если вам нужно найти файлы, которые изменились более чем за X дней, используйте + вместо -.
Вероятно, вы захотите перечислить файлы так:
# find /home -ctime -2 -exec ls -l {} \;
Помни это ctime
включает файлы, созданные или измененные за последние X часов.
find /dir -newerma "2011-xx-xx"
или вы можете посмотреть Вот
Чтобы найти файлы на определенную дату или около нее (а не с определенной даты), вам нужно будет написать собственный сценарий. Для этого есть два варианта:
Первый, безусловно, более эффективен. Очень грубый пример 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 .
Тест одиночного файла почти то же самое, за исключением:
exit( !checkdate(@ARGV) );
Затем вы можете использовать это в обычной команде поиска, например
find dir -exec finddate.pl 2011-03-02T01:40:00 600 {} \; -print
Вы можете использовать переключатель mtime
для выполнения этой задачи.