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