![]() |
Bezpieczeństwo systemów Linux'owych |
Linux Security - Perl w administracji
|
|
![]() |
[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 ( |
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 ( |
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) |