| Perl-Basics | Perl-Enhanced | ||
|---|---|---|---|
Tips und Tricks zu Perl
Security
Änderungen in Dateien feststellen:
Um feststellen zu können, ob eine Datei verändert worden ist, kann man mehrere Wege beschreiten. Man kann z.B. die ganzen Dateiattribute wie Dateigröße, atime, ctime, mtime überwachen. Wenn jedoch jemand sehr sorgfältig Änderungen in bestimmten Dateien macht, kann es sein, daß man mit dieser Methode nicht mehr feststellen kann, ob die Datei immer noch die ursprüngliche Datei ist, und nicht etwa eine untergeschobene wie z.B. ein trojanisches Pferd.
Eine Möglichkeit, die mehr Erfolg verspricht, beruht darauf, einen Fingerabdruck von der Datei zu erzeugen und den dann separat abzuspeichern. Wenn der Fingerabdruck gut genug ist, kann man so Veränderungen erkennen.
Um einen solchen Fingerabdruck zu erstellen, verwende ich recht gerne die Digest:: -Module, z.B. Digest::MD5. Dieses Modul bietet sowohl ein prozedurales als auch ein OOP-Interface (wobei das OOP-Interface nur unwesentlich langsamer ist).
sub GetFingerPrint {
my $filename = shift;
open (FILE, "<", $filename)
or die "ERROR: couldn't read $file: $!\n";
binmode(FILE);
use Digest::MD5;
my $md5 = Digest::MD5->new();
$md5->addfile(*FILE);
close (FILE);
my $fingerPrint = $md5->hexdigest;
$fingerPrint =~ s/([A-Fa-f\d]{2})/$1 /g; # schönere Formatierung
return $fingerPrint;
} # GetFingerPrint
Oder etwas kompakter (wenn auch nicht unbedingt leserlicher)::
sub GetFingerPrint2 {
my $filename = shift;
open (FILE, "<", $filename)
or die ("ERROR: couldn't open $file: $!\n");
binmode(FILE);
use Digest::MD5;
my $fingerPrint = Digest::MD5->new->addfile(*FILE)->hexdigest;
$fingerPrint =~ s/([A-Fa-f\d][A-Fa-f\d])/$1 /g;
return ($fingerPrint);
} # GetFingerPrint2
Aufruf: my $fingerPrint = &GetFingerPrint("/etc/passwd");
Diese Lösung läuft (wenn alle benötigten Module installiert sind) unter Win32, Solaris und Linux sehr gut. Weitere Betriebssysteme habe ich noch nicht ausprobiert.
Die Formatierung von $fingerPrint durch die Ersetzung (fuegt nach jeder 2. Stelle ein Leerzeichen ein) ist nicht nötig, aber manchmal ganz fein. Das menschliche Auge bekommt wohl öfter Hexzahlen zu Gesicht, die zu Paaren angeordnet sind als welche ohne Unterbrechung.
Letztes Update dieser Seite: Tuesday, 27-Jun-2006 20:37:01 CEST