script 说明:

该脚本可以对指定的系统重要文件进行监控,当文件被查看或修改后,脚本会查看最近登陆系统的用户和IP,并发邮件通知。


  1. #!/usr/bin/perl 
  2. use strict; 
  3. use Mail::Sender; 
  4. use Digest::SHA; 
  5. my @files=('/etc/passwd''/etc/shadow''/var/log/wtmp'); 
  6. my $last_cmd=`last -2`; 
  7.  
  8. while (1) { 
  9.         my %md5_res; 
  10.         my %output
  11.         my @change; 
  12.         foreach my $file (@files) { 
  13.                 $md5_res{$file}=MD5_digest($file); 
  14.         }; 
  15.                 while(1) { 
  16.                         sleep 10; 
  17.                         foreach my $file (@files) { 
  18.                                 if ($md5_res{$file} ne MD5_digest($file)) { 
  19.                                         $output{$file}="$file is changed"
  20.  
  21.                                 }; 
  22.                         }; 
  23.                         if (%output) { 
  24.                                 foreach my $key (%output) { 
  25.                                        print "$output{$key}\n"
  26.  
  27.                                 } 
  28.                                 print "$last_cmd"
  29.                                 last
  30.                         }; 
  31.                 }; 
  32. }; 
  33.  
  34. sub MD5_digest { 
  35.         my $file=shift; 
  36.         my $sha=Digest::SHA->new('256'); 
  37.         $sha->addfile($file); 
  38.         my $digest=$sha->hexdigest; 
  39.         return "$digest"
  40.  
  41.  
  42.  
  43. sub Send_mail { 
  44.         my($subject,$msg)=@_; 
  45.         my $sender=new Mail::Sender->MailMsg({ 
  46.          smtp => 'mail.aaa.com'
  47.          from => 'neo@aaa.com'
  48.          to =>'neo@gmail.com'
  49.          subject => $subject, 
  50.          msg => $msg, 
  51.          auth => 'LOGIN'
  52.          authid => 'neo'
  53.          authpwd => '1234',} 
  54.         ) or die "$Mail::Sender::Error\n"
  55.         print "Mail sent ok"