Bezpiecze±stwo system≤w Linux'owych

Linux Security - Perl w administracji
Strona g│≤wna

Nieudane pr≤by logowania
[1] [2]
W pisaniu program≤w do administracji bardzo przydatny jest Perl. Perl jest jΩzykiem programowania nie wymagaj▒cym zbytnio wiedzy o zarz▒dzaniu pamiΩci▒, budowie socket≤w i.t.p. W │atwy spos≤b mo┐na zbudowaµ zaawansowane programy administracyjne.

Chcieliby╢my, aby nasz program pokazywa│ np. nieudane pr≤by logowania. Do tego celu wykorzystamy plik log≤w (/var/log/secure). Musimy wyszukaµ wszystkie linijki zawieraj▒ce s│owo "Failure".
Przyk│adowy skrypt mo┐e wygl▒daµ w ten spos≤b:
#!/usr/bin/perl  
open(plik,'/var/log/messages') or 
die "Nie moge otworzyc pliku!!\n";
while () 
{ 
 print if (/FAILURE/); 
} 
close (plik);
Wynik tego programu bΩdzie jednak nieczytelny:
May 23 12:34:12 localhost ftpd[22143]: 1 FTP LOGIN FAILURE 
from www.linux.org, somone
May 24  2:54:23 localhost ftpd[22182]: 1 FTP LOGIN FAILURE 
from www.linux.org, somone 
Lepsz▒ przejrzysto╢µ mo┐na uzyskaµ po dodaniu opisu: kto, kiedy, sk▒d.
Tak wygl▒da ostatecznie kod skryptu:
#!/usr/bin/perl
open(tekst,'/var/log/messages') or 
die "Nie moge otworzyc pliku!!\n";
print "\n";
print "Bledne autoryzacje:\n";
print "\n";
printf "%-20s%-30s%-20s\n","HOST","DATA","LOGIN";
while ()
{
if (/FAILED/)
{
@tablica=split(/\s+/);
$adres=$tablica[9];
$czas=$tablica[0]." ".$tablica[1]." ".$tablica[2];
$user=$tablica[11];
$user=~s/,//;
if ($user eq "")
{
$user="----"
}

printf "%-20s%-30s%-20s\n",$adres,$czas,$user;
}
}
print "\n";
print "\tCopyright by tronix\n";
print "\n";
close(tekst);
Teraz w │atwy spos≤b mo┐emy odczytaµ nieudane pr≤by logowania:
HOST 	  	  DATA		       LOGIN

www.linux.org	  May 23 12:34:12 	somone, 
157.154.23.1 	  May 23 23:03:43 	tronix, 
www.linux.org	  May 24  2:54:23 	somone, 
W powy┐szym skrypcie zosta│a u┐yta funkcja split kt≤ra dzieli linie na osobne ci▒gi znak≤w. Jako argument tej funkcji jest podane wyra┐enia \s+ , kt≤re oznacza jedn▒ lub wiΩcej spacji. Czyli ka┐da linia zostanie podzielona na osobne │a±cuchy ze wzglΩdu na odstΩpy pomiΩdzy nimi a nastΩpnie zapisana do tablicy.

Linia $user=~s/,//; oznacza zast▒pienia wszystkich znak≤w "," z │a±cucha przez znak pusty. Oczywi╢cie jako drugi argument funkcji s mo┐na podaµ dowolny ci▒g.

Linia printf "%-20s%-30s%-20s\n",$adres,$czas,$user; oznacza wypisanie trzech zmiennych w odstΩpach: 20,30,20 spacji (3 kolumny)

ICMP - Pine - Fork - Firewall - Bezpieczne partycje
Suidy - Skanowanie - Word exportable - Backdoor'y - Sumy kontrolne
Perl - Logrotate - Shell przez WWW - Forum - KsiΩga go╢ci - Statystka - Linki

Kontakt: tronix@2com.pl
Copyright by Tronix (c)2001 All Rights Reserved