Anda di halaman 1dari 143

Administracja Systemem Linux/Unix

Uniwersytet Marii Curie-Skodowskiej Wydzia Matematyki, Fizyki i Informatyki Instytut Informatyki

Administracja Systemem Linux/Unix

Bogdan Ksiopolski, Damian Rusinek

Lublin 2012

Instytut Informatyki UMCS Lublin 2012

Bogdan Ksiopolski, Damian Rusinek

Administracja Systemem Linux/Unix


Recenzent: Andrzej Bobyk Opracowanie techniczne: Marcin Denkowski Projekt okadki: Agnieszka Kumierska

Praca wspnansowana ze rodkw Unii Europejskiej w ramach Europejskiego Funduszu Spoecznego

Publikacja bezpatna dostpna on-line na stronach Instytutu Informatyki UMCS: informatyka.umcs.lublin.pl.

Wydawca
Uniwersytet Marii Curie-Skodowskiej w Lublinie Instytut Informatyki pl. Marii Curie-Skodowskiej 1, 20-031 Lublin Redaktor serii: prof. dr hab. Pawe Mikoajczak www: informatyka.umcs.lublin.pl email: dyrii@hektor.umcs.lublin.pl

Druk
FIGARO Group Sp. z o.o. z siedzib w Rykach ul. Warszawska 10 08-500 Ryki www: www.garo.pl

ISBN: 978-83-62773-24-4

Spis treci

1 Wstp
1.1. O czym jest ta ksika? . . . . . . . . . . . . . . . . . . . . . . . . .

7 8 9 10 10 12 15 17 17 21 27 29 31 32 34 42 47 50 59 60 63 63 67 78

2 Podstawy systemu Linux


2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9. Rozpoczcie pracy . . . . . Praca z konsol . . . . . . . Informacje o uytkowniku . Informacje o systemie . . . Poruszanie si po strukturze Zmienne rodowiskowe . . . Instalowanie pakietw . . . Strumienie . . . . . . . . . . Potoki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . katalogw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Przetwarzanie tekstu
3.1. 3.2. 3.3. 3.4. 3.5. Podstawowe operacje na plikach Wyszukiwanie plikw . . . . . . Wyraenia regularne . . . . . . Przeszukiwanie tekstu . . . . . Edytor SED . . . . . . . . . . . tekstowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Skrypty BASH
4.1. 4.2. 4.3. 4.4. 4.5. Pierwsze kroki . . . . . Komentarze . . . . . . . Zmienne . . . . . . . . . Instrukcje i wyraenia . Przykady z ycia wzite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 Administracja serwerem WWW - Apache

83 5.1. Instalacja serwera Apache . . . . . . . . . . . . . . . . . . . . . . . . 84 5.2. Gwny plik konguracyjny - apache2.conf . . . . . . . . . . . . . . . 86 5.3. Zaawansowana konguracja . . . . . . . . . . . . . . . . . . . . . . . 93

6 Zapora ogniowa oraz translacja adresw sieciowych - iptables

103 6.1. Iptables - podstawy . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.2. Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

SPIS TRECI

7 Skanowanie - sposb kontroli serwerw sieciowych 115


7.1. NMAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 7.2. Optymalizacja skanowania . . . . . . . . . . . . . . . . . . . . . . . . 122 7.3. Praktyczne zastosowania . . . . . . . . . . . . . . . . . . . . . . . . . 127

Bibliografia

143

Rozdzia 1
Wstp

1. Wstp

1.1. O czym jest ta ksika?


Dziki tej ksice czytelnik bdzie mg pozna system Linux zarwno ze strony uytkownika, jak rwnie administratora. Pierwszy rozdzia zawiera wstp do ksiki, ktry wanie czytasz. Drugi rozdzia dotyczy podstaw systemu Linux i przeznaczony jest dla pocztkujcych uytkownikw systemu. Trzeci rozdzia przedstawia techniki przetwarzania tekstu, ktre s przydatne w codziennej pracy z systemem. Rozdzia czwarty opisuje zagadnienie tworzenia skryptw powoki BASH. Tworzenie skryptw powoki, jest istotn umiejtnoci w pracy administratora systemu Linux. Rozdzia pity opisuj podstawow oraz zaawansowan konguracj serwera WWW na podstawie oprogramowania apache. Szsty rozdzia dotyczy zagadnie tworzenia tzw. zapr ogniowych oraz translacji adresw sieciowych przy pomocy oprogramowania iptables. Sidmy rozdzia przedstawia zagadnienie tzw. skanowania jako techniki monitorowania serwerw sieciowych. Wszystkie fragmentu kodu oraz przykady przedstawione w pierwszych czterech rozdziaach, zostay napisane oraz sprawdzone w dystrybucji Debian GNU/Linux 5.0. Kolejne trzy rozdziay ksiki, bazuj na dystrybucji Ubuntu 11.04, ktra rwnie wywodzi si z dystrybucji Debian.

Rozdzia 2
Podstawy systemu Linux

10

2. Podstawy systemu Linux W niniejszym rozdziale omwimy podstawowe komendy systemu Linux, dziki ktrym bdziemy mogli porusza si po systemie, a take zbiera informacj o nim i o jego elementach. Dowiemy si rwnie, jak rozpocz prac z systemem Linux zaraz po zalogowaniu.

2.1. Rozpoczcie pracy


Po uruchomieniu systemu uytkownik musi zalogowa si na swoje konto za pomoc nazwy uytkownika (inaczej loginu). login as:
Rysunek 2.1. Okno logowania

Po wpisaniu loginu naley poda rwnie swoje haso. Zarwno w przypadku loginu oraz hasa wielko liter ma znaczenie. Po poprawnym zalogowaniu si na swoje konto naszym oczom ukazuje si znak zachty (ang. prompt), ktrego przykadowy wygld jest widoczny na rysunku 2.2. user@host:/etc$
Rysunek 2.2. Znak zachty

Powyszy znak zachty skada si z nazwy uytkownika user, nazwy komputera host oraz scieki do aktywnego katalogu; w tym przypadku aktywnym folderem jest /etc. Ostatni znak $ moe mie posta hasha #, jeli efektywny UID jest rwny 0 (uytkownik ma prawa roota) lub znaku dolara $, jeli uytkownik nie ma praw roota. Jeli aktywnym katalogiem jest folder domowy uytkownika (zwykle /home/nazwa_uytkownika ), to cieka jest zastpowana znakiem tyldy . Wygld znaku zachty mona zmieni za pomoc zmiany zmiennej rodowiskowej PS1. Zmienne rodowiskowe omwimy w nastpnym rozdziale.

2.2. Praca z konsol


Uytkownik po zalogowaniu si wykorzystuje jedn z 7 konsoli wirtualnych, udostpnionych przez system. Ostatnia - sidma - konsola jest zarezerwowana dla sesji rodowiska gracznego X Window System. Pozostae sze konsoli to konsole tekstowe. Uytkownik ma moliwo przeczania si midzy konsolami za pomoc dwch metod. Pierwsza z nich to specjalne kombinacje klawiszy, druga to specjalna komenda.

2.2. Praca z konsol 2.2.1. Przeczanie si midzy konsolami kombinacj klawiszy W celu przeczenia si na inn konsol naley wcisn klawisz ALT oraz klawisz funkcyjny Fn, gdzie n jest numerem konsoli. Dodatkowo midzy ssiadujcymi konsolami mona si przecza za pomoc kombinacji ALT i strzaka w lewo/prawo [1]. Metoda ta umoliwia przeczenie si z konsoli tekstowej na dowoln inn. Jednake w przypadku sesji rodowiska gracznego X kombinacje te nie dziaaj. W tym przypadku naley uy kombinacji klawiszy CTRL, ALT i klawisz funkcyjny z numerem konsoli, na ktr chcemy si przeczy. Jest to jedyny skrt, ktry dziaa w rodowisku X. W rodowisku gracznym mona korzysta z konsoli okienkowych, czyli bez potrzeby przeczania si do konsoli tekstowej. Bardzo wygodnym narzdziem do pracy z konsolami jest yakuake. W kolejnych rozdziaach pokaemy jak w atwy sposb instalowa pakiety (programy i narzdzia). 2.2.2. Przeczanie si midzy konsolami za pomoc komendy Innym sposobem przeczania si midzy konsolami jest skorzystanie z komendy chvt. Przykadowe uycie zostao zaprezentowane na rysunku 2.3. chvt numer_konsoli
Rysunek 2.3. Przeczanie si midzy konsolami

11

Zamy, e pracujemy na konsoli nr 3 i chcemy przej na konsol nr 4. Mamy wtedy 3 moliwoci: wykorzystanie kombinacji klawiszy ALT + F4 ; wykorzystanie kombinacji klawiszy ALT + ->; uycie komendy chvt 4. 2.2.3. Przewijanie tekstu w konsoli Konsole uruchomione w sesji rodowiska gracznego posiadaj paski przewijania, dziki ktrym moemy przewin i podejrze wiersze, ktre zostay przesunite za ekran konsoli przez nowe wiersze. W przypadku konsoli tekstowych wczanych za pomoc kombinacji ALT + F1-F6 nie ma paska i do przewijania wierszy naley wykorzysta dwie kombinacje klawiszy: w celu pokazania wierszy, ktre zostay przesunite poza grn krawd ekranu musimy skorzysta z kombinacji SHIFT + PAGE UP; w celu pokazania wierszy, ktre zostay przesunite poza doln krawd ekranu (np. przez skorzystanie z powyszej kombinacji) musimy skorzysta z kombinacji SHIFT + PAGE DOWN. Kombinacje klawiszy SHIFT + PAGE UP/DOWN nie przewijaj wierszy w obrbie aplikacji uruchomionych z poziomu konsoli. W tym celu naley korzysta z mechanizmw przewijania, jakie dostarczaj dane aplikacje.

12

2. Podstawy systemu Linux

2.3. Informacje o uytkowniku


W tym podrozdziale omwimy komendy, ktre operuj na kontach uytkownikw, w szczeglnoci na koncie uytkownika, ktry jest aktualnie zalogowany. 2.3.1. Przedstaw si W celu sprawdzenia nazwy uytkownika naley skorzysta z komendy whoami. Przykad wykorzystania przedstawiono na rysunku 2.4. user@host:~$ whoami user
Rysunek 2.4. Sprawdzenie nazwy zalogowanego uytkownika

Komenda ta moe wydawa si nielogiczna, gdy przecie kady uytkownik wie, na jakie konto si logowa. Sens tej komendy wrci, gdy zajmiemy si skryptami BASH. Skrypty nie wiedz, ktry uytkownik jest zalogowany na systemie i dziki tej komendzie mog uzyska jego nazw. Przykadowe sytuacje, gdy ta informacja jest potrzebna to: stworzenie folderu uytkownika, w ktrym bd przechowywane dane pochodzce z uruchomionej aplikacji; wykonanie rnych operacji w zalenoci od tego, ktry uytkownik uruchamia skrypt. 2.3.2. Zmiana hasa eby zmieni haso, uytkownik musi skorzysta z komendy passwd. Przykad zmiany hasa zosta przedstawiony na rysunku 2.5. user@host:~$ passwd Zmienianie hasa dla user. Biece haso UNIX: Podaj nowe haso UNIX: Ponownie podaj haso UNIX: passwd: haso zostao zmienione
Rysunek 2.5. Zmiana hasa

Jak wida na rysunku 2.5 po uruchomieniu procesu zmiany hasa, naley poda stare haso. Jest to zabezpieczenie przed sesj pozostawion przez uytkownika. Gdyby obca osoba podesza do stanowiska i nie byoby tego zabezpieczenia, to mogaby ona zmieni haso zalogowanemu uytkownikowi. Nastpnie naley poda nowe haso i je potwierdzi. Wynika to z faktu, e hasa podczas wpisywania nie s wywietlane na ekranie. To rwnie jest zabezpieczenie

2.3. Informacje o uytkowniku przed obcymi osobami, ktre mogyby je podejrze. Gdy nowe hasa si zgadzaj, to wywietlona zostanie informacja, e haso zostao zmienione. 2.3.3. Lista zalogowanych uytkownikw W celu podejrzenia listy uytkownikw, ktrzy s aktualnie zalogowani w systemie, musimy skorzysta z komendy who. Przykadowy wynik komendy jest przedstawiony na rysunku 2.6. user pts/0 2011-09-30 14:08 (IP)
Rysunek 2.6. Lista aktywnych uytkownikw

13

Lista uytkownikw skada si z czterech kolumn. Pierwsza z nich to nazwa uytkownika, druga to terminal, na ktrym uytkownik jest zalogowany, trzecia to data logowania, za ostatnia to komentarz (w tym przypadku jest to IP, z ktrego uytkownik jest zdalnie zalogowany). W celu dodania nagwkw kolumn naley skorzysta z agi -H. user@host:~$ who -H UYTKOWNIK TERM user pts/0

CZAS 2011-09-30 14:08

KOMENTARZ (IP)

Rysunek 2.7. Lista aktywnych uytkownikw z tytuami kolumn

2.3.4. Lista zalogowanych uytkownikw i operacje przez nich wykonane Komenda who wywietla podstawowe informacje o zalogowanych uytkownikach. Jeli potrzebujemy bardziej szczegowych informacji to powinnimy skorzysta z komendy w. Wynik komendy zosta przedstawiony na rysunku 2.8. user@host:~$ w 14:42:17 up 8 days, 2:22, 1 user, load average: 0,00, 0,00, 0,00 USER TTY FROM LOGIN IDLE JCPU PCPU WHAT user pts/0 IP 14:08 0.00s 0.36s 0.00s w
Rysunek 2.8. Wynik komendy w

Komenda w na pocztku wywietla informacje o systemie takie jak: aktualny czas systemu; okres przez jaki system dziaa; ilo zalogowanych uytkownikw.

14

2. Podstawy systemu Linux Poniej wywietlona jest omiokolumnowa lista uytkownikw, gdzie: kolumna USER to nazwa uytkownika; kolumna TTY to terminal, na ktrym uytkownik pracuje; kolumna FROM zawiera adres IP, z ktrego uytkownik jest zalogowany zdalnie lub jest pusty, gdy uytkownik jest zalogowany lokalnie; kolumna LOGIN to data zalogowania si do systemu; kolumna IDLE to okres, przez jaki uytkownik by nieaktywny; kolumna JCPU to cakowity czas procesora przydzielony na wykonanie zada uytkownika; kolumna PCPU to cakowity czas procesora przydzielony na wykonanie zewntrznych procesw; kolumna WHAT to nazwa aktualnie wykonywanego procesu. Jak wida na rysunku 2.8, uytkownik user zalogowa si o godzinie 14:08 i aktualnie wywietli list zalogowanych uytkownikw (komenda w ).

2.3.5. Ostatnie logowanie W celu sprawdzenia ostatniej daty logowania uytkownika, ktry nie musi by zalogowany, musimy skorzysta z komendy last. user@CSS:~$ last user pts/0 IP Fri Sep 30 14:08 user pts/0 IP Thu Sep 29 13:13 user pts/0 IP Thu Sep 29 13:11 reboot system boot 2.6.26-2-686 Thu Sep 22 12:20 user pts/0 IP Fri Sep 16 01:58 reboot system boot 2.6.26-2-686 Thu Sep 15 13:10
Rysunek 2.9. Wynik komendy last

still logged in 17:44 (04:31) 13:12 (00:00) - 15:14 (8+02:53) 01:58 (00:00) - 15:14 (15+02:03)

Uycie komendy bez adnego argumentu wywietla list ostatnich logowa do systemu. Ja wida na rysunku 2.9 ostatnio do systemu logowa si tylko uytkownik user. Daty logowania oraz czas zalogowania znajduj si w ostatniej kolumnie. Jeli chcemy sprawdzi, kiedy ostatnio logowa si konkretny uytkownik, to jako argument musimy poda jego nazw. user@CSS:~$ last bogdan bogdan pts/0 host bogdan pts/0 host

Thu Sep Thu Sep

1 15:42 - 15:47 1 15:41 - 15:41

(00:04) (00:00)

Rysunek 2.10. Wynik komendy last dla jednego uytkownika

2.4. Informacje o systemie

15

2.4. Informacje o systemie


Informacje o systemie moemy oglnie podzieli na dwa rodzaje: informacje, ktre si nie zmieniaj, takie jak np. zainstalowany sprzt czy dystrybucja oraz te, ktre si cigle zmieniaj, takie jak uruchomione procesy, zuycie pamici czy procesora. Na pocztku rozdziau napisalimy, e wszystkie fragmentu kodu i zrzuty ekranu pochodz z dystrybucji Debian GNU/Linux 5.0. W celu sprawdzenia jaka dystrybucja systemu Linux jest zainstalowana naley uy komendy head na pliku konguracyjnym /etc/issue, w sposb przedstawiony na rysunku 2.11. head -n1 /etc/issue
Rysunek 2.11. Skadnia komendy sprawdzajcej zainstalowan dystrybucj systemu Linux

Skadnia komendy head zostanie omwiona w nastpnym rozdziale. 2.4.1. Procesy Podstawow komend do wywietlenia listy uruchomionych procesw jest komenda ps. Uruchamiajc t komend bez adnych ag, otrzymamy prost list procesw uruchomionych przez uytkownika, na ktrego si zalogowalimy. W celu wywietlenia wszystkich procesw wszystkich uytkownikw wraz wykorzystaniem pamici i procesora naley uy dodatkowych ag aux. ps aux
Rysunek 2.12. Komenda wywietlajca rozszerzon list uruchomionych procesw

W przypadku, gdy chcemy wywietli procesy jednego uytkownika, to musimy skorzysta z agi -u. ps -u user
Rysunek 2.13. Wszystkie procesy uytkownika user

Komenda ps wywietla stan procesw z danej chwili, w ktrej zostaa uruchomiona. W celu wywietlenia listy procesw, ktra jest co chwil odwieana, naley uy komendy top. Wynik tej komendy jest przedstawiony na rysunku 2.14. Komenda top w skrcie wywietla informacj o aktualnym stanie systemu. Wywietla ilo taskw z podziaem na ich aktualny stan, informacje o pamici operacyjnej, przestrzeni wymiany oraz o zuyciu procesora. Dodatkowo wywietlana jest lista procesw, ktra jest co chwil odwieana. Znajduj si na niej podstawowe informacj dotyczce kadego z procesw, takie jak

16

2. Podstawy systemu Linux

Rysunek 2.14. Wynik komendy top

identykator, nazwa, czy uycie pamici oraz procesora. Oprcz nich lista zawiera rwnie dodatkowe informacje o procesie, jak np. priorytet (kolumna PR), czy stan procesu (kolumna S). Proces moe znajdowa si w jednym z nastpujcych stanw: R (ang. running) - proces aktualnie wykonywany; S (ang. sleeping) - proces w stanie spoczynku; T (ang. stopped) - proces zatrzymany Z (ang. zombie) - proces skoczony, ktry czeka a jego pozostaoci zostan usunite z pamici. Czasami zdarzy si sytuacja, kiedy program si zawiesi i przestanie odpowiada. Wtedy jedynym wyjciem jest zakoczenie jego dziaania przez zabicie jego procesu. Do tego suy komenda wysyajca sygnay do procesw o nazwie kill. kill identyfikator_procesu
Rysunek 2.15. Komenda koczca proces

Najprostszym sposobem zabicia procesu jest komenda przedstawiona na rysunku 2.15. Jeli nie okrelimy typu wysyanego sygnau, to domylnie wysyany

2.5. Poruszanie si po strukturze katalogw jest sygna TERM, koczcy proces. Identykator procesu mona pobra z listy wywietlonej przez komend ps lub top. Niektre procesy przechwytuj i ignoruj sygna TERM. Wtedy naley przesa sygna, ktry nie moe zosta przechwycony. W tym celu jako jedn z ag naley doda -9. Przykad jest przedstawiony na rysunku 2.16. kill -9 identyfikator_procesu
Rysunek 2.16. Komenda wymuszajca zakoczenie procesu

17

2.5. Poruszanie si po strukturze katalogw


Gwn komend do poruszania si po strukturze katalogw jest komenda cd. cd cieka
Rysunek 2.17. Skadnia komendy cd

Argument cieka moe by ciek bezwzgldn lub wzgldn. cieka bezwzgldna rozpoczyna si od znaku slash / i zawiera wszystkie foldery poczwszy od folderu gwnego systemu. Znak slash / jest utosamiany z folderem gwnym systemu. W przeciwiestwie do systemu Windows, w systemie Linux foldery rozdzielane s znakiem slash /, a nie backslash \. cieka wzgldna rozpoczyna si od folderu w ktrym aktualnie si znajdujemy. Std, chcc przej do folderu, ktry jest podfolderem aktualnie odwiedzanego folderu, nie musimy pisa caej bezwzgldnej cieki, a jedynie nazw podfolderu. Zamy, e znajdujemy si w folderze /etc i chcemy sie dosta do folderu /etc/init.d W przypadku cieki bezwzgldnej bdzie to komenda cd /etc/init.d W przypadku cieki wzgldnej bdzie to po prostu cd init.d lub cd ./init.d Kropka reprezentuje folder, w ktrym aktualnie si znajdujemy. Za pomoc cieki wzgldnej moemy rwnie przechodzi do folderw nadrzdnych. Aby to zrobi, naley wpisa dwie kropki ... Na przykad chcc si dosta z folderu /etc do folderu /var naley uy komendy cd ../var

2.6. Zmienne rodowiskowe


Zmienne rodowiskowe zwane rwnie systemowymi to zmienne, ktre przechowuj wartoci zdeniowane zarwno przez system, jak i przez uytkownikw oraz uruchamiane skrypty. Mona je porwna do zmiennych globalnych, czyli s

18

2. Podstawy systemu Linux dostpne w caym systemie i w caym systemie przechowuj t sam warto. Posiadaj swoj unikaln nazw, za pomoc ktrej s rozrniane. Wielko liter w nazwach zmiennych ma znaczenie. Zmienna ZMIENNA oraz Zmienna to dwie rne zmienne. W systemie istniej predeniowane zmienne, ktrych nazwy s zarezerwowane. Dlatego podczas tworzenia nowych zmiennych trzeba uwaa, eby nie prbowa zapisa wartoci istniejcej zmiennej. Tych zmiennych nie mona zmieni, ale istniej rwnie predeniowane zmienne, ktrych wartoci mona zmienia, np. PATH. Wartoci tych zmiennych naley modykowa ostronie. Przykadowe predeniowane zmienne to: HOME - cieka do folderu domowego zalogowanego uytkownika; PATH - wskazuje folderu, w ktrych naley szuka plikw binarnych; PS1 - sposb wywietlania znaku zachty; EDITOR - nazwa domylnego edytora tekstu; SHELL - cieka do powoki zalogowanego uytkownika; i inne. Wszystkie zmienne rodowiskowe mona wywietli za pomoc komendy env. 2.6.1. Tworzenie zmiennych rodowiskowych W celu stworzenia lub zmiany wartoci zmiennej rodowiskowej naley wpisa w konsoli jej nazw, znak rwnoci (=) oraz warto w cudzysowie. NAZWA_ZMIENNEJ="WARTO"
Rysunek 2.18. Ustalenie wartoci zmiennej rodowiskowej

Przypisujc warto do zmiennej, naley pamita o tym, aby nie umieszcza spacji midzy znakiem rwnoci a nazw zmiennej oraz cudzysowem. Tak zapisana zmienna bdzie dostpna w aktualnej powoce oraz bdzie moga by wykorzystywana w skryptach wykonywanych w tej powoce. Aby zmienna bya dostpna rwnie w jej podpowokach, naley j wyeksportowa. W zalenoci od rodzaju powoki robimy to za pomoc rnych komend: bash - komenda export ; sh - komenda export ; tcsh - komenda setenv. W ten sposb utworzymy zmienn, z ktrej bdziemy mogli korzysta w wielu powokach, ale tylko do momentu wylogowania si. 2.6.2. Zapisywanie zmiennych rodowiskowych na stae Kada powoka systemu posiada swoje pliki startowe, ktre s uruchamiane po zalogowaniu si uytkownika. Jako, e w tym skrypcie wykorzystywana jest powoka BASH, to wanie na jej przykadzie pokaemy jak zapisa zmienn rodowiskow na stae z wykorzystanie plikw startowych powoki. Pliki, ktrych nazwy rozpoczynaj si od kropki, s ukryte. W niektrych systemach nie ma pliku .bash_prole. W BASHu pliki startowe znajduj si w folderze

2.6. Zmienne rodowiskowe domowym uytkownika i nazywaj si .bash_prole oraz .bashrc. Jeli przyjrzymy si ich zawartoci, to zauwaymy, e ju s w niej ustalane niektre zmienne rodowiskowe, np. PS1. W celu zapisania na stae naszej zmiennej, musimy dopisa do pliku komend, ktra j ustawia - przykad na rysunku 2.19. export NAZWA_ZMIENNEJ="WARTO"
Rysunek 2.19. Ustalenie wartoci zmiennej rodowiskowej

19

Dziki tej linii system bdzie wykonywa t komend po kadorazowym zalogowaniu si uytkownika, dziki czemu zmienna bdzie dostpna ju na stae. Pliki startowe mona wykorzysta do wywoywania dowolnych komend, czy skryptw podczas logowania. Czstym przypadkiem wykorzystania tego mechanizmu jest ustawianie aliasw. Jeli otworzymy ponownie plik .bashrc, to zauwaymy linie podobne do przedstawionej na rysunku 2.20. alias ls=ls --color=auto
Rysunek 2.20. Przykad deniowania aliasu

W tym przypadku alias jest ustawiony na komend ls, ktry powoduje nadpisanie istniejcej komendy ls jej pokolorowan wersj, czyli ls color=auto. Uytkownik moe dowolnie ustala swoje aliasy i analogicznie do zmiennych rodowiskowych umieszcza w plikach startowych, eby byy dostpne po wylogowaniu si. 2.6.3. Pobieranie wartoci zmiennych rodowiskowych W celu pobrania wartoci zmiennej naley poprzedzi jej nazw znakiem dolara $. Samo pobranie wartoci zmiennej nic nam nie da i nie bdziemy mogli si przekona czy dziaa, dlatego uyjemy komendy echo, ktra jako argument przyjmuje warto, ktr wywietla na ekranie. Przykad zosta przedstawiony na rysunku 2.21. user@host:~$ MOJA_ZMIENNA="test" user@host:~$ echo $MOJA_ZMIENNA test
Rysunek 2.21. Pobieranie wartoci zmiennej

Szczeglnym przypadkiem jest wywietlenie warto zmiennej np. poczonej z innym cigiem znakw. Jeli do do zmiennej MOJA_ZMIENNA chcielibymy dopisa cig znakw owy, to musimy skorzysta z nawiasw klamrowych. Na rysunku 2.22 zosta przedstawiony przykad poprawnego pobrania wartoci zmiennej w takiej sytuacji. Przykad na rysunku 2.23 nie zadziaa, gdy w tym przypadku

20

2. Podstawy systemu Linux bdziemy prbowali pobra warto zmiennej MOJA_ZMIENNAowy, ktra nie jest zdeniowana. echo ${MOJA_ZMIENNA}owy
Rysunek 2.22. Poprawna konkatenacja zmiennej z cigiem znakw

echo $MOJA_ZMIENNAowy
Rysunek 2.23. Bdna konkatenacja zmiennej z cigiem znakw

2.6.4. Usuwanie zmiennych rodowiskowych Istniej dwie moliwoci usunicia zmiennych rodowiskowych. Pierwsz z nich jest nie tyle trwae usunicie, co jej wyczyszczenie. W tym celu naley wyeksportowa zmienna z wartoci rwn pustemu stringowi - rysunek 2.24. export NAZWA_ZMIENNEJ=""
Rysunek 2.24. Wyczyszczenie zmiennej rodowiskowej

W celu trwaego usunicia zmiennej naley skorzysta z komendy unset (dla powoki tcsh komenda unsetenv ) i jako parametr poda nazw zmiennej - rysunek 2.25. unset NAZWA_ZMIENNEJ
Rysunek 2.25. Usunicie zmiennej rodowiskowej

2.6.5. Zmiana wygldu znaku zachty Jako przykad wykorzystania zmiennych rodowiskowych zajmiemy si zmienn PS1, ktra suy do zdeniowania wygldu znaku zachty. W tym celu naley nada now warto zmiennej PS1. Oczywicie musimy mie zestaw znakw specjalnych, dziki ktrym wywietlimy w znaku zachty informacje, takie jak nazwa uytkownika, host, cieka aktualnego pliku, itp. Przykadowe znaki specjalne, z ktrych moemy korzysta to: \w - biecy katalog; \a - dzwonek systemowy; \t - czas w formacie gg:mm:ss;

2.7. Instalowanie pakietw \d - data w formacie dzie tygodnia - miesic - dzie miesica; \s - nazwa powoki; \u - nazwa uytkownika; \h - nazwa hosta do pierwszej kropki; \XXX - szesnastkowa liczba XXX. Dla przykadu sprawdmy, jak bdzie wyglda znak zachty po zmianie wartoci zmiennej PS1 na podan na rysunku 2.26. PS1=\d \t \u@\h Tak, janie Panie?
Rysunek 2.26. Zmiana znaku zachty

21

Znak zachty powinien wyglda tak jak na rysunku 2.27. eby powrci do poprzedniego stanu naley ustawi warto PS1 tak, jak na rysunku 2.28. pi pa 07 13:00:43 user@host Tak, janie Panie?
Rysunek 2.27. Zmieniony znak zachty

PS1=\u@\h:\w
Rysunek 2.28. Powrt do domylnego wygldu znaku zachty

2.7. Instalowanie pakietw


Kady uytkownik podczas pracy z systemem Linux prdzej czy pniej bdzie musia zainstalowa jakie narzdzie, pakiet, itp. Przypomnijmy, e skrypt by napisany w oparciu o dystrybucj Debian. Ma to znaczenie w przypadku wykorzystywanych narzdzi do instalowania i zarzdzania pakietami oraz samego pakietu. Wicej na ten temat opowiemy w trakcie omawiania tych elementw. W przypadku rodowiska gracznego sprawa jest prosta, gdy istniej nakadki graczne (np. Synaptic), ktre w duej mierze uatwiaj zarzdzanie pakietami. Dlatego zajmiemy si zarzdzaniem pakietami z poziomu konsoli. 2.7.1. Przejcie na konto roota Zwyky uytkownik nie ma uprawnie do instalowania lub odinstalowywania pakietw. eby mc to robi, trzeba uzyska prawa administratora, czyli uytkownika root. Mona to zrobi w dwojaki sposb. Pierwszy sposb to komenda su. Jest to polecenie, ktre bez wylogowywania aktualnego uytkownika zaloguje go na konto administratora. Komenda w celu potwierdzenia tosamoci prosi o podanie hasa uytkownika root.

22

2. Podstawy systemu Linux Po zalogowaniu si na konto administratora pracujemy w odrbnej powoce, wic eby wrci do powoki uytkownika, na ktrego bylimy zalogowani, musimy skorzysta z polecenia exit. W niektrych dystrybucjach z rodziny Debiana polecenia su nie ma. Innym sposobem jest skorzystanie z komendy sudo. Jest to komenda, ktra pozwala na wykonanie innych polece z prawami uytkownika root, ale bez koniecznoci logowania si na jego konto. Aby uytkownik mg korzysta z tego polecenia, musi by dodany do listy sudoers, ktra znajduje si w pliku /etc/sudoers. W celu skorzystania z tej komendy naley poprzedzi wywoanie innej komendy tym poleceniem. Przykadem moe by prba wywietlenia treci pliku /etc/sudoers. eby to zrobi, trzeba mie prawa roota. Przykad ten zosta przedstawiony na rysunku 2.29. user@host:~$ cat /etc/sudoers cat: /etc/sudoers: Brak dostpu user@host:~$ sudo cat /etc/sudoers [sudo] password for user: # /etc/sudoers ...
Rysunek 2.29. Wykorzystanie polecenia sudo

Polecenie sudo wymaga podania hasa. Jest to haso aktualnie zalogowanego uytkownika, a nie roota. Dodatkowo, uytkownik jest o nie pytany raz w danej powoce, take jeli drugi raz bdziemy chcieli wywietli zawarto pliku /etc/sudoers/, to system ju nie bdzie pyta o haso. Jeli nie masz hasa do konta root, a Twj login nie znajduje si w pliku /etc/sudoers, to musisz poprosi kogo, kto ma prawa roota, eby Twj login do tego pliku dopisa.

2.7.2. Pakiety Pakiet to skompilowane rdo (kod), dziki czemu jego instalacja jest prosta i szybka. Istnieje rwnie moliwo kompilowania rde programw bezporednio na swoim komputerze, lecz trwa to duej i czsto pojawiaj si bdy zwizane np. z brakiem lub niezgodnoci bibliotek. Dlatego te dla uytkownikw, dla ktrych domylna konguracja programw skompilowana w pakietach jest wystarczajca, pakiety s idealnym rozwizaniem. W zalenoci od dystrybucji rozrnia si kilka rodzajw pakietw: RPM - wystpujce w rodzinie dystrybucji Red Hat; DEB - wystpujce w Debianie (np. popularne Ubuntu jest oparte na Debianie); TGZ - spakowane archiwum TAR, ktre jest wykorzystywane np. przez Slackware.

2.7. Instalowanie pakietw 2.7.3. Niskopoziomowy dpkg dpkg to niskopoziomowy menader pakietw, ktry jest obecny w naszej dystrybucji, czyli Debianie. Dziki niemu moemy instalowa pobrane pakiety. Odpowiednikiem dpkg dla pakietw RPM jest program rpm obecny w dystrybucjach z rodziny Red Hat. eby zainstalowa pakiet naley uy agi -i - rysunek 2.30. dpkg -i pakiet.deb
Rysunek 2.30. Instalowanie pakietu DEB

23

W celu usunicia pakietu naley uy agi -r - rysunek 2.31. dpkg -r pakiet.deb


Rysunek 2.31. Usunicie pakietu DEB

2.7.4. APT W celu zainstalowania pakietu, w pprzypadku korzystania z dpkg, musimy najpierw znalec ten pakiet. Jest to dosy uciliwe, wic eby temu zaradzi, stworzono APT. APT suy do automatycznego zarzdzania pakietami. Jego wielk zalet jest to, e potra sam odnale interesujcy nas pakiet, zainstalowa go oraz pobra i zainstalowa zalenoci wymagane przez ten pakiet. eby korzysta z APT, naley uy polecenia apt-get. Na pocztek przyjrzyjmy si plikowi /etc/apt/sources.list. Fragment jego przykadowej treci zaprezentowano na rysunku 2.32.
... deb http://security.debian.org/ lenny/updates main deb-src http://security.debian.org/ lenny/updates main deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main ... Rysunek 2.32. Fragment pliku /etc/sources.list

Plik ten zawiera cieki do repozytoriw z pakietami. Repozytorium to centralny magazyn pakietw, w ktrym dostp do wszystkich pakietw jest rwnie atwy. W repozytorium przechowuje si biece dane, dokumenty, bez archiwum oraz kopii. Istnieje wiele repozytoriw, ktre:

24

2. Podstawy systemu Linux mog by ocjalne lub nie; mog zawiera wersje stabilne lub beta; mog by tworzone przez rne rmy, w celu przechowywania ich produktw (np. Mozilla); itp. Uytkownik moe edytowa list repozytoriw wedle uznania, aczkolwiek trzeba to robi ostronie. S bowiem repozytoria, ktre przechowuj najnowsze (czsto codziennie aktualizowane) wersje beta programw, ktre jeszcze nie s sprawdzone pod wzgldem niezawodnoci lub bezpieczestwa. Niektrzy wiadomie instaluj najnowsze wersje beta, aby sprawdzi najnowsze wodotryski w narzdziach. Kiedy ju skoczylimy edytowa plik ze rdami repozytoriw, naley je odwiey, eby system pobra list pakietw w nich udostpnionych. W tym celu korzystamy z akcji update, tak jak na rysunku 2.33. Po podaniu hasa, APT cignie najnowsze dane o pakietach, a po zakoczeniu wywietli informacj: Czytanie list pakietw... Gotowe. sudo apt-get update
Rysunek 2.33. Pobranie informacji o najnowszych pakietach

Instalacja Po zaktualizowaniu listy pakietw moemy ju je instalowa. W tym celu naley skorzysta z akcji install oraz poda nazw pakietu. Wczeniej wspomniaem o wygodnym narzdziu yakuake, ktre w bardzo prosty sposb zastpuje nam wiele okien terminala w rodowisku gracznym (wicej na temat tego programu na stronie http://yakuake.kde.org/ ). Na rysunku 2.34 przedstawiono proces instalacji pakietu yakuake. Po wpisaniu komendy sudo apt-get install yakuake system przedstawi nam list pakietw, wymaganych do poprawnego dziaania narzdzia, ktre chcemy zainstalowa (na rysunku lista zostaa skrcona) oraz poinformuje o iloci instalowanych (lub aktualizowanych) pakietw, o rozmiarze danych do pobrania oraz rozmiarze wymaganego miejsca na dysku. Na kocu jestemy proszeni o potwierdzenie tych zmian, po czym nastpuje waciwa instalacja. Wyszukiwanie Oczywicie czsto bywa tak, e pakiet o podanej przez nas nazwie nie istnieje, a nie pamitamy dokadnie jego nazwy. Wtedy z pomoc przychodzi inny program z rodziny apt - apt-cache. eby wyszuka pakiety w uywanych przez nas repozytoriach, naley skorzysta z opcji search. Przykad jest przedstawiony na rysunku 2.35. Aktualizacja pakietw Wikszo programw jest rozwijana i publikowane s ich nowsze wersje. APT sam zatroszczy si o znalezienie nowszych wersji programw w repozytorium i ich zaktualizowanie. My musimy jedynie skorzysta z opcji upgrade programu apt-get. Odinstalowywanie pakietw Na koniec warto jeszcze pozna sposb na odinstalowanie pakietu.

2.7. Instalowanie pakietw user@host:~$ sudo apt-get install yakuake Czytanie list pakietw... Gotowe Budowanie drzewa zalenoci Odczyt informacji o stanie... Gotowe Zostan zainstalowane nastpujce dodatkowe pakiety: aspell aspell-en dbus dbus-x11 esound-clients esound-common fam fontconfig hicolor-icon-theme kdelibs-data kdelibs4c2a konsole libakode2 libart-2.0-2 libarts1-akode libarts1c2a libartsc0 libasound2 libaspell15 libaudio2 libaudiofile0 ... Sugerowane pakiety: aspell-doc spellutils perl-suid ghostscript khelpcenter libasound2-plugins nas esound jackd libjasper-runtime liblcms-utils libqt3-mt-psql libqt3-mt-mysql libqt3-mt-odbc libraw1394-doc speex gksu kdebase-bin kdebase-runtime ktsuss sux Zostan zainstalowane nastpujce NOWE pakiety: aspell aspell-en dbus dbus-x11 esound-clients esound-common fam fontconfig hicolor-icon-theme kdelibs-data kdelibs4c2a konsole libakode2 libart-2.0-2 libarts1-akode libarts1c2a libartsc0 libasound2 libaspell15 libaudio2 ... yakuake 0 aktualizowanych, 74 nowo instalowanych, 0 usuwanych i 65 nieaktualizowanych. Konieczne pobranie 32,9MB archiww. Po tej operacji zostanie dodatkowo uyte 100MB miejsca na dysku. Kontynuowa [T/n]?
Rysunek 2.34. Instalacja pakietu yakuake

25

user@host:~$ apt-cache search yaku libnet-dns-fingerprint-perl - library to determine DNS server vendor, product and version yakuake - a Quake-style terminal emulator based on KDE Konsole technology
Rysunek 2.35. Wyszykiwanie pakietw

Do tego suy opcja remove programu apt-get. Wczeniej jednak warto sprawdzi, jakie pakiety s zainstalowane w systemie. W tej sytuacji naley skorzysta z wczeniej omwionego dpkg i agi -l. Przykad zosta przedstawiony na rysunku 2.37. Przeszukujemy w nim list zainstalowanych pakietw i wybieramy te, ktrych wiersze zawieraj cig znakw tar. Nastpnie usuwamy wybrany pakiet. Program grep suy do przeszukiwania tekstu. Poznamy go lepiej w kolejnych rozdziaach.

26

2. Podstawy systemu Linux user@host:~$ sudo apt-get upgrade [sudo] password for user: Czytanie list pakietw... Gotowe Budowanie drzewa zalenoci Odczyt informacji o stanie... Gotowe Nastpujce pakiety zostay zatrzymane: bind9-host dnsutils libbind9-50 libisccc50 libisccfg50 liblwres50 Nastpujce pakiety zostan zaktualizowane: apache2-mpm-prefork apache2-utils apache2.2-common aptitude base-files dhcp3-client dhcp3-common dpkg exim4 exim4-base exim4-config exim4-daemon-light klibc-utils libapache2-mod-php5 libapr1 libc6 libc6-dev libc6-i686 libcups2 libcurl3 libfreetype6 libldap-2.4-2 libmysqlclient15off ... mysql-server-5.0 59 aktualizowanych, 0 nowo instalowanych, 0 usuwanych i 6 nieaktualizowanych. Konieczne pobranie 124MB archiww. Po tej operacji zostanie dodatkowo uyte 1294kB miejsca na dysku. Kontynuowa [T/n]?
Rysunek 2.36. Aktualizacja pakietw

user@localhost:~$ dpkg -l | grep tar ii tar 1.20-1+lenny1 GNU version of the tar archiving utility user@CSS:~$ sudo apt-get remove tar [sudo] password for user: Czytanie list pakietw... Gotowe Budowanie drzewa zalenoci Odczyt informacji o stanie... Gotowe Nastpujce pakiety zostan USUNITE: tar UWAGA: Zostan usunite nastpujce istotne pakiety. Nie powinno si tego robi, chyba e dokadnie wiesz co robisz! tar 0 aktualizowanych, 0 nowo instalowanych, 1 usuwanych i 65 nieaktualizowanych. Po tej operacji zostanie zwolnione 2302kB miejsca na dysku. Zaraz zrobisz co potencjalnie szkodliwego. Aby kontynuowa wpisz zdanie "Tak, rb jak mwi!"

Rysunek 2.37. Usuwanie pakietw

2.8. Strumienie

27

2.8. Strumienie
Strumienie to kanay komunikacji midzy uruchomionymi programami a otoczeniem, np. klawiatur, czy ekranem. W systemie Linux istniej 3 standardowe strumienie danych: standardowy strumie wejcia (stdin); standardowy strumie wyjcia (stdout); standardowy strumie bdw (stderr). Kady strumie ma swj liczbowy identykator zwany deskryptorem: stdin - deskryptor 0; stdout - deskryptor 1; stderr - deskryptor 2. Kady uruchomiony proces ma zdeniowane wszystkie 3 strumienie. Domylnie strumieniem wejcia jest klawiatura, za wyjcia i bdw - ekran. Gwna wasno strumieni to moliwo ich przekierowywania. Dziki temu, dane mog by wczytywane z rnych rde oraz wysyane do rnych urzdze, plikw, itp. 2.8.1. Strumienie i komenda cat Zastosowanie strumieni omwimy na przykadzie wczeniej wspomnianej komendy cat. Jeli uruchomimy t komend bez parametru, to system czeka a wpiszemy dane, gdy strumieniem wejcia jest klawiatura, a nastpnie wywietli to co wpisalimy na standardowe wyjcie, czyli powieli tekst na ekranie. user@user-desktop:~$ cat wpisany tekst wpisany tekst
Rysunek 2.38. Komenda cat bez parametru

2.8.1.1. Strumie wejcia eby komenda czytaa dane z pliku, trzeba go przekaza jako parametr. Innym sposobem jest przekierowanie strumienia wejcia. Strumie wejcia przekierowujemy za pomoc operatora <. Jak wida na rysunku 2.39, komenda cat zachowuje si tak samo po ustawieniu pliku jako strumie wejcia, jak po przekazaniu pliku jako parametr. 2.8.1.2. Strumie wyjcia Strumie wyjcia mona przekierowa na dwa sposoby. Pierwszy sposb polega na wyczyszczeniu pliku, do ktrego strumie jest przekierowany, a nastpnie zapisanie wyniku. W tym celu wykorzystuje si operator >. Przykad przedstawiono na rysunku 2.40. Na pocztku plik wynikowy zawiera

28 user@user-desktop:~$ cat plik.txt To jest przykladowy plik ktry ma wiele linii i bedzie wyswietlany na ekranie user@user-desktop:~$ cat < plik.txt To jest przykladowy plik ktry ma wiele linii i bedzie wyswietlany na ekranie user@user-desktop:~$

2. Podstawy systemu Linux

Rysunek 2.39. Przekierowanie strumienia wejcia

user@user-desktop:~$ cat wynik.txt Dane poczatkowe w pliku user@user-desktop:~$ cat plik.txt > wynik.txt user@user-desktop:~$ cat wynik.txt To jest przykladowy plik ktry ma wiele linii i bedzie wyswietlany na ekranie user@user-desktop:~$
Rysunek 2.40. Przekierowanie strumienia wejcia - nadpisanie pliku

dane, ktre s wywietlone. Po wykonaniu komendy wynik zosta przekierowany do pliku, ktry uprzednio zosta wyczyszczony. Drugi sposb polega na dopisaniu danych do pliku za pomoc operatora >>. Przykad przedstawiono na rysunku 2.41.

user@user-desktop:~$ cat wynik.txt Dane poczatkowe w pliku user@user-desktop:~$ cat plik.txt >> wynik.txt user@user-desktop:~$ cat wynik.txt Dane poczatkowe w pliku To jest przykladowy plik ktry ma wiele linii i bedzie wyswietlany na ekranie user@user-desktop:~$
Rysunek 2.41. Przekierowanie strumienia wyjcia - dopisanie do pliku

2.9. Potoki 2.8.1.3. Strumie bdu Strumie bdy suy do zwracania informacji o bdach. Poniewa dane wynikowe oraz bdy maj cakiem inny charakter, stworzono dla nich 2 niezalene strumienie mimo, e domylnie s one zdeniowane tak samo - ekran. Do przekierowywania strumienia bdu wykorzystuje si operator 2 >. Cyfra 2 jest deskryptorem strumienia, dlatego te wczeniej omwiony operator > jest rwnowany operatorowi 1 >. Po co przekierowywa strumie bdw? Jak wiadomo oba strumienie wejcia i bdu przekierowywane s domylnie na ekran. Ponadto czsto na wyjcie bdu wysyane s ostrzeenia, ktre nie blokuj wykonania programu, ale zamiecaj ekran. Chcc si ich pozby, przekierowujemy standardowe wyjcie bdu, eby na ekranie zosta tylko wynik. Oczywicie, mona rwnie przekierowa strumie wyjcia do pliku, jeli chcemy zachowa wynik. Wtedy na ekranie pojawi si tylko bdy. Nasuwa si kolejne pytanie: Gdzie przekierowywa nieinteresujce nas treci bdw? Mona przekierowa je do jakiego tymczasowego pliku, a pniej go usun. Jest jednak wygodniejsze wyjcie. Tak jak wczeniej wspomniano, strumienie mona przekierowywa na urzdzenia. W systemie Linux istnieje urzdzenie /dev/null zwane czarn dziur. Wszelkie dane przekierowane na to urzdzenie zostan zignorowane i utracone. 2.8.1.4. Przykady wykorzystania Wykorzystujc komendy cat, echo oraz strumienie, mona wykona kilka przydatnych operacji. 1. Stworzy lub wyczyci plik Komenda nadpisuje plik pustym acuchem znakw. user@user-desktop:~$ echo "" > plik.txt 2. Skopiowa plik Komenda rwnowana z cp plik1.txt plik2.txt. user@user-desktop:~$ cat plik1.txt > plik2.txt 3. Scali pliku Komenda tworzy nowy plik i zapisuje w nim tre trzech plikw z parametrw. user@user-desktop:~$ cat plik1.txt plik2.txt plik3.txt > plik_scalony.txt

29

2.9. Potoki
Potoki podobnie jak strumienie su do komunikacji, jednake w przeciwiestwie do nich, stronami komunikujcymi si s procesy. Idea potoku polega na tym, e wynik jednej operacji staje si danymi wejciowymi nastpnej. W linuksowych powokach systemowych uywa si symbolu | (pionowej linii), aby poczy dwa lub wicej procesw w potok. Potok moe mie dowoln du-

30

2. Podstawy systemu Linux go, tzn. e mona dane mona przepuci przez wiele operacji czc je w potok. Przykad uycia zosta zaprezentowany na rysunku 2.42. ps -a | sort | uniq | grep -v sh
Rysunek 2.42. Przykad zastosowania potokw

Wykorzystano tutaj komend ps -a, ktra wywietla list uruchomionych procesw, ktra nastpnie zostaa posortowana. Pniej komenda uniq usuna powtarzajce si linie, a grep wyszuka linie, ktre nie zawieraj w sobie acucha znakw sh. Flaga -v w komendzie grep powoduje, e linie, ktre speniaj wyraenie, s odrzucane. 2.9.1. Potoki i wywietlenie dowolnego fragmentu pliku Wykorzystujc potoki oraz komendy head i tail, atwo mona stworzy komend, ktra wywietli dowolne linie z pliku. Przykadowo, jeli chcemy wywietli linie o numerach 101-105, najpierw naley wywietli pierwsze 105 linii, a nastpnie 5 ostatnich z wczeniej wybranych. head -105 plik.txt | tail -5
Rysunek 2.43. Wywietlenie linii o numerach 101-105 z pliku plik.txt

Rozdzia 3
Przetwarzanie tekstu

32

3. Przetwarzanie tekstu Przetwarzanie tekstu to jedna z najczciej wykonywanych czynnoci zarwno przed administratorw systemu, jak i przez zwykych uytkownikw. Jako zwyky uytkownik systemu jestemy przyzwyczajeni do edytorw gracznych, w ktre wyposaone s rodowiska graczne systemu (czyli konsola nr 7). W rodowisku gracznym proste przetwarzanie tekstu jest bardzo wygodne. Dziki myszce, ktr w szybki sposb moemy zaznacza tekst oraz podstawowym skrtom klawiszowym typu CTRL + C, CTRL + V czy CTRL + X edycja tekstu jest prosta i bardzo szybka. S jednak przypadki, gdy przetwarzanie tekstu w edytorach gracznych jest utrudnione lub niemoliwe. Dzieje si tak na przykad w przypadku wikszych iloci danych (np. plikw o duych rozmiarach). Praca z tekstem w edytorze gracznym moe by niemoliwa, gdy zwyczajnie nie bdzie on mia wystarczajcych zasobw do przetwarzania caego pliku jednoczenie. Innym przykadem jest skomplikowane przetwarzanie tekstu. Uciliwe jest przetwarzanie wyeksportowanego z bazy danych pliku CSV (ang. Comma Separated Values) w zwykym edytorze tekstu. Ponadto jeli przetwarzanie jest skomplikowanie, to i w arkuszach kalkulacyjnych jest to mudna i uciliwa praca. Wtedy z pomoc przychodz edytory strumieni tekstu (SED), czy nawet jzyki programowania suce do przetwarzania tekstu. Ich zadanie polega na uatwieniu przetwarzania tekstu. Duego znaczenia dla uytkownika nabieraj wtedy, gdy wykorzystane zostan do wytworzenia skryptu, ktry bdzie przeprowadza skomplikowane operacje na strumieniu danych. Warto przeznaczy czas na napisanie skryptu, ktry wykonuje nawet proste operacje. Wielu uytkownikw wychodzi z zaoenia, e nie ma sensu uczy si edytorw strumieni danych oraz marnowa czasu na pisanie skryptu, gdy operacje, ktre chc wykona s proste. Dopiero pniej, kiedy okazuje si, e te proste operacje s wykonywane czsto, napisanie skryptu zaoszczdzioby czas uytkownikowi za kadym razem, kiedy skrypt jest wykorzystywany. W niniejszym rozdziale omwione zostan podstawy przetwarzania tekstu oraz wyej wymienione narzdzia wspomagajce zarwno proste jak i zaawansowane przetwarzanie tekstu. Poznamy rwnie podstawowe operacje na plikach tekstowych, a take polecenia, ktre su do wyszukiwania plikw.

3.1. Podstawowe operacje na plikach tekstowych


Na pocztku musimy pozna podstawowe metody przetwarzania tekstu, tj. przegldanie treci plikw lub jej fragmentw, czy na przykad przeszukiwanie plikw. Wspomnimy rwnie o strumieniach ktre mog by traktowane jako rdo danych (zamiast pliku) oraz potokach, ktre bd przekazyway wyniki jednej komendy do drugiej komendy. 3.1.1. Przegldanie pliku Najprostszym sposobem na podejrzenie pliku jest uycie komendy cat. Przyjmuje ona jako parametr jeden lub wicej plikw (a dokadnie cieek do nich)

3.1. Podstawowe operacje na plikach tekstowych oddzielonych spacjami. Wynikiem metody jest wywietlenie treci tych plikw na standardowym wyjciu, czyli na ekranie konsoli.

33

cat plik1.txt plik2.txt


Rysunek 3.1. Wywietlenie treci dwch plikw

W przypadku wywietlania kodw rdowych przydatna jest aga -n, ktra numeruje linie. Komenda cat w poczeniu z przekierowywaniem strumieni uzyskuje nowe moliwoci, o ktrych bliej za chwil, podczas omawiania strumieni.

3.1.2. Przegldanie fragmentw pliku Komenda cat staje si bezuyteczna w przypadku przegldania duych plikw, czy innych iloci danych np. wynikw wywoania komend. Prostym przykadem jest przejrzenie listy zainstalowanych pakietw w systemie - dpkg -l. Lista ta jest bardzo duga i zwykle nie mieci si w oknie konsoli, nawet uwzgldniajc jej przewijanie w gr. W takich przypadkach pomocne staj si komendy, ktre umoliwiaj przegldanie fragmentw duych iloci danych. Nale do nich: head oraz tail, ktre wywietlaj fragment pliku, more oraz less, ktre umoliwiaj przegldanie caego pliku fragmentami. Rnica midzy komend head a tail polega na tym, e head wywietla dowoln (domylnie 10) ilo linii z pocztku pliku, podczas gdy tail wywietla linie z koca pliku. Jeli chcemy wywietli inn ilo linii ni domylna, to musimy jako opcj przekaza liczb, np. head -100 plik.txt. Na rysunku 3.2 wykorzystano potoki, ktre omwimy za chwil. Mwilimy wczeniej o wywietleniu fragmentu pliku. Oczywicie fragment pliku moe pochodzi z dowolnej jego czci; niekoniecznie z pocztku lub koca. Jak zatem wywietli fragment ze rodka pliku? Oczywicie czc obie komendy head i tail. O tym jak to zrobi powiemy przy okazji omawiania potokw. Druga para komend to more i less. W przeciwiestwie do poprzedniej pary komend, nie wywietlaj one jednego fragmentu danych, lecz umoliwiaj ich przejrzenie fragmentarycznie. Mona to porwna do przewracania stron w ksice. Komenda more umoliwia jedynie przewijanie tekstu w d bez moliwoci powrotu. Natomiast komenda less jest jej ulepszon wersj, gdy umoliwia przewijanie tekstu w gor i w d oraz na prawo i lewo, jeli tekst zawiera dugie linie. Podczas przegldania danych za pomoc obu powyszych komend, wcinicie spacji spowoduje przejcie w d o jedn stron, tzn. e na samej grze bdzie linia, ktra wczeniej bya na samym dole. Ponadto, eby zakoczy przegldanie, naley wcisn klawisz q (ang. quit).

34

3. Przetwarzanie tekstu user@user-desktop:~$ dpkg -l | head Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf... |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version +++-======================================ii accountsservice 0.6.14-1git1 ii acl 2.2.51-3 ii acpi-support 0.138 ii acpid 1:2.0.10-1ubuntu2 ii adduser 3.112+nmu1ubuntu5 user@user-desktop:~$ dpkg -l | tail ii yelp-xsl 3.2.0-0ubuntu1 ii zeitgeist 0.8.2-1 ii zeitgeist-core 0.8.2-1 ii zeitgeist-datahub 0.7.0-0ubuntu4 ii zeitgeist-extension-fts 0.0.13-0ubuntu1 ii zenity 3.2.0-0ubuntu1 ii zenity-common 3.2.0-0ubuntu1 ii zip 3.0-4 ii zlib1g 1:1.2.3.4.dfsg-3ubuntu3 ii zlib1g-dev 1:1.2.3.4.dfsg-3ubuntu3 user@user-desktop:~$
Rysunek 3.2. Wywietlenie dziesiciu pierwszych oraz dziesiciu ostatnich linii z listy zainstalowanych pakietw

3.2. Wyszukiwanie plikw


Konguracja systemu Linux czsto wymaga odnalezienia plikw konguracyjnych, ktre zamierzamy edytowa, gdy nie dla wszystkich pakietw istniej komendy uatwiajce ich konguracj. Wiele plikw ma swoje stae miejsce w systemie (np. plik z list uytkownikw /etc/passwd ), aczkolwiek s rwnie pliki konguracyjne, ktre mog znajdowa si w kilku miejscach w strukturze katalogw. Jest to uzalenione od pakietw, ktrych dotycz, jak rwnie od dystrybucji systemu. Na przykad interpreter PHP, ktry zwykle instaluje si razem z serwerem WWW, moe przechowywa swoje pliki konguracyjne w folderach /etc/php5/..., /usr/local/php5/..., itd. 3.2.1. Shell pattern (tzw. maska) Polecenia do wyszukiwania plikw, ktre zostan omwione w tym rozdziale, przyjmuj jako argument wzorce (tzw. maski), na podstawie ktrych odnajduj pliki, np. o podanej nazwie.

3.2. Wyszukiwanie plikw ? [abcd] Dopasowuje dowolny znak, ktry moe wystpi dokadnie jeden raz. Dopasowuje dowolne znaki, ktre mog wystpi dowoln ilo razy (rwnie zero). Dopasowuje jeden znak z podanego zbioru. Znak n a pocztku neguje zbir, czyli dopasowuje wszystkie znaki, za wyjtkiem podanych. Usuwa specjaln funkcj metaznaku, przed ktrym stoi.
Tablica 3.1. Tabela wieloznacznikw

35

Maski te mog by wzbogacone o pewne metaznaki (tzw. wieloznaczniki), ktre jednak rni si od tych, przedstawionych podczas omawiania wzorcw regularnych. Maski s prostsze ni wyraenia regularne, a do ich konstrukcji wykorzystuje si jedynie 4 wieloznaczniki, wymienione w tabeli 3.1. 3.2.2. Proste wyszukiwanie plikw W systemie Linux istniej komendy, ktre przeszukuj zachowan wczeniej struktur katalogw i plikw. Plusem tego rozwizania jest szybko przeszukiwania takiej bazy. Minusem jest potrzeba aktualizowania takiej bazy po wikszych zmianach w strukturze plikw. W przypadku plikw konguracyjnych naley aktualizowa baz po zainstalowaniu nowych pakietw, eby pliki z nimi powizane zostay one dodane do bazy. 3.2.2.1. locate Najprostszym sposobem wyszukiwania plikw jest skorzystanie z polecenia locate lub jego nowszej wersji mlocate. locate nazwa-pliku
Rysunek 3.3. Skadnia komendy locate

Polecenie przyjmuj mask nazwy szukanego pliku i wywietla list odnalezionych plikw wraz z ich bezwzgldnymi ciekami. Jeli polecenie nie odnalazo ani jednego pliki, a wydaje Ci si, e plik o tej nazwie istnieje w systemie, sprbuj zaktualizowa baz i wywoa polecenie jeszcze raz. W celu zaktualizowania bazy plikw, z ktrej korzystaj polecenia locate i mlocate, naley skorzysta z polecenia updatedb, ktre naley uruchomi z prawami administratora. Jeli podczas prby aktualizacji napotkasz bd o treci updatedb: can not open a temporary le for /var/lib/mlocate/mlocate.db, to znaczy, e prbujesz zaktualizowa baz nie posiadajc uprawnie administratora.

36

3. Przetwarzanie tekstu user@host:~# locate php.ini /etc/php5/apache2/php.ini /etc/php5/cli/php.ini /usr/share/doc/php5-common/examples/php.ini-development /usr/share/php5/php.ini-production /usr/share/php5/php.ini-production-dist /usr/share/php5/php.ini-production.cli
Rysunek 3.4. Wynik komendy locate dla pliku php.ini

Do wyszukiwania plikw binarnych, rdowych oraz plikw z manuala mona uy rwnie polecenia whereis, ktrego skadnia jest taka sama, jak polecenia locate. 3.2.3. Zaawansowane wyszukiwanie plikw - nd W poprzednim podrozdziale omwilimy polecenia, ktre w prosty i szybki sposb znajduj pliki o podanej nazwie. Jeli chcemy wyszuka pliki uwzgldniajc inne kryteria, z pomoc przychodzi polecenie nd. Jest to zaawansowana wyszukiwarka plikw, w ktrej moemy uwzgldni wiele rnych kryteriw wyszukiwania, ktre dodatkowo mona czy w logiczne warunki. Omwimy podstawowe kryteria wyszukiwania plikw za pomoc polecenia nd. Dokadny opis polecenia oraz jego opcji znajduje si w manualu, ktry mona podejrze za pomoc komendy man nd. find [scieka] [wyraenie wyszukiwania]
Rysunek 3.5. Skadnia komendy nd

Skadnia polecenia zostaa przedstawiona na 3.5. Pierwszy argument - cieka - okrela folder, ktry chcemy przeszuka. Wyszukiwanie odbywa si w wybranym folderze oraz w jego podfolderach rekursywnie. cieka jest argumentem opcjonalnym i jeli nie zostanie podana, to program przeszukuje folder, w ktrym jest uruchomiony (wynik polecenia pwd). Drugim argumentem jest wyraenie wyszukiwania, skadajce si z kryteriw wyszukiwania, ktre mog by poczone logicznymi operatorami, a take z akcji, jakie naley podj po znalezieniu plikw (np. -print). List gwnych kryteriw przedstawiono w tabeli 3.2. Wiele z nich przyjmuje wartoci liczbowe, np. rozmiar pliku. W przypadku tych kryteriw mona okreli, czy wyszukiwany plik ma mie warto mniejsz, wiksz lub rwn podanej. W tym celu naley skorzysta z nastpujcej skadni: +n (np. -size +100), gdy szukamy plikw o wartoci wikszej ni podana, -n (np. -size -100), gdy szukamy plikw o wartoci mniejszej ni podana, n (np. -size 100), gdy szukamy plikw o wartoci takiej samej jak podana.

3.2. Wyszukiwanie plikw

37

-name maska -iname maska -path maska -ipath maska -amin n -anewer plik -atime n -cmin n -cnewer plik -ctime n -empty -false -true -gid n -gname name -uid n -uname name -links n -lname maska -ilname maska -mmin n -mtime n -newer plik -perm prawa

-regexp wzorzec

Nazwa pasuje do podanej maski. Dziaa tak jak name, ale w trybie case-insensitive, czyli nie zwraca uwagi na wielko liter. cieka do pliku pasuje do podanej maski. Dziaa tak jak path, ale w trybie case-insensitive. Ostatni dostp do pliku by n minut temu. Ostatni dostp do pliku nastpi po ostatniej modykacji pliku plik. Ostatni dostp do pliku by n*24 godzin temu. Status pliku zosta zmieniony n minut temu. Ostatnia zmiana statusu pliku nastpia po ostatniej modykacji pliku plik. Ostatnia zmiana statusu pliku bya n*24 godzin temu. Plik jest plikiem zwykym lub folderem oraz jest pusty. Zawsze zwraca fasz. Zawsze zwraca prawd. Pliki, ktrych identykator grupy jest rwny n. Pliki, ktrego grupa nazywa si name. Pliki, ktrych identykator uytkownika jest rwny n. Pliki, ktrego uytkownik nazywa si name. Plik ma n linkw. Pliki bdce linkiem symbolicznym do pliku, ktrego nazwa pasuje do maski. Dziaa tak, jak -lname, ale w trybie case-insensitive. Plik by ostatnio zmieniony n minut temu. Plik by ostatnio zmieniony n*24 godzin temu. Ostatnia modykacja pliku nastpia po ostatniej modykacji pliku plik. Pliki, ktre maj prawa dostpu rwne prawa. Prawa mog by zapisane w systemie semkowym (np. 644) lub symbolicznym (np. -u+w). Pliki, ktrych cieka moe by dopasowana do wzorca regularnego.

Tablica 3.2. Tabela gwnych kryteriw wyszukiwania dla polecenia nd

38 -size n[bckw]

3. Przetwarzanie tekstu Pliki, ktre zajmuj n jednostek pamici. Jednostkami mog by 512-bajtowe bloki (domylnie), bajty (c), kilobajty lub dwubajtowe sowa. Pliki, ktre s typu typ. Typem moe by: d - folder, f - zwyky plik, l - link symboliczny, s - gniazdo.

-le typ

Tablica 3.3. Tabela gwnych kryteriw wyszukiwania dla polecenia nd - kontynuacja

( wyraenie ) ! wyraenie -not wyraenie wyraenie1 wyraenie2

wyraenie1 -a wyraenie2 wyraenie1 -and wyraenie2 wyraenie1 -o wyraenie2

wyraenie1 -or wyraenie2 wyraenie1, wyraenie2

Zmiana priorytetu sprawdzenia warunku (wymuszenie pierwszestwa). Negacja wyraenia. Dziaa tak samo jak ! wyraenie. Koniunkcja (warunek AND) dwch wyrae. Jeli pierwsze wyraenie jest faszywe, drugie nie jest sprawdzane. Dziaa tak samo jak wyraenie1 wyraenie2. Dziaa tak samo jak wyraenie1 wyraenie2. Alternatywa (warunek OR) dwch wyrae. Jeli pierwsze wraenie jest prawdziwe, drugie nie jest sprawdzane. Dziaa tak samo jak wyraenie1 -o wyraenie2. Lista wyrae. Wszystkie wyraenia z listy s sprawdzane, przy czym jako wynik przyjmowany jest wynik ostatniego wyraenia.

Tablica 3.4. Tabela wyrae

Kryteria mona czy logicznymi warunkami. Do tego su wyraenia przedstawione w tabeli 3.4. Polecenie nd daje moliwo wykonania pewnych akcji ze znalezionymi plikami. Lista podstawowych akcji zostaa przedstawiona w tabeli 3.6. Ich skadnia jest analogiczna do skadni kryteriw. Ponadto akcje rwnie mog przyjmowa parametry. Przykady Przykad 1. Wyszukaj wszystkie pliki w systemie, ktrych rozmiar mieci si w przedziale 2-3GB i wywietl ich list wraz z danymi prezentowanymi za pomoc polecenia ls. Rozwizanie: find / -size +2GB -and -size -3GB -exec ls -la {} \;

3.2. Wyszukiwanie plikw

39

-exec komenda ;

-ok komenda ;

-ls -s plik -print -fprint plik -print0

-fprint0 plik

Wywouje komend, do ktrej przekazywane s wszystkie nastpujce po niej argumenty, dopki nie wystpi znak ; . W licie argumentw mona uy znakw , ktre zostan zastpione ciekami do znalezionych plikw podczas wykonywania komendy. Czasami, wymienione znaki specjalne trzeba poprzedzi znakiem \ lub zawrze komend w cudzysowach, eby nie zostaa zinterpretowana przez powok jako polecenie wyszego rzdu (rwnowanego z poleceniem nd). Dziaa tak samo, jak -exec, przy czym prosi o potwierdzenie przez uytkownika poprzez standardowe wejcie. Jeli odpowied uytkownika jest rna od y i Y, to komenda nie jest wykonywana. Wywietla list znalezionych plikw na standardowe wyjcie, tak samo jak polecenie ls. Dziaa tak samo jak -ls, przy czym list zapisuje do pliku plik. Wywietla list cieek do znalezionych plikw. Zapisuj list znalezionych plikw do pliku plik. Wywietla list cieek do znalezionych plikw, przy czym kady plik oddziela znakiem NULL, a nie znakiem nowej linii. Dziki temu programy, ktre przyjmuj na wejciu list plikw z polecenia nd bd mogy poprawnie rozdzieli pliki, ktre w nazwie zawieraj znaki nowej linii. Dziaa tak jak -print0, przy czym list zapisuje do pliku plik.

Tablica 3.5. Tabela gwnych akcji wykonywanych na znalezionych plikach

40

3. Przetwarzanie tekstu

-printf format

Wywietla list znalezionych plikw wedug formatu, ktry moe zawiera znaki specjalne poprzedzone \ oraz dyrektywy %. W formacie mona wykorzysta nastpujce przykadowe znaki specjalne: \a - dzwonek systemowy, \b - znak backspace, \c - anuluje dalsze wywietlanie listy wedug tego formatu, \n - znak nowej linii, \t - znak tabulacji, \v - znak tabulacji pionowej, \\ - znak backslash \, \XXX - znak, ktrego semkowa reprezentacja to XXX. Najczciej uywane dyrektywy, to: %% - znak procent %, %d - poziom zagniedenia pliku wzgldem folderu, w ktrym polecenie zostao uruchomione, %f - nazwa pliku, %h - cieka do pliku bez jego nazwy, %k - rozmiar pliku w kilobajtach, %m - prawa dostpu (w systemie semkowym), %p - cieka do pliku, %s - rozmiar pliku w bajtach, %t - data ostatniej modykacji pliku, %u - nazwa uytkownika, ktry jest wacicielem pliku.

Tablica 3.6. Tabela znakw specjalnych oraz dyrektyw akcji printf

3.2. Wyszukiwanie plikw Przedzia uzyskujemy za pomoc koniunkcji and. Przykad 2. Wyszukaj wszystkie pliki w systemie, ktre maj rozszerzenie log i skopiuj je specjalnie utworzonego folderu logs w Twoim folderze domowym. Rozwizanie: find / -type f -iname "*.log" -exec cp {} $HOME/logs/ \; Najpierw sprawdzamy, czy plik jest zwykym plikiem, by nastpnie sprawdzi jego rozszerzenie bez wzgldu na wielko znakw. Jako komendy uywamy funkcji kopiujcej. Musimy podawa cieki bezwzgldne, eby mc skorzysta z tego polecenia w kadym miejscu w systemie. Przykad 3. Przypisz do uytkownika user wszystkie pliki, ktre nie maj przydzielonego uytkownika. Rozwizanie: find . -nouser -exec chown user {} \; Przykad 4. Przypisz wszystkie foldery uytkownika user uytkownikowi pawel. Rozwizanie: find / -type d -user user -exec chown pawel {} \; Przykad 5. Usu pliki systemu kontroli wersji CVS z aktualnego folderu i jego podfolderw. Rozwizanie: find . -type d -name CVS -exec rm -R {} \; System CVS wszystkie swoje dane przechowuje w folderach o nazwie CVS we wszystkich folderach projektu. Std szukamy tylko folderw i o nazwie CVS, gdzie wielko liter ma znaczenie. Skoro s to foldery, to podczas ich usuwania musimy doda ag -R, eby wczy usuwanie rekursywne. Przykad 6. Wywietl list plikw modykowanych po dacie 11 stycznia 2012 roku. Niech bdzie wywietlona w formacie data modykacji - nazwa pliku (bez caej cieki). Rozwizanie: W celu wyszukania plikw modykowanych przed lub po konkretnej dacie mona skorzysta z warunku -newer lub jego negacji. Jako parametr przyjmuje on ciek do pliku. Trik polega na tym, eby stworzy plik z konkretn dat modykacji. Robi si to za pomoc polecenia touch z wykorzystaniem agi -d. touch -d "11 January 2012 00:00:00" znak_czasu find . -newer znak_czasu -printf "%t - %f\n" rm znak_czasu Po wywietleniu znalezionych plikw naley po sobie posprzta, czyli usun plik znak_czasu.

41

42

3. Przetwarzanie tekstu Przykad 7. Usu wszystkie puste pliki z aktualnego folderu i jego podfolderw, zagbiajc si maksymalnie do 3 poziomw niej w strukturze drzewa folderw. Rozwizanie: Innymi sowy chodzi o usunicie pustych plikw z aktualnego folderu oraz z jego pod-, podpod- oraz podpodpodfolderw, ale plikw bardziej zagbionych ju nie bra pod uwag. find . -empty -maxdepth 4 -exec rm {} \; Poziom nr 1 odpowiada aktualnemu folderowi, dlatego maksymalne zagbienie to 4, a nie 3. Zadania Zadanie 1. Odszukaj w swoim katalogu domowym wszystkie pliki zwyke, majce w nazwie cig znakw log, wywietl ich nazwy i zawarto. Wskazwka: uyj printf oraz exec. Zadanie 2. Wywietl nazwy wszystkich plikw (i katalogw) w systemie, ktre s Twoj wasnoci. Zadanie 3. Odszukaj w katalogu /var/log wszystkie pliki, mniejsze ni 7000 bajtw. Zadanie 4. Znajd w swoim katalogu domowym wszystkie pliki, ktre nie byy uywane w cigu ostatnich 7 dni. Zadanie 5. Wywietl opis plikw (nazwa, prawa, atrybuty, itp.) plikw w katalogu /etc, ktre s wiksze ni 10 bajtw i maj wicej ni 1 dowizanie (link). Zadanie 6. Znajd w swoim katalogu domowym (bez podkatalogw) wszystkie pliki zwyke, mniejsze ni 100 bajtw, ktre byy modykowane w cigu ostatnich 7 dni i wywietl 5 pierwszych linii kadego z nich. Zadanie 7. Usu z systemu wszystkie pliki o rozszerzeniu out, ktre nie byy uywane przez ostatni miesi. Niech polecenie pyta uytkownika o potwierdzenie usunicia pliku.

3.3. Wyraenia regularne


Wyraenia regularne to cigi znakw zwane wzorcami, ktre okrelaj zbir pewnych acuchw znakw. S one bardzo powszechnie wykorzystywane w informatyce, przede wszystkim do przeszukiwania tekstu. Dziki wyraeniom regularnym moemy okreli zbir pewnych acuchw, ktre chcemy odnale w tekcie bez koniecznoci wyszukiwania kadego z nich osobno. W celu zobrazowania potgi wyrae regularnych spjrzmy na przykad, w ktrym chcemy zamieni w pewnym pliku wszystkie wystpienia adresw IP (v4) cigiem xxx.xxx.xxx.xxx, czyli po prostu chcemy je ukry. Jak wiadomo adres IP (v4) skada si z czterech liczb poczonych kropkami (np. 192.168.0.1). Kada z tych liczb jest jedno-, dwu- lub trzycyfrowa.

3.3. Wyraenia regularne [1-9][0-9]{0,2}(\.[1-9][0-9]{0,2}){3}


Rysunek 3.6. Wzorzec odszukujcy wszystkie wystpienia adresw IP (v4)

43

Wykorzystujc wyraenia regularne wszystkie adresy IP (v4) moemy odnale za pomoc wzorca przedstawionego na rysunku 3.6. Jeli nie rozumiesz jak wzorzec na rysunku 3.6 odnajduje adresy IP, nie martw si. Wyjanimy to w dalszej czci. W systemie Linux wykorzystywane s dwa rodzaje wyrae regularnych: BRE (ang. Basic Regular Expression) oraz wersja rozszerzona ERE (ang. Extended Regular Expression) [2]. Niektre komendy korzystaj z wersji BRE, np. grep, za inne z wersji ERE, np. egrep. 3.3.1. BRE W wersji podstawowej wikszo znakw oznacza swoje odpowiedniki literalne, czyli np. znak A z oznacza dosownie znak A w tekcie. Dodatkowo istnieje zestaw znakw specjalnych (metaznakw) przedstawionych w tabeli 3.7. Dodatkowo mona korzysta z predeniowanych grup znakw. Zostay one przedstawione w tabeli 3.8. Jeli chcemy skorzysta z konkretnej grupy, musimy j umieci w metaznaku oznaczajcym zbir, czyli jeli chcemy znale cyfr ([:digit:]), to musimy to zapisa w nastpujcy sposb [[:digit:]]. Oczywicie, w tworzonym zbiorze mog wystpi rwnie inne znaki, np. [[:digit:]A-Fa-f ]. Przykady Przykad 1. Podaj wyraenie, ktre bdzie wyszukiwao tagi HTML. Tagi HTML rozpoczynaj si od znaku < i litery oraz kocz na znaku >, za w rodku mog si znajdowa dowolne znaki oprcz >. Rozwizanie: <[a-zA-Z][^>]*> Szukamy acuchw, ktre rozpoczynaj si od < i kocz na >. Za to odpowiedzialne s pierwszy i ostatni znak. Nastpnie drugi znak musi by liter (ma lub du). W rodku za moe by dowolna ilo znakw, ktre nie s znakiem koczcym, czyli s rne od >. Do testowania wyrae regularnych BRE mona wykorzysta komend grep. Suy ona do przeszukiwania pliku i dokadniej zostanie omwiona pniej. W celu sprawdzenie wyraenia regularnego naley uy nastpujcej skadni grep wyraenie nazwa_pliku. W tym celu potrzebujemy jeszcze pliku. Najprociej bdzie cign stron internetow na dysk za pomoc komendy wget - np. wget www.onet.pl. cignie ona na dysk plik o nazwie index.html. Teraz wystarczy uy komendy grep wyraenie index.html. Przykad 2. Podaj wyraenie, ktre znajdzie odnoniki bezwzgldne.

44

3. Przetwarzanie tekstu

[]

[ ]

$ \( \)

\n

\{m, n\}

\<a a\ >

Dopasowuje jeden dowolny znak. Niektre programy lub funkcj korzystajce z wyrae BRE nie dopasowuj znaku nowej linii (\n). Jeli kropka znajduje si w nawiasach kwadratowych, to traci swoj funkcj i dopasowuje tylko kropk, np. [t.k ] dopasowuje jeden ze znakw: t, k lub kropk. Dopasowuje jeden znak ze zbioru znajdujcego si w nawiasach. Zbir jest cigiem znakw, np. [abcd1234., ]. Dla uatwienia dodano znak , ktry okrela przedzia znakw. Na przykad, gdy chcemy odnale jedn ma liter (bez polskich znakw) moemy uy przedziau [a z ]. Dodatkowo, przedziay mona czy, dlatego wzorzec dopasowujcy jedn ma lub du liter albo cyfr bdzie wyglda [a zA Z 0 9]. Jeli chcemy w zbiorze zawrze rwnie mylnik , to musimy go umieci na pocztku lub kocu, tj. [a zA Z 0 9]. To samo tyczy si znakw [ oraz ]. Dziaa analogicznie do poprzednika z t rnic, e odrzuca wszystkie znalezione znaki. Na przykad wzorzec [AZ ] dopasuje wszystkie znaki, ktre nie s du liter. Oznacza pocztek przeszukiwanego tekstu lub linii, jeli tekst skada si z wielu linii. Na przykad wzorzec root dopasuje wszystkie linie rozpoczynajce si od znakw root. Znak oznaczajcy koniec tekstu lub linii. Zapamituje cz wyraenia (zwan rwnie podwyraeniem lub blokiem), ktra znajduje si midzy nawiasami. Zapamitany blok mona nastpnie wykorzysta ponownie (patrz \n). Zawiera to co zostao zapamitane w n-tej czci wyraenia przy pomocy nawiasw opisanych powyej. Warto n jest cyfr od 1 do 9. Niektre narzdzia wykorzystujce BRE umoliwiaj zapamitanie wikszej iloci podwyrae. Dopasowuje element poprzedzajcy 0 lub wicej razy. Na przykad wyraenie ab*c dopasowuje cigi znakw ac, abc, abbc, itd. Oczywicie element poprzedzajcy nie musi by literaem, moe to by na przykad zbir elementw, czyli np. a[bcde]*f. Dopasowuje element poprzedzajcy od m do n razy. Jeli wrcisz do przykadu z adresami IP, to zauwaysz, e tam jest uyty ten metaznak. Na przykad, a\{3, 5\} Dopasowuje tylko aaa, aaaa, oraz aaaaa. Jeli druga zmienna zostanie pominita, to wyraenie bdzie dopasowywao cig, a napotka niepasujcy znak (nie bdzie ograniczenia grnego na ilo wystpie). Dopasuje te sowa, ktre zaczynaj si na liter a. Metaznak \ < reprezentuje pocztek sowa. Dopasuje te sowa, ktre kocz si na liter a. Metaznak \ > reprezentuje koniec sowa.
Tablica 3.7. Tabela metaznakw w wersji BRE

3.3. Wyraenia regularne [: alnum :] [: alpha :] [: digit :] [: lower :] [: upper :] [: blank :] [: cntrl :] [: graph :] [: print :] [: punct :] [: space :] [: xdigit :] znaki alfanumeryczne [a-zA-Z0-9] znaki alfabetyczne [a-zA-Z] cyfry [0-9] mae litery [a-z] due litery[A-Z] spacja oraz tabulator znaki kontrolne znaki drukowalne bez odstpw znaki drukowalne z odstpami znaki drukowalne bez odstpw, liter oraz cyfr wszystkie znaki odstpu cyfry w systemie heksadecymalnym [0-9a-fA-F]
Tablica 3.8. Tabela grup znakw

45

Odnonik bezwzgldny jest adresem URL, ktry zawiera cay schemat, czyli rozpoczyna si od protokou, ktry moe by szyfrowany (https) lub nie (http). Rozwizanie: https\{0,1\}://[^"]* Na pocztku szukamy cigu znakw rozpoczynajcego si od http. Nastpnie moe, ale nie musi wystpi litera s. Pniej szukamy ://, a na kocu moe wystpi dowolny cig znakw za wyjtkiem znaku , ktry koczy odnonik w jzyku HTML. Przykad 3. Stwrz plik z list studentw, gdzie kady wiersz zawiera imi, drugie imi oraz nazwisko oddzielone jedn spacj. Podaj wyraenie, ktre odnajdzie studentw, ktrzy maj takie samo pierwsze oraz drugie imi. Zakadamy, e imiona i nazwiska rozpoczynaj si od duej litery i nie zawieraj polskich znakw. Rozwizanie: \([A-Z][a-z]*\) \1 [A-Z][a-z]* Najpierw szukamy pierwszego imienia, czyli cigu znakw rozpoczynajcego si od duej litery i zawierajcego dowoln ilo maych liter. Znalezione imi zachowujemy w schowku nr 1, ktrego wykorzystujemy po spacji. Na kocu szukamy jeszcze nazwiska wedug tej samej zasady co imi. Komenda grep w wyraeniu [a-z] domylnie uwzgldnia polskie znaki. Zadania Zadanie 1. Podaj wyraenie, ktre znajdzie tytu strony w kodzie HTML. Zadanie 2. Podejrzyj plik /var/log/apache2/error.log . Przykadowy wpis: [Thu Feb 23 00:05:53 2012] [error] [client 127.0.0.1] Tre bdu

46 ()

3. Przetwarzanie tekstu Ten metaznak istnieje w standardzie BRE, jednake w ERE jego funkcja zostaa zmieniona. Ma on na celu zgrupowanie wielu elementw w jeden element. Jest to bardzo przydatne w poczeniu z metaznakiem |. Metaznak wprowadza alternatyw do wyrae regularnych. Dopasowuje jeden z dwch elementw, ktre s po obu stronach znaku. Na przykad wyraenie abc|def dopasowuje cig abc lub cig def . Jeli za chcemy dopasowa cigi abcf lub adef , musimy skorzysta z grupowania omwionego powyej. Wtedy wyraenie bdzie wyglda nastpujco a(bc|de)f . Dopasowuje co najmniej 1 wystpienie elementu wystpujcego po metaznaku. Dziaa tak samo jak {1, } Dopasowuje wyraenie, w ktrym element poprzedzajcy moe wystpi 0 lub 1 raz. Dziaa tak samo jak {0, 1}.
Tablica 3.9. Tabela nowych metaznakw w wersji ERE

+ ?

Podaj wyraenie, ktre znajdzie wpisy z dnia 1 lutego 2012 roku. Pamitaj o tym, e data wpisu jest zawsze na pocztku pliku. Zadanie 3. Podaj wyraenie, ktre znajdzie polski kod pocztowy. 3.3.2. ERE Standard ERE (ang. Extended Regular Expression) by rozwijany ze standardem BRE. Wprowadza on kilka nowych metaznakw oraz zasad tworzenia wyrae. 3.3.3. Zmiany 1. W standardzie ERE znak \ powoduje, e znak wystpujcy po nim traci swoje waciwoci metaznaku, czyli na przykad \$ nie oznacza ju koca wiersza tylko zwyky znak dolara. 2. Metaznaki, ktre w standardzie BRE byy poprzedzone znakiem \ (np. \{ \}) w ERE, s zastpione odpowiednikami bez \ (np. { }). 3. Usunity zosta metaznak \n. 4. Dodano nowe metaznaki wyszczeglnione w tabeli 3.9. Przykady Odpowiednikiem komendy grep dla standardu ERE jest egrep, z ktrego mona korzysta sprawdzajc dziaanie wyrae regularnych. Przykad 1. Przepisz wyraenie BRE odnajdujce odnoniki bezwzgldne, uywajc metaznakw z ERE. Rozwizanie: https?://[^"]* Wyraenie \{0, 1\} mona zastpi metaznakiem ?.

3.4. Przeszukiwanie tekstu Przykad 2. Podaj wyraenie, ktre dopasuje protok FTP lub HTTP szyfrowany lub nieszyfrowany. Rozwizanie: (http|ftp)s?:// Alternatywa dopasowuje odpowiedni protok. Nastpnie za pomoc ? dopasowujemy literk s, ktra odpowiada za szyfrowanie. Przykad 3. Podaj wyraenie, ktre dopasuje liczb rzeczywist. Rozwizanie: -?[1-9][0-9]*(\.[0-9]+)? Liczba rzeczywista moe by dodatnia lub ujemna, std znak zapytania przy minusie na pocztku. Jeli minus nie wystpuje, to zakadamy, e liczba jest dodatnia. Nastpnie musi by co najmniej 1 cyfra, ktra jest rna od zera, gdy liczba nie moe zaczyna si od zera. Nastpnie moe, ale nie musi wystpi cz rzeczywista, ktra jest oddzielona kropk i zawiera co najmniej 1 cyfr. Przykad 4. Podaj wyraenie regularne rozpoznajce komentarz C: /* ... */. Rozwizanie: /\*([^*]|(\*+[^/]))*\*+/ Komentarz rozpoczyna si sekwencj / za koczy co najmniej 1 gwiazdk i znakiem /. W rodku za mog by wszystkie znaki oprcz gwiazdki albo wiele gwiazdek, po ktrych nie wystpuje znak /. Zadania Zadanie 1. Podaj wyraenie regularne rozpoznajce sowa, w ktrych wystpuje parzysta liczba wystpie litery a. Zadanie 2. Podaj wyraenie regularne, ktre rozpoznaje cig znakw skadajcy si z parzystej liczby wystpie znaku a i znaku b. Zadanie 3. Podaj wyraenie, ktre sprawdza poprawno hasa. Haso musi si skada z co najmniej 8 znakw i nie wicej ni 16 znakw oraz musi w nim wystpi co najmniej jedna maa i dua litera oraz cyfra.

47

3.4. Przeszukiwanie tekstu


Przeszukiwanie tekstu jest bardzo czstym zajciem w systemie Linux. Szczeglnie, gdy chcemy si dowiedzie pewnych informacji o aktualnym stanie systemu, np. sprawdzi czy pewien uytkownik jest zalogowany lub czy pewien program jest uruchomiony albo przeszuka pliku konguracyjne, np. sprawdzi jaka jest maksymalna wielko pliku, ktry moe zosta wgrany na serwer. Najprostszy sposb przeszukania treci pliku polega na otwarciu go w edytorze tekstu konsolowym (np. mcedit) lub gracznym (np. gedit) i skorzystanie z wbudowanej funkcji szukania. Jednake jeli plik jest duy lub chcemy jedynie

48

3. Przetwarzanie tekstu znale wyszukiwany tekst (np. sprawdzi, czy istnieje) bez potrzeby edytowania go, prostsze mog si okaza komendy, ktre przeszukuj tre plikw wykorzystujc wyraenia regularne. 3.4.1. grep Komenda grep suy do przeszukiwania treci pliku. Wykorzystywalimy j ju podczas sprawdzania poprawnoci wyrae regularnych budowanych wedug skadni BRE. grep wzorzec cieka_do_pliku
Rysunek 3.7. Skadnia komendy grep

Pierwszym argumentem polecenia jest wzorzec regularny BRE. Jeli wzorzec nie jest prostym cigiem znakw (np. zawiera spacje), to naley uj go w cudzysw. Drugim, opcjonalnym argumentem jest cieka do pliku, ktry ma by przeszukany. Jeli drugi argument nie wystpi, to polecenie bdzie przeszukiwao standardowe wejcie. Przydatne agi -i - Traktuje wyraenie regularne jako case-insensitive, czyli nie zwraca uwagi na wielko znakw. -e - Okrela wyraenie regularne. Moe by wykorzystane do podania wielu wzorcw lub do wzorca rozpoczynajcego si od . -f - Wczytuje z pliku wzorce oddzielone znakiem nowej linii. -c - Wywietla ilo linii, ktre zostay dopasowane do wzorca. -v - Odwrcenie wzorca. Znajduje linie, ktre nie speniaj podanego wzorca. -E - Traktuje wyraenie regularne jako rozszerzone (ERE). -r - Przeszukuje pliki w folderze oraz wszystkich jego podfolderach rekursywnie. -F - Traktuje wzorzec jako zwyky cig znakw, ktry ju nie jest wyraeniem regularnym. Polecenie grep jest bardzo czsto wykorzystywane w potokach. Przykady Przykad 1. Podaj komend, ktra sprawdzi, czy uytkownik user jest zalogowany w systemie. Rozwizanie: w -h | grep ^user Przykad 2. Podaj komend, ktra wywietli te linie z pliku dane.txt, ktre zawieraj kropk. Rozwizanie: grep [.] dane.txt grep -F . dane.txt

3.4. Przeszukiwanie tekstu W wyraeniu regularnym nie mona uy samej kropki, gdy bdzie ona dopasowywaa kady znak. Dlatego kropk trzeba uj w jednoelementowy zbir lub skorzysta z agi -F. Przykad 3. Podaj komend, ktra wywietli te linie z pliku dane.txt, ktre nie zawieraj imienia Anna bez wzgldu na wielko liter. Rozwizanie: grep -i -v anna dane.txt Przykad 4. Podaj komend, ktra sprawdzi, czy program program jest uruchomiony. Rozwizanie: ps haux | grep program Jest to sposb szybkiego sprawdzenia, czy program jest uruchomiony. Nie daje to 100% pewnoci, gdy moe by na przykad inny uruchomiony program o podobnej nazwie, np. znajduje program-dev, podczas gdy program nie jest uruchomiony. Zadania Zadanie 1. Podaj komend, ktra sprawdzi, ile razy w pliku wystpuje sowo mamona. Zadanie 2. Podaj komend, ktra wywietli linie, ktre rozpoczynaj si od sw Log lub Lag. Zadanie 3. Podaj komend, ktra wywietli linie, ktre kocz si liter a. Zadanie 4. Podaj komend, ktra wywietli linie, ktre zawieraj sowa koczce si liter a. Zadanie 5. Podaj komend, ktra wywietli linie, ktre zawieraj sowa rozpoczynajce si liter a oraz w ktrych przedostatnia litera jest rna od n i d. 3.4.2. Inne warianty polecenia grep W celu uatwienia przeszukiwania plikw stworzono trzy alternatywy polecenia grep. Polecenie egrep jest odpowiednikiem grep -E i traktuje wzorzec, jako rozszerzone wyraenie regularne (ERE). Polecenie fgrep jest odpowiednikiem grep -F i traktuje wzorzec jako zwyky cig znakw, w ktrym kady znak odpowiada swojemu literaowi. Polecenie rgrep jest odpowiednikiem grep -r i szuka wzorca we wszystkich plikach w danym folderze oraz jego podfolderach rekursywnie.

49

50

3. Przetwarzanie tekstu

3.5. Edytor SED


Najprostszym sposobem na wprowadzenie zmian w plikach jest wykorzystanie domylnych - konsolowych (np. vi) lub gracznych (np. gedit) - edytorw tekstu. Z drugiej strony jest to czasochonny sposb, nawet gdy wykorzystujemy dodatkowe funkcje, takiej jak np. Znajd i Zamie. Jeszcze gorszym przypadkiem jest sytuacja, gdy podobne operacje musimy wykona na wielu plikach. Wtedy musielibymy otworzy i edytowa kady plik z osobna. Rozwizaniem powyszego problemu jest SED (ang. stream edytor), czyli strumieniowy edytor tekstu. Jest to narzdzie stworzone do edycji tekstu w trybie wsadowym, w odrnieniu do wczeniej wspomnianych edytorw, ktre pracuj w trybie edycji interaktywnej. SED jest idealnym rozwizaniem wczeniej wspomnianej sytuacji, w ktrej chcemy wykona szereg analogicznych operacji modykujcych plik lub zbir plikw. Naley wtedy napisa skrypt edytujcy i wywoa go dla kadego pliku. Edytor SED jest najczciej wykorzystywany do prostych modykacji tekstu, np. zamiany lub usunicia fragmentw tekstu, ale moe rwnie by wykorzystywany do bardziej skomplikowanych operacji, ktre rwnie poznamy w tej sekcji. SED jest uruchamiany za pomoc komendy o tej samej nazwie. sed [-n] polecenie [nazwa_pliku ... ...] sed [-n] -e polecenie ... [nazwa_pliku ... ...] sed [-n] -f plik_z_poleceniami ... [nazwa_pliku ... ...]
Rysunek 3.8. Skadnia komendy sed

Opcje polecenia: -n - zablokowanie wywietlania edytowanych wierszy (przydatne, gdy korzystamy z polecenia p); -e polecenie - okrelenie polecenia edycji pliku (jeli polecenie jest jedno, to nie trzeba pisac agi -e); -f plik_z_poleceniami - cieka do pliku, w ktrym znajduj si polecenia edycji (przydatne w sytuacji, gdy wykonujemy wiele polece edycji). Proces edycji dziaa w ten sposb, e edytor wczytuje kolejny wiersz z pliku lub ze standardowego wejcia, jeli plik nie zosta okrelony, wykonuje na tym wierszu wszystkie polecenia edycji i wypisuje na standardowe wyjcie wynik, jeli nie zostaa uyta aga -n. Edytor SED nie zmienia zawartoci plikw, lecz wypisuje wynik na standardowe wyjcie. Dlatego jeli chcemy zapisa wynik do pliku, musimy przekierowa do niego standardowe wyjcie lub skorzysta z przyrostka w. 3.5.1. Polecenie zastpienia Najczciej uywanym poleceniem edycji jest zastpienie oznaczane literk s (ang. substitute), ktrego skadania jest nastpujca s/wyraenie/zastpienie/przyrostek, gdzie wyraenie jest wyraeniem regularnym, ktre dopasowujemy do

3.5. Edytor SED wiersza, za wynik zastpujemy drug czci polecenia - zastpienie. Znaki / oddzielajce czci polecenia mog by zastpione dowolnymi znakami, przy czym wana jest konsekwencja, czyli zamiana wszystkich znakw / na nowy znak, np. ;. Jest to przydatne w sytuacji, gdy w wyraeniu lub zastpieniu wystpuje wanie znak / (np. podczas pracy ze ciekami do plikw). Ostatnim elementem w poleceniu edycji jest przyrostek. W przypadku zastpienia mona doda przyrostek g, dziki czemu polecenie bdzie wykonane dla wszystkich wystpie szukanego wyraenia w wierszu, a nie tylko dla pierwszego z nich. W przypadku, gdy chcemy wykona wiele polece edycji, moemy to zrobi na kilka sposobw. sed -e s/wyr1/zast1/ -e s/wyr2/zast2/ -e s/wyr3/zast3/ plik sed s/wyr1/zast1/;s/wyr2/zast2/;s/wyr3/zast3/ plik sed s/wyr1/zast1/ plik | sed s/wyr2/zast2/ | sed s/wyr3/zast3/

51

Wszystkie powysze sposoby dziaaj tak samo. Ponadto, mona wszystkie polecenia edycji umieci w pliku i wykorzysta ag -f. 3.5.2. Inne polecenia W edytorze sed mona wykorzysta rwnie inne polecenia oprcz zastpienia. Przykadowe z nich to: = - numerowanie linii (sed = plik ); /wyraenie/ N - dodanie do wiersza, ktry dopasowano do wyraenia wiersza, ktry wystpuje po nim; /wyraenie/ d - usunicie wierszy, w ktrych dopasowano wyraenie; /wyraenie/ p - wywietlenie wierszy, w ktrych dopasowano wyraenie (zwykle uywane z ag -n); /wyraenie/ q - zakoczenie przetwarzania pliku, gdy wystpi wiersz, w ktrym mona dopasowa wyraenie; /wyraenie/a text - dodanie nowej linii o treci aaa po linii, w ktrej dopasowano wyraenie; /wyraenie/i text - dodanie nowej linii o treci aaa przed lini, w ktrej dopasowano wyraenie; /wyraenie/c text - zastpienie caej linii, w ktrej dopasowano wyraenie now lini o treci aaa ; y/abcd/ABCD - zastpienie znakw z pierwszej listy znakiem z drugiej listy o tym samym numerze porzdkowym (np. mae c jest zastpowane duym C). 3.5.3. Sed w potokach Polecenie sed jest najczciej wykorzystywane w potoku jako porednik, ktry ma za zadanie wczyta tekst i przeksztaci go w ten sposb, eby mg by wykorzystany przez kolejne polecenie. Na przykad, gdy pewien program potrzebuje listy uywanych przez uytkownikw powok, to moemy j przygotowa za pomoc

52

3. Przetwarzanie tekstu prostego polecenia edycji oraz dodatkowej komendy uniq, ktra usuwa powtarzajce si linie. Przykadem przygotowania tych danych wejciowych jest komenda 3.5.3. sed s/.*:// /etc/passwd | uniq -u
Rysunek 3.9. Przygotowanie listy powok wykorzystywanych przez uytkownikw systemu

W tym przypadku pobieramy dane z pliku /etc/passwd, w ktrym jest lista uytkownikw oraz ich dane - m. in. wykorzystywana powoka, ktra jest ostatnim elementem wiersza, gdzie separatorem jest dwukropek. Dlatego sed em usuwamy wszystkie znaki wraz z ostatnim dwukropkiem. Dodatkowo musimy usun powtarzajce si wiersze, dlatego uywamy polecenia uniq, ktre domylnie usuwa powtarzajce si, ssiednie linie. Flaga -u usuwa z poprzedniego zdania sowo ssiednie, czyli po prostu zwracane s wszystkie unikalne wiersze. 3.5.4. Wsteczne odwoanie W poleceniu zastpowania mona korzysta ze wstecznego odwoania analogicznie go wyrae regularnych BRE. Wszystkie czci wyraenia ujte w nawiasy \( \) bd miay odpowiednika w zastpieniu. Odpowiedniki te bd dostpne za pomoc wyraenia \n, gdzie n jest numerem czci ujtej w nawiasy w szukanym wyraeniu. W miejsce odpowiednikw zostan wstawione acuchy znakw, ktre dopasuje wyraenie regularne. sed s/\(imie\) \(nazwisko\)/\2\1/ plik
Rysunek 3.10. Zamiana miejscami imienia i nazwiska

Oczywicie, podobnie jak w wyraeniach BRE, wsteczne odwoanie mona rwnie wykorzystywa w obrbie wyraenia szukania. 3.5.5. Znak & Szczeglnym przypadkiem wstecznego odwoania jest wykorzystanie znaku &. Znak ten przechowuje cig znakw, ktry zosta dopasowany przez cae szukane wyraenie. Std, moe by wykorzystany tylko w zastpieniu. sed s/wyraenie/&&/ plik
Rysunek 3.11. Przykad wykorzystania znaku & do duplikowania szukanego tekstu

Znak & moe by zastpiony odpowiednim odwoaniem wstecznym.

3.5. Edytor SED sed s/\(wyraenie\)/\1/ plik


Rysunek 3.12. Zastpienie znaku % odwoaniem wstecznym

53

3.5.6. Zastpienie wybranego wystpienia Na pocztku omawiania zastpienia wspomnielimy o adze g, ktra modykowaa polecenie w ten sposb, e zastpowane byy wszystkie wystpienia dopasowane przez szukane wyraenie. Oprcz tego, sed umoliwia okrelenie konkretnego wystpienia, ktre ma by zastpione. sed s/wyraenie/zastpienie/10 plik
Rysunek 3.13. Zastpienie tylko 10 wystpienia wyraenia

Dodatkowo, mona wybra od ktrego dopasowania wyraenia edytor ma zastpowa odnaleziony cig znakw. Na przykad, jeli chcemy wywietli tylko 10 pierwszych znakw kadego wiersza, a pozostae zastpi znakiem gwiazdki (*), to moemy skorzysta z poniszego polecenia. sed s/./*/11g plik
Rysunek 3.14. Wywietlenie tylko pocztku wiersza

3.5.7. Zapisanie wyniku do pliku Edytor sed domylnie nie modykuje plikw, z ktrych wczytuje wiersze. Jeli chcemy zapisa now, zmodykowan posta pliku, to moemy przekierowa standardowe wyjcie do pliku. Innym sposobem na zapisanie wyniku do pliku jest skorzystanie z agi w. sed s/./*/11gw plik.out plik
Rysunek 3.15. Zapisanie wyniku do pliku

Rnica polega na tym, e przekierowanie wyjcia zapisze do pliku tre caego pliku wejciowego, rwnie z niezmienionymi wierszami. Wykorzystanie agi w spowoduje zapisanie do pliku tylko tych wierszy, ktre zostay zmodykowane oraz wci wywietli pen tre zmodykowanego pliku na standardowym wyjciu.

54 3.5.8. Wybieranie wierszy

3. Przetwarzanie tekstu

Edytor sed umoliwia ograniczenie zbioru wierszy, ktre maj by zmienione. Oczywicie czciowo robi to na przykad szukane wyraenie w poleceniu zastpowania, jednake moliwa jest jeszcze selekcja na wyszym poziomie. Zakres wierszy mona ograniczy wykorzystujc nastpujce sposoby: wybranie linii o konkretnym numerze; wybranie zakresu linii z przedziau okrelonego dwoma numerami; wybranie linii, ktre dopasowuj podane wyraenie; wybranie zakresu linii od pocztku pliku do linii, ktra dopasowuje podane wyraenie; wybranie zakresu linii od linii, ktra dopasowuje podane wyraenie do koca pliku; wybranie zakresu linii od linii, ktra dopasowuje pierwsze podane wyraenie do linii, ktra dopasowuje drugie podane wyraenie. Pierwszy sposb polega po prostu na podaniu numeru linii, ktr naley zmodykowa zgodnie z podanym poleceniem. sed 25 s/./*/11g plik
Rysunek 3.16. Ukrycie znakw numer 11 i nastpnych, ale tylko w 25 wierszu

W drugim przypadku naley poda dwie liczby oddzielone przecinkiem, ktre okrelaj pocztek i koniec przedziau, ktry zostanie wyedytowany zgodnie z nastpujcym po nich poleceniem. sed 15,25 s/./*/11g plik
Rysunek 3.17. Ukrycie znakw numer 11 i nastpnych w wierszach o numerach od 15 do 25 wcznie

Adresowanie za pomoc wyraenia polega na tym, e edytor prbuje do kadego wiersza dopasowa podane wyraenie, i jeli mu si to uda to moe wykona polecenie na tym wierszu. sed /\/bin\/sh/ s/./*/11g plik
Rysunek 3.18. Ukrycie znakw numer 11 i nastpnych w wierszach uytkownikw, ktry korzystaj z powoki /bin/sh

W przypadku wyrae, ktre adresuj wiersze nie mona zastpi znakw / innym znakiem drukowanlnym, tak jak ma to miejsce w poleceniach. Znak separatora mona zmieni, gdy pierwszym znakiem wyraenia jest \. Wtedy drugi, dowolny znak drukowalny staje si separatorem.

3.5. Edytor SED sed \_/bin/sh_ s/./*/11g plik


Rysunek 3.19. Zmiana separatora

55

Jeli chcemy w wyraeniu skorzysta ze znaku / jako literau, mona go poprzedzi znakiem \ bez potrzeby zmiany znaku separatora. Najbardziej rozbudowanym przypadkiem jest okrelenie przedziau wierszy za pomoc dwch wyrae regularnych. Polega on na podaniu dwch wyrae regularnych oddzielonych przecinkiem. Edytor napotykajc wiersz, w ktrym moe dopasowa pierwsze wyraenie zaczyna wykonywa podane polecenia edycji na tym i nastpnych wierszach, a spotka wiersz, do ktrego bdzie mg dopasowa drugie wyraenie (na nim rwnie wykonuje polecenie edycji). Proces ten jest powtarzany, a edytor napotka koniec pliku. sed /bash$/,/sh$/ s/./*/g plik
Rysunek 3.20. Ukrycie wierszy z przedziaw okrelonych wyraeniami

Zamiast jednego z wyrae mona uy liczby okrelajcej numer wiersza. Szczegln rol gra znak $, ktry reprezentuje koniec pliku. sed 1,/koniec$/ s/./*/g plik
Rysunek 3.21. Ukrycie wierszy od pocztku pliku do wiersza z cigkiem znakw koniec

sed /poczatek/,$ s/./*/g plik


Rysunek 3.22. Ukrycie wierszy od wiersza z cigiem znakw poczatek do koca pliku

3.5.9. Grupowanie polece W przypadku, gdy na tym samym zbiorze wierszy (rwnie jednoelementowym) chcemy wykona kilka operacji moemy skorzysta z grupowania polece. Uycie wielu polece (za pomoc agi -e lub -f ) z tym samym wyraeniem wybierajcym wiersze nie zadziaa w tym przypadku, gdy na kolejne polecenia przekazywany jest wynik poprzedniego polecenia, wic adresowanie w kolejnych poleceniach moe nie wybra zmodykowanych wierszy. Na przykad jeli wybieramy wiersze, ktre zawieraj cig znakw tego szukamy i w pierwszym poleceniu zastpujemy go cigiem to wstawiamy, to drugie polecenie ju nie dopasuje tego wiersza, gdy nie odnajdzie w nim tego szukamy.

56

3. Przetwarzanie tekstu eby temu zaradzi, wprowadza si grupowanie polece. Skada si ono z jednego wyraenia wybierajcego wiersz oraz wielu polece edycji ujtych w klamry { }. sed -n /szukamy/ { s/szukamy/nowy tekst/ # a tu moemy wstawi komentarz p } plik
Rysunek 3.23. Przykadowe uycie grupowania polece

W zaprezentowanym przykadzie bierzemy pod uwag wiersze, ktre zawieraj cig znakw szukamy, a nastpnie zamieniamy go na nowy tekst i wywietlamy ten zmieniony wiersz. Jeli skorzystalibymy z dwch odrbnych polece z tym samym wyraeniem wybierajcym wiersze, to aden wiersz nie zostaby wywietlony, gdy drugie polecenie (wywietlajce) nie dopasowaoby adnego wiersza. 3.5.10. Odwrcenie adresu W poleceniach edytujcych mona skorzysta rwnie ze znaku !, ktry odwraca adres polecenia. Innymi sowy polega to na tym, e podane polecenie jest zastosowane do wszystkich wierszy, ktre nie s dopasowane przez wyraenie adresujce wedug wszystkich, wczeniej opisanych regu. Odwrcenie adresu przydaje si w sytuacji, gdy okrelenie wierszy, ktre maj by pozostawione bez zmian jest atwiejsze albo, gdy jest to moliwe w przeciwiestwie do okrelenia wierszy, ktre maj by edytowane. sed /zostawiamy/ ! s/./*/g plik
Rysunek 3.24. Ukrycie tylko tych wierszy, w ktrych nie ma cigu znakw zostawiamy

Przykady Przykad 1. Sprawd, ile jest linii kodu w pliku plik.sh usuwajc komentarze, czyli linie rozpoczynajce si od znaku # oraz zliczajc niepuste linie. Rozwizanie: sed s/^#.*// f1 f2 f3 | grep -v ^$ | wc -l

Przykad 2. Wywietl informacje o uytkownikach z grupy o identykatorze 125. Rozwizanie:

3.5. Edytor SED sed -n /^[^:]*:[^:]*:[^:]*:125/ p /etc/passwd Na pocztku wyczamy domylne wywietlanie wierszy (-n). Nastpnie sprawdzamy czwarty element kadego wiersza przyjmujc, e dwukropek jest separatorem. Tak jest skonstruowany plik /etc/passwd, ktry przechowuje informacje o uytkownikach systemu. Sprawdzany element jest identykatorem grupy uytkownika, wic porwnujemy go z oczekiwan liczb 125. Akcja, jak podejmujemy, to po prostu print. Przykad 3. Wywietl tre pliku z ponumerowanymi liniami, ale bez dodatkowych wierszy (adnie sformatowane). Rozwizanie: sed = plik | sed N;s/\n/: /

57

Na pocztku uywamy numerowania linii, w ktre wyposaony jest sed. Numerowanie to jednak polega na dodaniu przed kad lini nowej linii z samym numerem. Dlatego pniej korzystamy jeszcze z 2 polece. Jako, e sed dziaa na wierszach, to bierze pod uwag wszystkie znaki, dopki nie napotka znaku nowej linii. Polecenie N dokleja do linii aktualnie przetwarzanej lini, ktra wystpuje po niej. Na kocu poczenie linii (znak nowej linii), ktre ju istnieje w przetwarzanym wierszu zamieniamy na cig znakw ": ". Zadania Zadanie 1. Usu wszystkie biae znaki (spacje i tabulacje) wystpujce na kocu wierszy. Zadanie 2. Wywietl pierwsze 10 linii pliku na 4 rne sposoby. Zadanie 3. W pliku test niektre wiersze zawieraj jedynie liczby w systemie szesnastkowym. Znajd je i zamie mae literki a-f na ich due odpowiedniki. Zadanie 4. Usu wszystkie linie midzy znakami { oraz } zastpujc je napisem *** DELETED ***. Zadanie 5. W pliku tekstowym plik.txt dodaj pust lini przed kadym wierszem, ktry rozpoczyna si du liter.

Rozdzia 4
Skrypty BASH

60

4. Skrypty BASH Zanim zaczniemy prac ze skryptami BASH, wytumaczymy, czym one waciwie s. BASH (ang. Bourne Again SHell) to interpreter polece zgodny z sh, ktry zosta stworzony przez Briana Foxa i Cheta Rameya. czy on w sobie zalety C-shella (csh ) oraz shella Korna (ksh ). BASH to nie tylko bardzo popularna powoka uywana w systemach Linux, ale rwnie skryptowy jzyk programowania. Skrypty BASH to zbir polece, ktre wykonujemy w konsoli powoki BASH wzbogacony o zmienne, czy instrukcje sterujce (konstrukcja if, ptle, itp.). S one umieszczone w zwykym pliku tekstowym, w ktrym pierwsza linia jest specjalnym komentarzem, okrelajcym ciek do interpretera, ktry ma wykona skrypt (np. #!/bin/bash ). Wykonanie skryptu polega na przetumaczeniu kolejnych polece na jzyk zrozumiay dla procesora. Typowym zastosowaniem skryptw jest zautomatyzowanie czsto wykorzystywanych sekwencji polece do administracji systemem, konguracji i wykonywania pojedynczych programw, tworzenia kopii zapasowych itp. Skrypty mog by rwnie sterowane z zewntrz za pomoc parametrw wywoania, ktre omwimy dokadniej w nastpnych rozdziaach.

4.1. Pierwsze kroki


4.1.1. Zanim zaczniemy pisa skrypt Przed napisaniem pierwszego skryptu naley odnale ciek do interpretera, ktry bdzie wykonywa nasze skrypty. Mona go zlokalizowa za pomoc polecenia whereis. whereis bash Najczstszym folderem, w ktrym wystpuje interpreter BASH jest /bin/bash. Jeeli nie moemy odnale cieki do interpretera, to by moe nie jest on zainstalowany. Wtedy naley go zainstalowa zgodnie z opisem w sekcji 2.7. Kiedy odnajdziemy ciek do interpretera (w tej ksice bdzie przyjta /bin/bash ), moemy rozpocz pisanie skryptu. Na pocztku tworzymy plik za pomoc polecenia touch. Nazwa pliku jest dowolna, jednake do pliku mona doda rozszerzenie *.sh, eby zaznaczy, e jest to skrypt powoki. Dodanie rozszerzenia ma charakter jedynie informacyjny. touch hello.sh Po stworzeniu pliku naley go otworzy za pomoc dowolnego edytora tekstu, gracznego (np. kate, gedit) lub konsolowego (np. vi, mcedit). Nastpnie naley doda w pierwszej linii specjalny komentarz #!/sciezka_do_interpretera, czyli w naszym przypadku #!/bin/bash, ktry pozwoli uruchamia nasze skrypty tak, jak uruchamiane s polecenia systemowe. Specjalny komentarz w pierwszej linii nie jest wymagany do uruchomienia skryptu. Jeli go pominiemy, bdziemy musieli okreli ciek do interpretera podczas uruchamiania skryptu. Wicej na ten temat w sekcji 4.1.3.1.

4.1. Pierwsze kroki

61

# ! / bin / bash

Skrypt 4.1. Pusty skrypt powoki Tak przygotowany plik jest ju skryptem powoki i w tej ksice kady skrypt bdzie si rozpoczyna tak lini. 4.1.2. Hello World w BASHu Wiedzc ju jak tworzy skrypty, przyjrzyjmy si klasycznemu Hello World w BASHu.
1 2

# ! / bin / bash

echo H e l l o World

Skrypt 4.2. Hello World Wykorzystujemy w nim polecenie echo, ktre wywietla na standardowym wyjciu warto parametru, ktrym w tym przypadku jest cig znakw Hello World. Jeli w konsoli wpiszemy to samo polecenie (echo Hello World ), to efekt bdzie taki sam, jak po uruchomieniu skryptu, o czym w nastpnej sekcji. Ten prosty skrypt pokazuje, e skrypty BASH to po prostu zbir polece zapisanych w jednym pliku. Oczywicie, skrypty oka si jeszcze bardziej przydatne, gdy dodamy do nich instrukcje sterujce. 4.1.3. Uruchamianie skryptw Majc gotowy skrypt Hello World, zapiszmy go w pliku hello.sh. Rozszerzenie ma wycznie charakter informacyjny. Nie okrela ono, w jaki sposb plik zostanie wykonany - tak informacj umiecilimy w specjalnym komentarzu w pierwszym wierszu skryptu. Kady plik ma okrelone prawa dla waciciela (u), grupy waciciela (g) oraz pozostaych uytkownikw (o). Kade z nich moe by dowoln kombinacj trzech typw: prawo do odczytu (r), prawo do zapisu (w) oraz prawo do wykonywania (x). Jak sama nazwa wskazuje, musimy nada sobie (wacicielowi pliku) prawo do wykonywania pliku (skryptu). Robimy to za pomoc polecenia 4.1. chmod u+x plik
Rysunek 4.1. Nadanie wacicielowi prawa do wykonywania pliku

Po nadaniu prawa do wykonywania pliku, uruchamiamy go prostym poleceniem 4.2.

62 ./hello.sh

4. Skrypty BASH

Rysunek 4.2. Uruchomienie skryptu ze specjalnym komentarzem oraz prawami do wykonywania pliku

4.1.3.1. Uruchamianie skryptw bez specjalnego komentarza Mwilimy wczeniej o tym, e specjalny komentarz ze ciek do interpretera nie jest wymagany w skrypcie. Jeli go nie umiecimy, to system nie bdzie mia informacji, za pomoc ktrego interpretera wykona skrypt. Dlatego podczas uruchamiania skryptu musimy sami okreli, z ktrego interpretera chcemy skorzysta. Wtedy nie musimy posiada uprawnie do wykonania pliku, a jedynie prawo do jego odczytania. Przykad uruchomienia skryptu 4.4 przedstawiono na 4.3.
1

echo H e l l o World

Skrypt 4.3. Hello World bez specjalnego komentarza

/bin/bash hello.sh
Rysunek 4.3. Uruchomienie skryptu bez specjalnego komentarza

4.1.3.2. Uruchamianie skryptw bez podawania cieki W przypadku, gdy w skrypcie uyjemy specjalnego komentarza okrelajcego interpreter, uruchamiamy go za pomoc polecenia ./skrypt pod warunkiem, e znajdujemy si w katalogu, w ktrym umieszczony jest skrypt. Jeli chcemy uruchomi skrypt z innego katalogu, to musimy poda pen ciek do pliku - wzgldn lub bezwzgldn. Staje to si niewygodne, gdy chcemy mie prosty dostp do skryptu bez wzgldu na miejsce, w ktrym si znajduje skrypt oraz uytkownik. W tym celu tworzy si katalog (np. w folderze domowym uytkownika, bd w jednym z folderw wsplnych uytkownikw), w ktrym umieszcza si stworzone skrypty. Nastpnie, dodaje si jego ciek bezwzgldn do zmiennej rodowiskowej PATH (4.4). user@localhost:~$ PATH=$PATH:/sciezka_do_folderu
Rysunek 4.4. Aktualizacja zmiennej rodowiskowej PATH

Po tym zabiegu moemy uruchamia skrypty tak samo, jak polecenia systemowe (np. hello.sh ) pod warunkiem, e mamy prawo do jego wykonywania. Zmienna PATH przechowuje cieki oddzielone dwukropkiem ":"do katalogw, ktre przeszukiwane s podczas uruchamiania polece systemowych.

4.2. Komentarze

63

4.2. Komentarze
Podczas tworzenia pierwszego skryptu poznalimy specjalny komentarz, ktry zaczyna si dwoma znakami #!. Jeli po znaku # nie umiecimy wykrzyknika, to interpreter potraktuj dalsz cz linii (lub ca lini, gdy # jest pierwszym znakiem) jako komentarz.
1 2 3

# ! / bin / bash # komentarz od poczatku # komentarz linii za poleceniem

echo H e l l o World

Skrypt 4.4. Hello World

4.3. Zmienne
W skryptach BASH zmienne s deklarowane oraz deniowane tak, jak przedstawiono w przykadzie 4.5. Zadeklarowana zostaa zmienna o nazwie liczba oraz przypisano jej warto liczbow 11.
1 2 3

# ! / bin / bash # deklaracja i definicja zmiennej

l i c z b a =11

Skrypt 4.5. Hello World Midzy nazw zmiennej, znakiem rwnoci, a wartoci nie moe by spacji. eby sprawdzi, co si stanie, wpiszmy w konsoli polecenia z 4.7. Interpreter potraktuje spacj jako koniec polecenia i sprbuje wykona w przypadku liczba= 11 polecenie liczba=. Jeli warto zmiennej ma zawiera w sobie spacje, to mona uj warto w cudzysw lub poprzedzi kade wystpienie spacji znakiem \.
1 2 3 4 5 6 7 8 9 10

# ! / bin / bash

l i c z b a =11 # p o p r a w n a definicja l i c z b a = 11 # n i e p o p r a w n a definicja l i c z b a =11 # n i e p o p r a w n a definicja l i c z b a= 11 # n i e p o p r a w n a definicja


# # poprawna poprawna definicja definicja zmiennej zmiennej ze ze spacjami spacjami

ciag_znakow=" aa bb" ciag_znakow=\ aa \ bb

Skrypt 4.6. Poprawna i niepoprawne denicje zmiennych Zmienne w skryptach BASH nie maj okrelonego typu. Powoka przypisuje typ zmiennej na podstawie przypisywanej wartoci. Jeli zmiennej liczba przypisano by w kolejnej linii warto jakis tekst, to jej typ zmieniby si na cig znakw.

64

4. Skrypty BASH Nazwy zmiennych mog skada si z liter z alfabetu aciskiego, znaku podkrelenia _ oraz cyfr, pod warunkiem, e nie s one pierwszym znakiem w nazwie zmiennej (np. nazwa 12zmienna jest nieprawidowa). Ponadto wielko liter w nazwie zmiennych ma znaczenie, czyli zmienne liczba oraz Liczba to dwie rne zmienne. W celu pobrania wartoci zmiennej, naley poprzedzi jej nazw znakiem dolara $. Na przykad warto 11 z powyszej zmiennej mona pobra za pomoc polecenia $liczba.
1 2 3 4 5 6 7 8 9

# ! / bin / bash # definicja zmiennej

STRING=" H e l l o World" INNY_STRING=H e l l o \ World


# wyswietlenie wartosci zmiennej

echo $STRING
# wyswietlenie dlugosci wartosci zmiennej

echo $ {

# INNY_STRING }

Skrypt 4.7. Pobranie i wywietlenie wartoci zmiennej Problem moe stwarza konkatenacja (czenie) stringw. Przyjrzyjmy si przykadowi 4.8. Przedstawiono w nim prb konkatenacji stringw, ktra nie dziaa zgodnie z naszymi oczekiwaniami. Konkatenacja polega na zapisaniu dwch wartoci jedna po drugiej bez adnego znaku czcego (np. zmienna=aabbb" ).
1 2 3 4 5 6 7

# ! / bin / bash

moja_zmienna=" t r e s c z m i e n n e j moja_zmienna "


# teraz chcemy dopisac do zmiennej tekst " NOWA "

moja_zmienna=$moja_zmiennaNOWA
# wartosc zmiennej moja_zmienna jest pustym stringiem

echo $moja_zmienna

Skrypt 4.8. Konkatenacja stringw - Problem Dlaczego wic konkatenacja przedstawiona na przykadzie 4.8 nie dziaa? Dzieje si tak dlatego, e interpreter pobierajc warto dowolnej zmiennej, czyta jej nazw tak dugo, a napotka znak, ktry nie moe by wczony do nazwy zmiennej (np. znak $, ", spacj, itp.). Std, na przedstawionym problemie interpreter prbuje przypisa do zmiennej moja_zmienna warto zmiennej moja_zmiennaNOWA, ktra jest niezdeniowana i jej warto jest pustym stringiem.
1 2 3 4 5

# ! / bin / bash

moja_zmienna=" t r e s c z m i e n n e j moja_zmienna "


# teraz chcemy dopisac do zmiennej tekst " NOWA "

4.3. Zmienne
6 7 8 9 10 11 12 13 14 15 16

65
wersja

# pierwsza

moja_zmienna=$ { moja_zmienna }NOWA echo $moja_zmienna


# druga wersja

moja_zmienna=$moja_zmienna "NOWA" echo $moja_zmienna


# trzecia wersja

moja_zmienna=" $moja_zmienna "NOWA echo $moja_zmienna

Skrypt 4.9. Konkatenacja stringw - Rozwizanie Przykady rozwiza powyszego problemu zaprezentowano na 4.9. W celu ograniczenia nazwy zmiennej, ktrej warto chcemy pobra, mona jej identykator (bez znaku $) uj w klamry { }. Nie zmieniaj one nazwy zmiennej, a jedynie j ograniczaj, gdy identykator nie moe zawiera znaku klamry. Ten sposb bdzie rwnie przydatny w przypadku pobierania wartoci argumentw wywoywania skryptu. Innym sposobem na rozwizanie powyszego problemu skorzystanie ze znaku cudzysowu. On rwnie ogranicza nazw zmiennej, przy czym naley w cudzysowie zawrze rwnie znak $. Tak jak pokazano na przykadzie 4.9 mona z niego skorzysta a dwa rne sposoby. 4.3.1. Zmienne tablicowe W skryptach BASH mona rwnie deklarowa zmienne tablicowe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

# ! / bin / bash # Tablica z trzema elementami

TABLICA=( " P i e r w s z a w a r t o s c " Druga T r z e c i a )


# Pobranie # na wartosci n tego elementu tablicy

echo $ {TABLICA [ n ] }
przyklad

echo $ {TABLICA [ 1 1 ] }
# Pobranie # lub wartosci pierwszego elementu tablicy

echo $ {TABLICA [ 0 ] } echo $TABLICA


# Pobranie string wszystkich elementow polaczonych w jeden

17 18 19 20

echo $ {TABLICA [@] }


# Pobranie ilosci wszystkich elementow tablicy

echo $ {

# TABLICA [ @ ] }

66

4. Skrypty BASH

Skrypt 4.10. Zmienne tablicowe Tak jak wida na powyszym przykadzie, zmienna tablicowa (bez indeksu) wskazuje na warto kryjc si pod indexem numer 0. Ponadto, index oznacza wszystkie indeksy tablicy i moe zosta wykorzystany do konkatenacji wszystkich wartoci w tablicy, bd do zliczenia jej elementw.

4.3.2. Argumenty wywoania skryptu Do skryptw BASH, tak jak do polece systemowych mona przekazywa wartoci podczas ich wywoywania. Na przykad, gdy chcemy podejrze tre pliku plik_tekstowy, to wywoujemy polecenie cat plik_tekstowy. W tym przypadku warto plik_tekstowy jest argumentem wywoania skryptu, czyli wartoci przekazan do skryptu, z ktrej mona korzysta.
1 2

# ! / bin / bash

echo Witaj $1 $2

Skrypt 4.11. Wykorzystanie argumentw wywoania skryptu Spjrzmy na przykad 4.11. Wykorzystano w nim dwa argumenty wywoania skryptu. Ich wartoci pobiera si ze zmiennych $n, gdzie n okrela numer porzdkowy argumentu. Wynik wywoania skryptu zaprezentowano na rysunku 4.5. user@host:~# ./witaj Jan Kowalski Witaj Jan Kowalski
Rysunek 4.5. Uruchomienie skryptu z arumentami wywoania

Za pomoc polecenia $n mona dosta si do dziewiciu (1-9) pierwszych argumentw wywoania skryptu. W przypadku, gdy do skryptu przekazywana jest wiksza ilo argumentw, mona si do nich odwoa wykorzystujc wczeniej omwiony sposb z klamrami, np. $11 to warto 11. argumentu. W skryptach BASH mona wykorzysta rwnie nastpujce zmienne specjalne: $0 - nazwa uruchomionego skryptu; $@ - zwraca wszystkie przekazane argumenty poczone w jeden string; $? - kod powrotu ostatniego polecenia; $$ - PID procesu; $# - ilo przekazanych argumentw.

4.4. Instrukcje i wyraenia

67

4.4. Instrukcje i wyraenia


Tak jak w innych jzykach programowania, rwnie w BASHu nie moe zabrakn wyrae (logicznych, arytmetycznych) oraz instrukcji sterujcych. W nastpnych sekcjach poznamy ich 4.4.1. Wywoanie polecenia a pobranie jego wartoci Podczas tworzenia skryptu, korzystamy z innych polece. Na przykad skrypt, ktry szuka okrelonych plikw i wywietla ich tre, bdzie najpewniej korzysta z komend nd oraz cat. Na przykadzie 4.12 przedstawiono skrypt, ktry wywietla tre wszystkich plikw w aktualnym folderze.
1 2 3

# ! / bin / bash

cat . /

Skrypt 4.12. Przykad wywoania polecenia w skrypcie Czasem jednak nie chcemy od razu wywietla treci plikw na standardowe wyjcie, tylko przechowa j do wykorzystania w dalszej czci skryptu. eby to zrobi, wykorzystujemy znak grawis (ang. grave accent) , ktry nie wystpuje w jzyku polskim, za w innych jzykach (np. francuski, portugalski) umieszcza si go nad literk, eby zaznaczy akcent samogoski krtkiej o intonacji opadajcej. Znak ten na klawiaturze zwykle wystpuje pod znakiem tyldy . Na przykadzie 4.13 przedstawiono wykorzystanie znaku grawis.
1 2 3 4 5 6 7 8 9 10 11 12

# ! / bin / bash # Zapisujemy #W tym tresc plikow na do zmiennej nic na sie nie pojawilo

TRESC= cat . /
momencie moze my ze ekranie

# Tutaj #

wykonac zmiennej

operacje TRESC

tresci

plikow

TRESC= echo $TRESC | sed s / w y r a z e n i e / z a s t a p i e n i e /


#A na koncu wyswietlamy zawartosc

echo $TRESC

Skrypt 4.13. Przykad wywoania polecenia w skrypcie Skrypty, oprcz zwracania danych na standardowe wyjcie, mog rwnie zwraca pewn warto - kod powrotu (ang. exit status) - w momencie, gdy kocz dziaanie. Suy do tego polecenie exit, ktrego skadnia zostaa przedstawiona na rysunku 4.6. Komenda exit suy do zakoczenia dziaania skryptu w dowolnym momencie. Jako opcjonalny parametr mona przekaza status, ktry zostanie przekazany wyej do skryptu lub powoki, ktra wywoaa ten skrypt. Statusem moe by dowolna

68 exit [status]
Rysunek 4.6. Skadnia polecenia exit

4. Skrypty BASH

liczba naturalna jednobajtowa. W przypadku, gdy status nie zostanie okrelony, to przyjmuje warto 0. Najczciej statusw uywa si do zwracania kodu bdu, jaki wystpi w skrypcie. Std, warto 0 oznacza, e wszystko przebiego pomylnie i nie wystpi aden bd. W przeciwnym razie, gdy wystpi bd, skrypt wywoujcy komend moe na podstawie jego wartoci podj odpowiednie kroki. Teraz pojawia si pytanie, jak pobra kod powrotu zwracany przez skrypt? W poprzedniej sekcji opisywalimy zmienne specjalne, a wrd nich zmienn $?, ktra zwraca kod powrotu ostatniego polecenia. To wanie za pomoc tej zmiennej bdziemy sprawdza, jaki by status wywoywanych polece. Przykadowe sprawdzenie dziaania zmiennej przedstawiono na 4.14.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

# # ! / bin / bash

plik

exit0

exit
# # # ! / bin / bash plik exit1

exit 1
#

# # ! / bin / bash

plik

test

./ exit0 ./ exit1
# Status z # ostatniego wyswietli 1 polecenia , czyli exit1

echo $ ? ./ exit0 echo $ ?

wyswietli

zm0 = ./ e x i t 0 echo $zm0 # w y s w i e t l i zm1 = ./ e x i t 1 echo $ ? # w y s w i e t l i

pusty 1

string

Skrypt 4.14. Wykorzystanie zmiennej $?

4.4. Instrukcje i wyraenia W przypadku zmiennej $? brane s pod uwag wszystkie polecenia, rwnie te otoczone znakiem grawis. 4.4.2. Pobieranie danych od uytkownika Pobieranie danych od uytkownika i wykorzystywanie ich w skrypcie wprowadza do niego interaktywno. Zwykle dane, ktre pochodz od uytkownika, wprowadza si do skryptu za pomoc argumentw wywoania, aczkolwiek s sytuacje, w ktrych skrypt prowadzi dialog z uytkownikiem. Czstym przypadkiem interakcji z uytkownikiem jest potwierdzenie wykonania operacji. Skrypt wywietla uytkownikowi opis operacji, ktr chce wykona i prosi o wpisanie na przykad literki t od tak lub y od yes, eby mg wykona t operacj. Kady inny znak anuluje wykonanie operacji. W celu pobrania danych od uytkownika w czasie wykonywania skryptu naley skorzysta z polecenia read (4.7). read nazwa_zmiennej
Rysunek 4.7. Skadnia polecenia read

69

Polecenie read wczytuje do zmiennej przekazanej jako argument tre linii wpisanej przez uytkownika a do napotkania znaku nowej linii. Mona rwnie jednym poleceniem read wczyta wartoci do wielu zmiennych (4.15).
1 2 3 4 5 6 7 8 9

# ! / bin / bash

echo " Podaj c z t e r y wyrazy : " read a b c d echo echo echo echo " P i e r w s z y wyraz t o : " $a " Drugi wyraz t o : " $b " T r z e c i wyraz t o : " $c " Czwarty wyraz t o : " $d

Skrypt 4.15. Wczytywanie wielu zmiennych Komenda read staje si bardzo uyteczna, gdy wykorzystujemy j wsplnie z instrukcjami sterujcymi, ktre omwimy w nastpnych sekcjach. Omwimy wtedy rwnie przykady wykorzystania polecenia read, w szczeglnoci przykad z potwierdzeniem operacji. 4.4.3. Wyraenia arytmetyczne W skryptach BASH istnieje specjalny mechanizm do obliczania wyrae arytmetycznych, ktre operuj na zmiennych cakowitych.

70

4. Skrypty BASH Mechanizm obliczania wyrae arytmetycznych nie przeprowadza kontroli przepenienia. Sprbuj napisa skrypt, ktry zwraca ujemny kod powrotu i wywietli go w innym skrypcie. Bdzie to liczba naturalna z przedziau 0-255. W celu zrozumienia dziaania oraz potrzeby wprowadzenia mechanizmu do obliczania wyrae arytmetycznych spjrzmy na przykad 4.16.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

# ! / bin / bash

NUMER=1
# Niepoprawne zwiekszenie Wyswietli licznika 1+1 , czyli konkatenacje stringow

NUMER =$NUMER+1 echo $NUMER # NUMER=1


# Poprawne # Pierwsza

zwiekszenie wersja

licznika

NUMER =$ ( ($NUMER+1) ) echo $NUMER # W y s w i e t l i


# Druga wersja

NUMER =$ [$NUMER+1] echo $NUMER # W y s w i e t l i


# Sposob # lub na zwiekszenie

3 wartosci o 1

TMP =$ ( ($NUMER++)) echo $ ( ($NUMER++))


# Teraz # $NUMER nie # o zostal zwiekszony go , tej zmiennej zadnej mimo ze wartosci przypisalismy 4 z do zmniejszenia

echo $NUMER
# wartosci

Wyswietli mozna 1

# Analogicznie

skorzystac

Skrypt 4.16. Obliczanie wyrae arytmetycznych

Pierwsza prba zwikszenia licznika nie powioda si, gdy BASH domylnie nie traktuje znakw +,-,*, itp. jako dziaania arytmetyczne, tylko jako zwyke znaki. Dlatego w pierwszym przypadku BASH poczy warto zmiennej NUMER z cigiem znakw +1 i zapisa co zmiennej NUMER nowy cig znakw 1+1. Dlatego wprowadzono $(( )) oraz $[ ], w ktrych umieszcza si wyraenie. BASH widzc wyraenie zawarte w tych znakach traktuje je, jako wyraenie arytmetyczne i oblicza wedug regu arytmetycznych. Oprcz wyej wymienionych znakw mona skorzysta z polecenia let. Na przykad let NUMER=NUMER+1.

4.4. Instrukcje i wyraenia 4.4.4. Wyraenia logiczne Innym, rwnie wanym rodzajem wyrae, s wyraenia logiczne. S one wykorzystywane przede wszystkim w instrukcjach sterujcych, ktre wykonuj rne polecenia zalenie od wyniku wyraenia logicznego. Wyraenia logiczne oblicza si za pomoc polecenia test lub odpowiednika z nawiasami kwadratowymi. Przykady wyrae logicznych zaprezentowano w skrypcie 4.17.
1 2 3 4 5 6 7 8 9 10 11 12

71

# ! / bin / bash

NUMER=1
# Wykorzystanie polecenia test

t e s t $NUMER=1 t e s t x s k r y p t
# lub odpowiedniki spacje nawiasowe za pierwszym i przed drugim

# Istotne sa nawiasem

[ $NUMER = 1 ] [ x s k r y p t ]

Skrypt 4.17. Obliczanie wyrae logicznych Polecenie test moe wykorzystywa dwa rodzaje operatorw: unarne i binarne. Operatory unarne dziaaj na jednym operandzie (np. -x), za binarne wymagaj dwch operandw (np. =). Wszystkie operatory zostay wymienione w tabeli 4.1. 4.4.5. Instrukcje sterujce Omawiajc wyraenia arytmetyczne, a szczeglnie logiczne, wspominalimy o tym, e s one przydatne do sterowania przebiegiem wykonywania skryptu. Oczywicie same wyraenia nie s w stanie sterowa przebiegiem, a s jedynie wykorzystywane przez instrukcje sterujce, ktre zostan omwione w tej sekcji. 4.4.5.1. Instrukcja if Instrukcja warunkowa if sprawdza, czy warunek jest prawdziwy i w tej sytuacji wykonuje zestaw instrukcji znajdujcy si po sowie kluczowym then, za w przeciwnym przypadku wykonuje zestaw instrukcji znajdujcy si za sowem kluczowym else. Skadni instrukcji warunkowej if przedstawiono w skrypcie 4.18.
1 2 3 4 5 6 7 8 9

# ! / bin / bash # Pierwsza wersja

i f warunek then instrukcje else instrukcje fi

72

4. Skrypty BASH

-a plik -b plik -c plik -e plik -h plik -f plik -p plik -N plik -d plik -r plik -w plik -x plik plik1 -nt plik2 plik1 -ot plik2 wyr1 = wyr2 wyr1 != wyr2 -n wyr -z wyr wyr1 -lt wyr2 wyr1 -gt wyr2 wyr1 -ge wyr2 wyr1 -le wyr2

Sprawdza, czy podany plik istnieje. Sprawdza, czy plik istnieje i jest blokowym plikiem specjalnym. Sprawdza, czy plik istnieje i jest plikiem znakowym. Sprawdza, czy plik istnieje. Sprawdza, czy plik istnieje i jest linkiem symbolicznym. Sprawdza, czy plik istnieje i jest plikiem zwykym. Sprawdza, czy plik jest czem nazwanym. Sprawdza, czy plik istnieje i by zmieniany od czasu jego ostatniego odczytu. Sprawdza, czy plik istnieje i jest katalogiem. Sprawdza, czy uytkownik, ktry uruchamia skrypt, moe czyta plik. Sprawdza, czy uytkownik, ktry uruchamia skrypt, moe zapisywa do pliku. Sprawdza, czy uytkownik, ktry uruchamia skrypt, moe wykona plik. Sprawdza, czy plik1 jest nowszy od pliku2. Sprawdza, czy plik1 jest starszy od pliku2. Sprawdza, czy wyraenia s rwne. Sprawdza, czy wyraenia s rne. Sprawdza, czy wyraenie ma dugo wiksz ni 0. Sprawdza, czy wyraenie ma zerow dugo. Sprawdza, czy wyraenie 1 jest mniejsze ni wyraenie 2. Sprawdza, czy wyraenie 1 jest wiksze ni wyraenie 2. Sprawdza, czy wyraenie 1 jest rwne lub wiksze ni wyraenie 2. Sprawdza, czy wyraenie 1 jest rwne lub mniejsze ni wyraenie 2.
Tablica 4.1. Tabela operatorw

4.4. Instrukcje i wyraenia


10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

73

# Wersja

bez

konstrukcji

else

i f warunek then instrukcje fi


# Wersja z if i then w jednej linii

i f warunek ; then instrukcje fi


# Wersja w jednej linii

i f warunek ; then i n s t r u k c j e ; e l s e i n s t r u k c j e ; f i
# Uzycie elif

i f warunek ; then instukcje e l i f warunek ; then instrukcje e l i f warunek ; then instrukcje else instrukcje fi

Skrypt 4.18. Skadnia instrukcji if Na przykadzie 4.18 wida kilka rnych wersji instrukcji if. Pierwsza z nich zawiera wszystkie sowa kluczowe w nowych liniach, a take instrukcje wykonywane, gdy warunek jest prawdziwy oraz instrukcje do wykonania, gdy warunek jest faszywy. Kolejne wersje to modykacje pierwszej. W drugiej wersji nie ma instrukcji, ktre wykonywane s, gdy warunek jest faszywy, czyli jednym sowem - czci else, ktra jest opcjonalna. Kolejne dwie wersje zawieraj kilka sw kluczowych w jednej linii. W tej sytuacji, przed kadym kolejnym sowem kluczowym trzeba umieci znak rednika ;. Na przykadzie s one umieszczone po warunku w wersji trzeciej oraz po warunku i instrukcjach w wersji czwartej. Dodatkow konstrukcj, z ktrej skorzystano na ostatnim przykadzie, jest elif, ktra jest odpowiednikiem else if. Wprowadza ona do jednej instrukcji if sprawdzanie wielu warunkw, czyli moliwo wyboru odpowiedniego wariantu przebiegu (zestawu instrukcji) w zalenoci od wyniku wielu warunkw logicznych.
1 2 3 4 5 6

# ! / bin / bash

i f [ x . / s k r y p t ] then ./ skrypt else

74
7 8

4. Skrypty BASH
echo " P e r m i s s i o n d e n i e d " fi

Skrypt 4.19. Przykad uycia wyraenia logicznego w instrukcji if W instrukcji sterujcej if moemy zaprezentowa przykadowe wykorzystanie wyrae logicznych. Spjrzmy na przykad 4.19. Instrukcja warunkowa sprawdza, czy istniej prawa do wykonania pliku skrypt, ktry znajduje si w aktywnym katalogu. Jeli prawa istniej, to wykonuje plik, a jeli nie to wywietla informacj o braku uprawnie. 4.4.5.2. Ptle while i until Istotnymi instrukcjami sterujcymi s ptle. Ich zadaniem jest wielokrotne wykonanie pewnego zestawu instrukcji. Ilo obrotw ptli zaley od jej warunku. Ptla while wykonuje polecenia, dopki jej warunek jest prawdziwy, za ptla until dziaa dokadnie odwrotnie, czyli wykonuje polecenia, dopki warunek jest faszywy. Skadnia obu ptli zostaa przedstawiona na 4.20.
1 2 3 4 5 6 7 8 9 10

# ! / bin / bash

while warunek do instrukcje done u n t i l warunek ; do instrukcje done

Skrypt 4.20. Skadnia ptli while i until. Przykady wykorzystania ptli przedstawiono na 4.21. Oba przykady dziaaj tak samo, czyli wywietlaj 10 razy cig znakw Odliczamy: x, gdzie x to liczba od 10 do 0. Rnica polega na konstrukcji warunku. Ptla while wykonuje instrukcj tak dugo, jak warto zmiennej NUMER wiksze lub rwna 0. Z drugiej strony ptla until wykonuje instrukcje a do momentu, kiedy warto zmiennej NUMER bdzie mniejsza lub rwna 0.
1 2 3 4 5 6 7 8 9 10 11 12

# ! / bin / bash

NUMER=10; while [ $NUMER ge 0 ] ; do echo " Odliczamy : $NUMER" NUMER =$ ( ($NUMER 1) ) done NUMER=10; u n t i l [ $NUMER l t 0 ] ; do echo " Odliczamy : $NUMER" NUMER =$ ( ($NUMER 1) )

4.4. Instrukcje i wyraenia


13

75

done

Skrypt 4.21. Przykady wykorzystania ptli while i until.

4.4.5.3. Ptla for Ptla for posiada dwie postacie. Pierwsza z nich operuje na wszystkich elementach przekazanej listy, za druga ma form zblion do ptli for z jzyka C. Skadnia pierwszej formy ptli for zostaa przedstawiona na 4.22.
1 2 3 4 5 6 7

# ! / bin / bash

f o r ZMIENNA i n LISTA ; do
# Tutaj # ktora jest dostepna zmienna kolejne ZMIENNA , wartosci z listy LISTA przechowuje

instrukcje ; done

Skrypt 4.22. Skadnia ptli for dla listy Lista wartoci jest list argumentw, ktra ma skadni analogiczn do argumentw wywoania skryptu. S to kolejne wartoci oddzielone znakiem spacji. Lista moe by rwnie zbudowana z elementw tablicy. Na przykadzie 4.23 przedstawiono kilka sposobw przekazywania listy do ptli for.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

# ! / bin / bash # Przekazywanie bezposrednie

f o r ZMIENNA i n j e d e n dwa t r z y c z t e r y ; do echo $ZMIENNA done


# Przekazywanie przez zmienna

LISTA=" a b c d" f o r ZMIENNA i n $LISTA ; do echo $ZMIENNA done


# Przekazywanie przez tablice

TABLICA=( a b c d ) f o r ZMIENNA i n $ {TABLICA [@] } ; do echo $ZMIENNA done


# Przekazywanie plikow ( pliki z biezacego katalogu )

f o r ZMIENNA i n ; do echo $ZMIENNA done


# Przekazywanie katalogu ) plikow ( pliki HTML z biezacego

76
26 27 28 29 30 31 32 33 34 35 36 37

4. Skrypty BASH
f o r ZMIENNA i n . html ; do echo $ZMIENNA done
# Przekazywanie wyniku polecenia

f o r ZMIENNA i n l s ; do echo $ZMIENNA done


# lub

f o r ZMIENNA i n $ ( l s ) ; do echo $ZMIENNA done

Skrypt 4.23. Rne rodzaje listy w ptli for Druga posta ptli for zostaa przedstawiona na 4.24. Instrukcja pocztkowa jest wykonywana tylko raz, przed uruchomieniem ptli. Nastpnie ptla jest wykonywana, dopki speniony jest warunek, a po kadym obrocie wykonywana jest instrukcja kocowa.
1 2 3 4 5

# ! / bin / bash

f o r ( ( i n s t r . poczatkowa ; warunek ; i n s t r . koncowa ) ) ; do instrukcje ; done

Skrypt 4.24. Skadnia zoonej ptli for Kilka przykadw wykorzystania zoonej ptli for zostao przedstawionych na 4.25.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

# ! / bin / bash

f o r ( ( i =0; i <=10; i=$ i +1) ) ; do echo " Wartosc z m i e n n e j i=" $ i done i =0 f o r ( ( ; i <= 1 0 ; ) ) ; do echo " Wartosc z m i e n n e j i=" $ i i=$ ( ( $ i +1) ) done f o r ( ( i =0, j =0; i <=10 && j <=10; i=$ i +1 , j=$ j +2) ) ; do echo " Wartosc z m i e n n e j i=" $ i echo " Wartosc z m i e n n e j j=" $ j done

Skrypt 4.25. Przykady wykorzystania zoonej ptli for

4.4. Instrukcje i wyraenia 4.4.5.4. Intrukcje break i continue Omawiajc ptle, warto przedstawi dwie instrukcje, ktre rwnie steruj przebiegiem ptli. Pierwsza z nich to break, ktra koczy dziaanie ptli i przechodzi do nastpnego polecenia za ptl. Druga to continue, ktra koczy aktualny obrt ptli i przechodzi na pocztek ptli, czyli do sprawdzenia warunku. Przykad zastosowania tych instrukcji przedstawiono na 4.26.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

77

# ! / bin / bash

f o r ( ( i =0; i <=10; i=$ i +1) ) ; do echo " Wartosc z m i e n n e j i=" $ i i f [ $ i = 5 ] ; then break ; fi done f o r ( ( i =0; i <=10; i=$ i +1) ) ; do i f [ $ ( ( $ i %2) ) = 0 ] ; then continue ; fi echo " Wartosc z m i e n n e j i=" $ i done

Skrypt 4.26. Przykady wykorzystania instrukcji break oraz continue

4.4.5.5. Instrukcja case Instrukcja case dziaa podobnie jak kaskada ifw, czyli instrukcja if z wieloma wariantami elif. Rnica polega na tym, e w case do wielu wariantw dopasowywane jest to samo wyraenie. Skadnia instrukcji case jest przedstawiona na 4.27. Wzorce maj budow analogiczn do wzorcw plikw, czyli moe to by zarwno konkretna warto, jak rwnie maska zawierajca znaki * i ?. Jeli instrukcja case dopasuje warto wyraenia do dowolnego wzorca, wykonane zostan instrukcje przypisane do tego wzorca. W przeciwnym wypadku wykonane zostan instrukcje domylne, oznaczone symbolem gwiazdki *).
1 2 3 4 5 6 7 8

# ! / bin / bash

case WYRAZENIE i n "WZORZEC1" ) i n t r u k c j e ; ; "WZORZEC2" ) i n t r u k c j e ; ; "WZORZEC3" ) i n t r u k c j e ; ; ) i n s t r u k c j e domyslne esac

Skrypt 4.27. Skadnia instrukcji case

78

4. Skrypty BASH Przykad wykorzystania instrukcji case zosta przedstawiony na 4.34. Wywietla on informacje o wszystkich plikach w biecym katalogu na podstawie ich rozszerzenia.
1 2 3 4 5 6 7 8 9 10 11 12

# ! / bin / bash

f o r PLIK i n ; do echo " P l i k : $PLIK" case $PLIK i n . t x t ) echo " P l i k t e k s t o w y " ; ; . sh ) echo " Skrypt BASH" ; ; . html ) echo " P l i k HTML" ; ; ) echo " Inny p l i k " esac echo done

Skrypt 4.28. Przykad wykorzystania instrukcji case

4.5. Przykady z ycia wzite


W tej sekcji przedstawimy kilka skryptw, ktre mog by przydatne dla uytkownikw systemu Linux. Pomog one rwnie zrozumie konstrukcje wyrae oraz instrukcji sterujcych, a take ich wsplne wykorzystanie.

Skrypt 4.29. Wywietlenie dowolnego przedziau linii w pliku


1 2 3 4 5 6

# ! / bin / bash

sed n $1 , $2p $3
# ! / bin / bash

ILE_LINII=$ ( ( $2$1 +1) ) head $2 $3 | t a i l $ILE_LINII

Skrypt 4.30. Usunicie plikw niewykonywalnych z katalogu podanego jako parametr


1 2 3 4 5 6 7 8 9 10

# ! / bin / bash

i f [ $ # ne 1 ] then echo " Niepoprawna l i c z b a argumentow . " echo " U z y c i e : $0 k a t a l o g " exit 1 fi i f [ d $1 ] then

4.5. Przykady z ycia wzite


11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

79

BIEZACY_KATALOG=pwd cd $1 for p l i k in do i f [ x $ p l i k ] then continue else rm $ p l i k f fi done cd $BIEZACY_KATALOG else echo " $1 n i e j e s t k a t a l o g i e m ! " exit 1 fi

Skrypt 4.31. Usunicie pustych plikw z katalogu podanego jako parametr oraz stworzenie listy usunitych plikow
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

# ! / bin / bash

i f [ $ # ne 2 ] then echo " Niepoprawna l i c z b a argumentow . " echo " U z y c i e : $0 k a t a l o g r a p o r t " exit 1 fi i f [ ! d $1 ] then echo " $1 n i e j e s t k a t a l o g i e m ! " exit 1 fi BIEZACY_KATALOG=pwd cd $1 f o r PLIK i n do i f [ [ ! s $PLIK ] ] && [ [ f $PLIK ] ] && [ [ ! L $PLIK ] ] then echo " U s u n i e t o p l i k $PLIK . " >> $BIEZACY_KATALOG/ $2 rm $PLIK f fi done cd $BIEZACY_KATALOG

80

4. Skrypty BASH Skrypt 4.32. Skrypt wczytuje liczby z pliku i wypisuje ich maksimum, minimum oraz sum
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

# ! / bin / bash

if [ $ # lt 1 ]; then echo " Podaj nazwe p l i k u ! " exit fi i f [ ! f " $1 " ] ; then echo " P l i k $1 n i e i s t n i e j e ! " exit fi ILOSC_WIERSZY= cat " $1 " | wc l i f [ $ILOSC_WIERSZY eq 0 ] ; then echo " P l i k $1 j e s t pusty ! " exit fi MINIMUM= sed n 1 , 1 p $1 MAXIMUM =$MINIMUM SUMA=0 while [ $ILOSC_WIERSZY g t 0 ] ; do LICZBA= sed n $ILOSC_WIERSZY, $ {ILOSC_WIERSZY}p $1 SUMA =$ [$SUMA+$LICZBA ] i f [ $LICZBA g t $MAXIMUM ] ; then MAXIMUM =$LICZBA e l i f [ $LICZBA l t $MINIMUM ] ; then MINIMUM=$LICZBA fi ILOSC_WIERSZY=$ [ $ILOSC_WIERSZY 1] done echo "Minimum : $MINIMUM" echo "Maksimum : $MAXIMUM" echo "Suma : $SUMA"

Skrypt 4.33. Skrypt oblicza liczb Fibbonacciego, ktrej numer jest podany jako parametr
1 2 3 4 5

# ! / bin / bash

i f [ $1 l t 1 ] ; then echo " P r o s z e podac numer w i e k s z y od z e r a ! " exit

4.5. Przykady z ycia wzite


6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

81

fi i f [ $1 l e 2 ] ; then echo 1 exit fi NR=$ [ $1 2] P=1 PP=1 while [ $NR g t 0 ] ; do TMP =$ ( ( $P+$PP) ) P=$PP PP=$TMP NR=$ ( ( $NR1 ) ) done echo $TMP

Skrypt 4.34. Zmiana liter z duych na mae w plikach znajdujcych si w katalogu podanym w parametrze
1 2 3 4 5 6 7 8 9 10 11 12 13 14

# ! / bin / bash

i f [ ! d $1 ] ; then echo " P l i k $1 n i e j e s t k a t a l o g i e m " exit 1 fi BIEZACY_KATALOG=pwd cd $1 f o r f i l e i n ; do mv $ { f i l e } echo $ { f i l e } | t r "AZ" "az " done cd $BIEZACY_KATALOG

Rozdzia 5
Administracja serwerem WWW - Apache

84

5. Administracja serwerem WWW - Apache Jednym z najwaniejszych zada dla administratora systemu Linux jest konguracja serwera WWW. Zadanie to dotyczy prawie kadego administratora, poniewa praktycznie w kadej organizacji jest uruchomiony Web serwer. Poprawna konguracja serwera nie ogranicza si do otwarcia odpowiednich portw na zaporze ogniowej, naley dokadnie przeanalizowa parametry wydajnociowe oraz przede wszystkim zagadnienia zwizane z jego bezpieczestwem. Dalsza konguracja serwera bdzie prezentowana dla systemu Linux, dystrybucji Ubuntu 11.04.

5.1. Instalacja serwera Apache


W pierwszym kroku naley zainstalowa Web serwer. W systemach z pakietami typu deb oraz poprawnie skongurowan aplikacj apt naley wykona nastpujc komend:

# apt-get install apache2


Rysunek 5.1. Instalacja apache2

Werykacj zainstalowanej wersji serwera mona wykona przy pomocy komendy: # apt-cache search apache2
Rysunek 5.2. Werykacja zainstalowania pakietu apache2

lub # dpkg --list | grep apache2


Rysunek 5.3. Werykacja zainstalowania pakietu apache2 - dpkg

Z zainstalowaniem serwera apache wie si utworzenie szeregu plikw i katalogw (ktre utworzone s automatycznie w procesie instalacji). W tabeli 5.1 przedstawione s podstawowe pliki oraz katalogi. Standardowe ustawienie serwera apache powoduje, e po wykonaniu komend instalacyjnych serwer automatycznie jest uruchamiany i umoliwiony jest dostp do niego przez lokalny interfejs. Na rysunku 5.4 przedstawiona jest strona startowa serwera apache2.

5.1. Instalacja serwera Apache

85

Rysunek 5.4. Strona startowa serwera apache2 Tablica 5.1. Pliki oraz katalogi powizane z serwerem Apache

Nazwa Pliku/Katalogu /etc/apach2 /usr/sbin/apache2 /etc/apache2/apache2.conf /etc/apache2/mods-available /etc/apache2/mods-enabled

/etc/apache2/conf.d

/etc/apache2/sites-available

/etc/apache2/sites-enabled

/var/run/apache2.pid /var/log/apache2 /var/www/ /etc/apache2/envvar

Opis katalog zawierajcy pliki konguracyjne serwera plik binarny serwera gwny plik konguracyjny serwera dostpne moduy serwera wczone moduy serwera jako linki symboliczne do dostpnych moduw katalog zawierajcy pliki konguracyjne serwera przeznaczony do dodatkowej konguracji dostpne dodatkowe konguracje systemu, pocztkowo zawierajce konguracje wirtualnych hostw wczone dodatkowe konguracje systemu jako linki symboliczne do plikw zawartych w katalogu sites-available numer id procesu zapisy kontrolne serwera apache (logi) katalog stron html zmienne rodowiskowe serwera

86

5. Administracja serwerem WWW - Apache

5.2. Gwny plik konguracyjny - apache2.conf


Podstawowa konguracja Web serwera sprowadza si do edycji zmiennych okrelonych w pliku apache2.conf. W dalszej czci zostan omwione najbardziej istotne parametry konguracyjne 5.2.1. ServerRoot Jest to zmienna okrelajca katalog zawierajcy plik konguracyjne Web serwera 5.5 . Standardowo jest to /etc/apache2. Jeeli katalog ten zostanie zmieniony wwczas naley przekopiowa wszystkie plik i katalogi z katalogu domylnego.

Rysunek 5.5. Zmienna ServerRoot

5.2.2. MPM - Modu przetwarzania rwnolegego Apache HTTP Server ma by wydajny i elastyczny, ktry moe pracowa na bardzo wielu platformach w wielu rnych rodowiskach. Apache zbudowany jest moduowo. Konstrukcja ta umoliwia administratorowi wybr tych funkcji, ktre zostan wczone do serwera. Wybr ten naley dokona poprzez wybranie moduw apacha podczas jego kompilacji lub w czasie wykonywania. Jednym z moduw jest modu MPM (ang. Multi-Processing Modules), ktry jest odpowiedzialny za rwnolege przetwarzanie zapyta. W ramach tego gwnego moduu mona wyrni jego trzy odmiany: prefork, worker, event. Prefork odwouje si do serwera WWW, ktry obsuguje dania w sposb podobny do Apache 1.3. Jest to najlepszy MPM sucy do izolowania da do serwera, dziki czemu kade

5.2. Gwny plik konguracyjny - apache2.conf realizowane danie nie wpywa jakiekolwiek inne. Worker realizuje serwera jako proces multi-hybrydowy oraz wielowtkowy. Dziki uyciu wtkw do realizowania da, serwer jest w stanie obsuy du liczb da przy mniejszym zuyciu zasobw systemowych ni w przypadku ich realizacji, bazujc wycznie na procesach. Event ma na celu umoliwienie realizacji wikszej iloci da w sposb jednoczesny. Wykonywane to jest przy pomocy wtkw pomocniczych, ktre wykonuj cz oblicze za wtki, ktre przekazay do nich zadanie. Taki podzia zada pozwala na obsug nowych ada zwalniajc gwne wtki. Kada z nich jest deniowana przy pomocy poniej opisanych parametrw oraz przedstawionych na rysunku 5.6: StartServers - parametr ustawia liczb procesw potomnych tworzonych w czasie uruchamiania; liczba procesw jest dynamicznie kontrolowana w zalenoci od obcienia, z reguy nie ma powodw do zmiany tego parametru; MinSpareThreads - parametr wyznaczajcy minimaln liczb bezczynnych procesw potomnych, ktre nie przetwarzaj da; MaxSpareThreads - parametr wyznaczajcy maksymaln liczb bezczynnych procesw potomnych, ktre nie przetwarzaj da. ThreadLimit - parametr ten okrela maksymaln skongurowan warto parametru ThreadsPerChild na czas trwania procesu Apache; ThreadsPerChild - parametr ten okrela liczb wtkw tworzonych przez kady proces potomny; wtki te tworzone s na starcie i w innym czasie nie s tworzone nowe; MaxClients - parametr ten ustawia limit liczby jednoczesnych da, ktre bd obsuone przez serwer; wszelkie prby poczenia ponad ustalony limit bd ustawiane w kolejce; MaxRequestsPerChild - parametr ten wyznacza limit na liczb zapyta, ktre zostan obsuone przez proces potomny.

87

5.2.3. Nazwa uytkownika oraz grupy Kolejnym parametrem okrelanym w gwnym pliku konguracyjnym jest nazwa uytkownika oraz grupy powizan z serwerem Apache (Rys.5.7): User ${APACHE_RUN_USER} - nazwa uytkownika; Group ${APACHE_RUN_GROUP} - nazwa grupy. W wersji apache2, parametry te s okrelane w pliku /etc/apache2/envvars (Rys.5.8), gdzie znajduj si wszelkie zmienne rodowiskowe powizane z serwerem: export APACHE_RUN_USER=www-data - przypisanie wartoci (www-data) do zmiennej okrelajcej nazw uytkownika reprezentujcego serwer apache oraz eksport danych; export APACHE_RUN_GROUP=www-data - przypisanie wartoci (www-data) do zmiennej okrelajcej nazw uytkownika reprezentujcego serwer apache.

88

5. Administracja serwerem WWW - Apache

Rysunek 5.6. Zminne do moduw MPM

Rysunek 5.7. Zmienne serwera apache2

5.2.4. Plik .htaccess Plik .htaccess umoliwiaj dokonywanie zmian konguracyjnych dla poszczeglnych katalogw. Plik zawierajcy jeden lub wicej dyrektyw konguracyjnych jest umieszczony w okrelonym katalogu dokumentw, wtedy dyrektywy maj zastosowanie do tego katalogu i wszystkich jego podkatalogw. Przykadowa kongu-

5.2. Gwny plik konguracyjny - apache2.conf

89

Rysunek 5.8. Plik konguracyjny envvars

racja tego pliku moe dotyczy utworzenia systemu autoryzacji dostpu do danego drzewa katalogu realizowanego przez serwer Apache. W tym celu naley utworzy plik .htaccess i umieci w katalogu, do ktrego dostp bdzie poprzedzany autoryzacj przy pomocy nazwy uytkownika i hasa. Przykadowa budowa tego pliku przedstawiona jest niej. AuthType Basic AuthName "Podaj haslo - strefa 2" AuthUserFile ".htpas" require valid-user
Rysunek 5.9. Plik konguracyjny .htaccess

Poszczeglne zmienne okrelaj: AuthType - rodzaj autoryzacji; AuthName - informacja, ktra bdzie wywietlana w oknie w ktrym naley poda nazw uytkownika i haso; AuthUserFile - nazwa pliku, w ktrym zawarte s dane dotyczce autoryzacji, czyli nazwa uytkownika oraz wynik funkcji jednokierunkowej z hasa; require - wybr uytkownikw, ktrzy mog uzyska dostp do zdeniowanego zasobu.

90

5. Administracja serwerem WWW - Apache Poprawna konguracja dostpu do zasobw kontrolowanych przez plik .htaccess wymaga modykacji jeszcze jednego pliku konguracyjnego conf.d/security. W pliku tym naley okreli konkretn polityk dostpu, co bdzie wyjtkiem w skali caego systemu. Jeeli polityka globalna jest zgodna z polityk, jaka wymagana jest w przypadku pliku .htaccess, wwczas nie trzeba deniowa wyjtku. Na Rys. 5.10 przedstawiona jest przykadowa konguracja a poniej opisane s poszczeglne zmienne.

AllowOverride - kiedy serwer znajdzie plik .htaccess (jak okrelono w AccessFileName) to musi wiedzie, ktre dyrektywy zadeklarowane w tym pliku mog uniewani wczeniejsze dyrektywy konguracyjne; Order - kolejno interpretacji logicznej systemu kontroli dostpu; Allow from - parametr okrelajcy, ktre hosty mog uzyska dostp do obszaru serwera; dostp moe by kontrolowany przez hosta, adres IP, zakres adresw IP lub innych cech charakterystycznych przechowywanych w zmiennych rodowiskowych systemu.

Rysunek 5.10. Plik konguracyjny conf.d/security

5.2.5. Zapisy kontrolne Poprawne dziaanie serwera WWW jest monitorowane dziki wykonywanym zapisom kontrolnym. Poziom szczegowoci jest okrelany w parametrze LogLevel (Rys.5.11). Parametr ten moe przyjmowa nastpujce wartoci (uszeregowane od najmniej szczegowego): debug, info, notice, warn, error, crit, alert, emerg. Miejsce przechowywania dziennika zapisw kontrolnych okrelona jest w parametrze ErrorLog. W przedstawionym na Rys.5.11 przykadzie cieka okrelona jest w zmiennej systemowej ${APACHE_LOG_DIR}, ktra okrelona jest w pliku envvar (Rys.5.8).

5.2. Gwny plik konguracyjny - apache2.conf

91

Rysunek 5.11. Plik konguracyjny apache2 - zapisy kontrolne, dyrektywa include

5.2.6. Dyrektywa Include Gwnym plikiem konguracyjnym serwera apache2 jest plik apache2.conf. Wszelka konguracja moe by okrelona w tym pliku, ale dla przejrzystoci zostay utworzone osobne pliki konguracyjne, scharakteryzowane ze wzgldu na deniowane tam funkcjonalnoci. Ich charakterystyka podana jest w tabeli 5.1 a przykad ich denicji na Rys.5.11. 5.2.7. Zarzdzanie moduami Lista dostpnych moduw serwera apache2 okrelona jest w katalogu mods-available (Rys.5.12). Lista aktualnie wczonych moduw zawarta jest w katalogu mods-enabled, zawiera ona linki symboliczne do moduw okrelonych w katalogu mods-available.

92

5. Administracja serwerem WWW - Apache

Rysunek 5.12. Lista dostpnych moduw

Przykadowe wpisy wygldaj nastpujco:

alias.conf -> ../mods-available/alias.conf alias.load -> ../mods-available/alias.load auth_basic.load -> ../mods-available/auth_basic.load authn_file.load -> ../mods-available/authn_file.load authz_default.load -> ../mods-available/authz_default.load authz_groupfile.load -> ../mods-available/authz_groupfile.load authz_host.load -> ../mods-available/authz_host.load authz_user.load -> ../mods-available/authz_user.load autoindex.conf -> ../mods-available/autoindex.conf autoindex.load -> ../mods-available/autoindex.load
Rysunek 5.13. Lista dostpnych moduw

Mona j rwnie wywietli przy pomocy komendy apache2ctl -M. Dodatkowe moduy do pracujcego serwera apache2 mona wczy przy pomocy polecenia a2enmod. Polecenie to w rzeczywistoci tworzy dowizanie symboliczne do plikw znajdujcych si w katalogu mods-available. Nazwy te s identyczne jak nazwy prawdziwych moduw. W rzeczywistoci dopiero pliki te zawiera ciek do moduw znajdujcych si w systemie. Budowa tych plikw przedstawiona jest poniej.

5.3. Zaawansowana konguracja root@sec-lab2:/etc/apache2/mods-available# apache2ctl -M apache2: Could not reliably determine the servers fully \\ qualified domain name, using 127.0.1.1 for ServerName Loaded Modules: core_module (static) log_config_module (static) logio_module (static) mpm_worker_module (static) http_module (static) so_module (static) alias_module (shared) auth_basic_module (shared) authn_file_module (shared) authz_default_module (shared) authz_groupfile_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) Syntax OK
Rysunek 5.14. Inna metoda wywietlania moduw apacha2

93

root@sec-lab2:/etc/apache2/mods-available# cat proxy.load LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so


Rysunek 5.15. Zawarto pliku wskazujcego ciek moduu apacha2

5.3. Zaawansowana konguracja


W dalszej czci ksiki zostan przedstawione zaawansowane zagadnienia zwizane z serwerem apache2. Z listy wielu ciekawych zagadnie zostay wybrane dwa: bezpieczestwo oraz wirtualne hosty. Zagadnienie bezpieczestwa serwera apache2 jest bardzo zoone i jego opis moe by przedmiotem osobnej ksiki. Z tego powodu w ramach tej ksiki zostanie omwione jedno zagadnienie, mianowicie wsparcie protokou TLS przez serwer apache2. 5.3.1. Wirtualne hosty Wirtualne hosty s niezwykle przydane w przypadku serwerw WWW. Dziki nim mona np. udostpnia na jednym serwerze, o konkretnym adresie IP, kilka witryn WWW, gdzie kada z nich bdzie dostpna pod inn domen. Plikiem odpowiedzialnym za konguracj wirtualnych hostw jest plik /etc/apache2/sites-available/default. Poniej przedstawiona jest zawarto tego pliku.

94

5. Administracja serwerem WWW - Apache root@sec-lab2:/etc/apache2/sites-available# cat default <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
Rysunek 5.16. Plik konguracyjny wirtualnego hosta

5.3. Zaawansowana konguracja Podstawowa konguracja wirtualnego hosta jest bardzo prosta, wystarczy doda do pliku /etc/apache2/sites-available/default wpisy podane niej. <VirtualHost www.tls-demo.pl:80> DocumentRoot /var/www/tls-demo/ ServerName www.tls-demo.pl </VirtualHost>
Rysunek 5.17. Konguracja wirtualnego hosta

95

W tym przypadku serwer WWW bdzie kierowa wszelki ruch kierowany na port 80 i o adresie www.tls-demo.pl do katalogu gwnego tego wirtualnego hosta. Katalog gwny wirtualnego hosta jest okrelany jak warto parametru /var/www/tls-demo/. 5.3.2. Bezpieczestwo WWW - protok TLS Tematem tego podrozdziau jest konguracja serwera apache tak, eby wspiera poczenia realizowane przy pomocy protokou TLS. W pierwszym kroku naley wczy modu ssl, ktry jest odpowiedzialny za realizacj pocze (a2enmod ssl). Nastpnie naley zrestartowa serwer apache2 (/etc/init.d/apache2 restart). Po tych czynnociach serwer apache zacz nasuchiwa na poczenia nie tylko na porcie 80, ale rwnie na porcie 443 (Przykad poniej). root@sec-lab2:/etc/apache2# a2enmod ssl Enabling module ssl. See /usr/share/doc/apache2.2-common/README.Debian.gz on how to \\ configure SSL and create self-signed certificates. Run /etc/init.d/apache2 restart to activate new configuration! root@sec-lab2:/etc/apache2# /etc/init.d/apache2 restart * Restarting web server apache2 root@sec-lab2:/etc/apache2# netstat -ltn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN

Rysunek 5.18. Wczanie obsugi protokou TLS

Prezentowany przykad bdzie dotyczy konguracji obsugi protokou TLS dla wirtualnego hosta. W przypadku konguracji tylko gwnego serwera naley kongurowa wycznie standardowe pliki.

96

5. Administracja serwerem WWW - Apache W pierwszym kroku zostanie utworzony wirtualny host www.tls-demo.pl, ktry bdzie odnosi si do witryny umieszczonej w katalogu /var/www/tls-demo. W tym celu warto uy wzoru standardowej konguracji hosta wirtualnego wspierajcego protok TLS. Standardowo, serwer apache2 przechowuje ten wzr w pliku /etc/apache2/sites-available/default-ssl i dotyczy on standardowej strony obsugiwanej przez serwer. Dla wirtualnego hosta tworzymy kopi pliku /etc/apache2/sites-available/default-ssl i zapisujemy j np. jako /etc/apache2/sites-available/tls-demo-ssl. W pliku tym naley ustawi adres/nazw wirtualnego hosta, ktry bdzie nasuchiwa na porcie 443 (<VirtualHost www.tls-demo.pl:443>). Kolejnym kluczowym parametrem jest okrelenie katalogu gwnego witryny przypisanej do zdeniowanego wirtualnego hosta (DocumentRoot /var/www/tls-demo). W podstawowej konguracji naley zmieni jeszcze dwa parametry (ServerAdmin oraz ServerName). W dalszej czci rozdziau przedstawiona zostaa konguracja dla wirtualnego hosta www.tls-demo.pl (Rys. 5.19, 5.20 i 5.21).

<IfModule mod_ssl.c> <VirtualHost www.tls-demo.pl:443> ServerAdmin webmaster@tls-demo.pl ServerName www.tls-demo.pl DocumentRoot /var/www/tls-demo <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/tls-demo/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
Rysunek 5.19. Konguracja wirtualnego hosta www.tls-demo.pl - cz 1

Nastpnie naley wyczy obsug protokou TLS dla ustawie domylnych. Domyle ustawienia znajduj si w pliku default-ssl. Wyczy obsug danej strony lub wirtualnego hosta zdeniowanej w plikach konguracyjnych mona przy pomocy polecenia a2dissite. Poniej przedstawione jest wyczenie domylnej obsugi protokou TLS (Rys. 5.22). W nastpnym kroku naley wczy obsug protokou TLS dla wirtualnego

5.3. Zaawansowana konguracja <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory>
Rysunek 5.20. Konguracja wirtualnego hosta www.tls-demo.pl - cz 2

97

SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> <IfModule>

Rysunek 5.21. Konguracja wirtualnego hosta www.tls-demo.pl - cz 3

hosta zdeniowanego wczeniej. W tym celu posuymy si poleceniem a2ensite. Po wczeniu domy naley aktywowa now konguracj (Rys. 5.23). Jeeli konguracja wykonywana jest lokalnie, wwczas naley przypisa domenie

98

5. Administracja serwerem WWW - Apache root@sec-lab2:/etc/apache2/sites-available# a2dissite default-ssl Site default-ssl already disabled
Rysunek 5.22. Wycznie domylnej obsugi protokou TLS

root@sec-lab2:/etc/apache2/sites-available# a2ensite tls-demo-ssl Enabling site tls-demo-ssl. Run /etc/init.d/apache2 reload to activate new configuration!
Rysunek 5.23. Wczenie obsugi domeny tls-demo-ssl

adres IP, komputera na ktrym przeprowadzamy konguracj. Wpis ten naley doda do pliku konguracyjnego (Rys. 5.24). 192.168.0.121 www.tls-demo.pl
Rysunek 5.24. Wpis w pliku hosts

Jeeli konguracja zostaa przeprowadzano poprawnie, to serwer WWW bdzie realizowa protok TLS w roli serwera. Istotnym elementem protokou TLS jest moliwo werykacji tosamoci witryny, z ktr si czymy. Dzieje si to przy pomocy certykatw kluczy publicznych uywanych w infrastrukturze klucza publicznego. Domylnie podczas instalacji systemu Linux czsto tworzone s testowe certykaty, ktre zawieraj pole okrelone przez dan dystrybucj linuxa. W przypadku realizacji protokou TLS dla serwera WWW istotnym elementem jest utworzenie certykatu, ktry bdzie zawiera dane identykujca konkretn domen. W tym celu naley wykorzysta bibliotek openssl do utworzenia stosownych certykatw. Wszelkie parametry, ktre moe zawiera certykat klucza publicznego, mona poda z rcznie utworzonego pliku konguracyjnego. Niestety, rczna konguracja jest zoonym procesem. Istnieje moliwo wygenerowania klucza prywatnego wraz z samopodpisanym certykatem w sposb automatyczny. W tym celu naley zainstalowa pakiet ssl-cert. Dalej zaprezentowane zostao sprawdzenie, czy ju jest zainstalowany oraz polecenie, ktre pobierze pakiet z repozytorium (Rys. 5.25).

root@sec-lab2:# dpkg --list | grep ssl-cert ii ssl-cert apt-get install ssl-cert


Rysunek 5.25. Pobieranie pakietu ssl-cert

1.0.28

5.3. Zaawansowana konguracja Pakiet ten zawiera plik konguracyjny /usr/share/ssl-cert/ssleay.cnf, w ktrym mona okreli podstawowe pola, ktre bdzie zawiera certykat. Dalej zaprezentowana zostaa zawarto tego pliku, szczegy mona znale w dokumentacji [3] (Rys. 5.26). root@sec-lab2:# cat /usr/share/ssl-cert/ssleay.cnf # # SSLeay example configuration file. # RANDFILE [ req ] default_bits default_keyfile distinguished_name prompt policy = /dev/urandom

99

= = = =

2048 privkey.pem req_distinguished_name no = policy_anything

[ req_distinguished_name ] commonName

= @HostName@

Rysunek 5.26. Zawarto pliku ssleay.cnf

W dalszej czci konguracji zostanie utworzona para: klucz prywatny - samopodpisany certykat klucz publicznego. W tym celu naley wykona polecenie make-ssl-cert wraz z dwoma parametrami. Pierwszy wskazuje plik konguracyjnym, na podstawie, ktrego zostanie wygenerowana para kluczy (/usr/share/ssl-cert/ssleay.cnf) oraz miejsce, gdzie bdzie utworzony plik z kluczami (/etc/ssl/private/www.tls-demo.crt) (Rys. 5.27). root@sec-lab2:# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf \\ /etc/ssl/private/www.tls-demo.crt
Rysunek 5.27. Tworzenie certykatu dla witryny tls-demo.pl

Wykonanie tego polecenia spowoduje wywietlenie si okna (Rys.5.28), w ktrym mamy wpisa adres witryny, dla ktrej tworzony jest wanie certykat. Tak utworzona para kluczy, bdzie znajdowaa si w jednym pliku, ktry zosta podany. Wygenerowane klucze s wedug standardu PEM, poniej przedstawiony jest przykad (Rys. 5.29). Nie jest zalecane, eby klucze te byy przechowywane w jednym pliku, dlatego naley je rozdzieli. W tym celu mona skopiowa oraz przenie plik z kluczami a nastpnie przy pomocy edytora utworzy pliki wycznie z pojedynczymi kluczami. Czynnoci te zaprezentowane s poniej (Rys. 5.30).

100

5. Administracja serwerem WWW - Apache

Rysunek 5.28. Okno programu make-ssl-cert

root@sec-lab2:# cat /etc/ssl/private/www.tls-demo.crt -----BEGIN RSA PRIVATE KEY----MIIEowIBAAKCAQEAvr9V6dTZUi2cyxs1KU1WkvwDBTDQRDkefaB8ahV6ty5ZwqCh z0Yd5JjgvmrSSYtAhBr9aERtGcSgwsW798pWaxBzBCH6j9RiPEy+SEZ8g6eeFuwK .... .... Rk4QcOsAxZYVa6S9bl3Hg0RMot0gcdplh9sJ57hIL8SUcZKt3wjYmaB1sMdAhJVJ J9JYZFKIN0b7YBDjQhisrLw2eaWXzg5DvpFKfqTLd/9AOylnMkdC -----END RSA PRIVATE KEY---------BEGIN CERTIFICATE----MIICsDCCAZgCCQCxvsmeOD742TANBgkqhkiG9w0BAQUFADAaMRgwFgYDVQQDEw93 d3cudGxzLWRlbW8ucGwwHhcNMTIwMzEzMTQ0MDAyWhcNMjIwMzExMTQ0MDAyWjAa .... .... MjyhHIeRobWRRmkdg5H48KFDm4qOfNK7YwCsyzV3c5TY7sehnBefc/ceI5Va/mKE afGl38Q/cSXgGWDF8gkHzvQ/+Ao= -----END CERTIFICATE----Rysunek 5.29. Zawarto wygenerowane pliku z kluczami

Plik z kluczem prywatnym powinien by zabezpieczony przed niepowoan modykacj. Naley ustawi prawa wycznie dla waciciela pliku, ktrym jest root (Rys. 5.31). Ostatni czynnoci zwizan z kluczami, jest modykacja pliku /etc/apache2/sites-available/tls-demo-ssl w ktrym znajduj si parametry okrelajce ich umiejscowienie w systemie. Parametry te wraz z ich wartociami dla omawianego przykadu, przedstawione s poniej (Rys. 5.32). Po dokonaniu zmian w konguracji, apache2 musi j ponownie j wczyta (Rys. 5.33).

5.3. Zaawansowana konguracja root@sec-lab2:# cp /etc/ssl/private/www.tls-demo.crt \\ /etc/ssl/private/www.tls-demo.key root@sec-lab2:# mv /etc/ssl/private/www.tls-demo.crt \\ /etc/ssl/certs/www.tls-demo.pem root@sec-lab2:# vim /etc/ssl/private/www.tls-demo.key root@sec-lab2:# vim /etc/ssl/certs/www.tls-demo.pem
Rysunek 5.30. Przenoszenie kluczy do osobnych plikw

101

root@sec-lab2:# chmod 600 /etc/ssl/private/www.tls-demo.key


Rysunek 5.31. Zmiana prawa dostpu do klucza

root@sec-lab2:# vim /etc/apache2/sites-available/tls-demo-ssl SSLCertificateFile /etc/ssl/certs/www.tls-demo.pem SSLCertificateKeyFile /etc/ssl/private/www.tls-demo.key


Rysunek 5.32. Okrelenie lokalizacji kluczy w systemie

root@sec-lab2:# /etc/init.d/apache2 reload


Rysunek 5.33. Ponowne wczytanie konguracji przez serwer apache2

Tak skongurowany serwer WWW bdzie obsugiwa protok TLS w roli serwera. Jeeli w przegldarce internetowej zostanie wpisany adres domeny przypisanej do rozwaanego wirtualnego hosta, wwczas bdzie mona zwerykowa tosamo witryny, z ktr zostao nawizane poczenie 5.34. Warto doda, e w przypadku samopodpisanych certykatw, tosamo witryny jest stwierdzana przez stron, ktra sama podpisaa certykat. eby zagwarantowa wysoki poziom zaufania, naley tworzy certykaty klucz publicznych werykowanych przez zaufane Centra Autoryzacji [4].

102

5. Administracja serwerem WWW - Apache

Rysunek 5.34. Certykat witryny www.tls-demo.pl

Rozdzia 6
Zapora ogniowa oraz translacja adresw sieciowych - iptables

104

6. Zapora ogniowa oraz translacja adresw sieciowych - iptables Zagadnienia zwizane z zapora ogniow oraz translacj adresw sieciowych s kluczowe w przypadku chci zagwarantowania odpowiedniego poziomu bezpieczestwa serwerw sieciowych. W literaturze jest wiele ksiek omawiajcych podstawy budowy regu w oparciu o iptables [5]. Wszelkie szczegy mona znale rwnie w podrcznikach systemowych (manualach), opisujcych zagadnienia ltracji pakietw oraz translacji adresw sieciowych [5]. W poniszym rozdziale zostan omwione zasady budowania regu w oparciu o iptables stosowane do ltrowania pakietw oraz translacji adresw sieciowych (NAT). W dalszej czci rozdziau znajduj si zadania wraz z rozwizaniami dotyczce problematyki ltrowania pakietw.

6.1. Iptables - podstawy


Iptables jest programem, za pomoc ktrego mona utworzy reguy ltrowania pakietw, ktre zapisywane s w tablicy znajdujcej si w jdrze systemu. Filtrowanie IP jest mechanizmem decydujcym o tym, ktre pakiety IP naley przyj do systemu, a ktre naley odrzuci lub porzuci. Przy pomocy regu iptables mona deniowa wiele kryteriw okrelajcych ltrowanie pakietw. Podstawowe to np.: typ protokou: TCP,UDP, ICMP; numer portu (dla TCP/UDP); typ pakietu: SYN/ACK, ICMP Echo request; adres rdowy pakietu; adres docelowy pakietu.

W przypadku, gdy w systemie wczone jest ltrowanie pakietw, wwczas pakiety przychodzce/wychodzce za porednictwem dowolnego interfejs sieciowego s wczeniej sprawdzane. Polega to na tym, e na poziomie jdra systemu znajduj si reguy, ktre tworz pewien wzorzec majcy na celu wychwyci konkretne rodzaje pakietw. Nastpnie wykonywan s przewidziane dla konkretnych pakietw akcje. Na Rys. 6.1 przedstawione jest schematyczne umiejscowienie tworzonych regu przy pomocy iptables. Wszystkie pakiety przechodzce przez dowolny interfejs sieciowy s wczeniej ltrowane.

Rysunek 6.1. Tablica regu

6.1. Iptables - podstawy Zasada ltrowania przedstawiona jest na Rys. 6.2. Reguy ltrujce, znajdujce si w jdrze systemu, umieszczone s w kolejnoci ich wykonania/uruchomienia. Tak utworzona struktura tworzy kolejno regu. Dla przykadu, pakiet przychodzcy do systemu jest sprawdzany pod ktem zgodnoci z reguami znajdujcymi si w jdrze w kolejnoci ich wykonania. To jest bardzo istotne, poniewa w przypadku gdy pakiet bdzie pasowa do reguy o numerze 1, wwczas zostanie wykonana przewidziana w regule akcja i nastpne reguy nie bd ju sprawdzane (wyjtkiem s reguy polityki domylnej oraz zapisw kontrolnych). Zasada ta przedstawiona jest na Rys.6.2.

105

Rysunek 6.2. Zasada ltrowania pakietw

6.1.1. Skadnia iptables - tablica lter Iptables posiada dwie podstawowe tablice regu. Pierwsza lter (domylna) zawiera wbudowane acuchy INPUT (pakiety przychodzce) i OUTPUT (pakiety wychodzce) oraz FORWARD (dla pakietw przekazywanych przez hosta). Druga tablica nat dotyczy regu stosowanych dla pakietw, dla ktrych dokonywana jest translacja adresw IP (ang. Network Address Translation - NAT). Tablica nat zawiera acuchy PREROUTING (interpretowane przed decyzj routingu), POSTROUTING (interpretowane po decyzji routingu) oraz OUTPUT (dla pakietw wychodzcych). Reguy ltrowania budowane s przy pomocy schematu, ktry przedstawiony jest poniej. W pierwszej kolejno zostanie przedstawiony schemat dla tablicy lter. Przykadowa regua ltrowania pakietw polegajca na akceptowaniu pocze ze zdalnymi serwerami ssh przedstawiona jest poniej.

106

6. Zapora ogniowa oraz translacja adresw sieciowych - iptables iptables -A/-I ... -i/-o ... -p ... (--syn / ! syn ) \\ -s ... --sport ... -d ... --dport ... -j ... -A/-I : dodanie acucha na koniec tabeli (A) lub na pocztek (I) Rodzaj acuchw:INPUT,OUTPUT,FORWARD -i/-o : wskazujemy na rodzaj interfejsu, jeeli -i to pakiet przychodzcy, jeeli -o to pakiet wychodzcy -p : rodzaj protokou (TCP/UDP/ICMP) (- -syn / !--syn ) : opcje opisujce stan poczenia -s : adres IP rdowy (nadawcy) --sport : port rdowy (nadawcy) -d : adres IP odbiorcy --dport : port odbiorcy -j : rodzaj akcji (ACCEPT, DROP, REJECT, LOG) ACCEPT DROP REJECT LOG : : : : pakiet zostanie zaakceptowany pakiet zostanie porzucony pakiet zostanie odrzucony na podstawie pakietu zostanie wykonany zapis kontrolny

Rysunek 6.3. Budowa regu - tablica lter

iptables -A OUTPUT -o eth0 -p tcp s 192.168.1.1 \\ --sport 1024:65535 -d 0/0 --dport 22 -j ACCEPT iptables -A INPUT -i eth0 -p tcp !--syn -s 0/0 \\ --sport 22 -d 192.168.1.1 --dport 1024:65535 -j ACCEPT

Rysunek 6.4. Regua iptables - Akceptowanie pocze w roli klienta z serwerami ssh

Opisywany do tej pory sposb ltrowania pocze nazywany jest czsto jako ltrowanie statyczne. W takim podejciu twrca zapory ogniowej musi przewidzie wszelkie pakiety, ktre bd wymieniane w przypadku udostpnienia usugi sieciowej. Istnieje moliwo zastosowania tzw. ltrowania dynamicznego, ktre polega na tym, e jdro systemu bdzie samodzielnie ledzio stan poczenia, ktre zostao zaakceptowane. W tym celu naley wykorzysta dodatkowy modu dostpny dla programu iptables, ktry pozwoli ledzi stan poszczeglnych pocze. Jest to modu state, ktry pozwala analizowa stan poczenia ledzony przy pomocy moduu systemowego ip_conntrack. Podanie w regule opcji -m state udostpnia dodatkow opcj --state, ktrej parametrem s moliwe stany poczenia. Stany pocze mog by nastpujce: NEW (NOWY) - pakiet, ktry tworzy nowe poczenie;

6.1. Iptables - podstawy ESTABLISHED (NAWIZANY) - pakiet ktry naley do istniejcego poczenia (np. pakiet odpowiedzi, lub pakiet wychodzcy w poczeniu, ktre otrzymao ju odpowied); RELATED (ZWIZANY) - pakiet, ktry jest zwizany z istniejcym poczeniem, ale nie jest jego czci; poczenie ftp dla danych; INVALID (BDNY) - pakiet, ktry nie moe by zidentykowany (mog to by wyczerpanie si pamici, lub bdy ICMP, ktre nie nale do adnego znanego poczenia). Regua ltrowania pakietw polegajca na akceptowaniu pocze ze zdalnymi serwerami ssh ale realizowana przy pomocy ledzenia stanu poczenia przedstawiona jest poniej.

107

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -j ACCEPT \\ -m state --state NEW iptables -A INPUT -p tcp -j ACCEPT -m state --state ESTABLISHED iptables -A OUTPUT -p tcp -j ACCEPT -m state --state ESTABLISHED

Rysunek 6.5. Regua iptables (stan poczenia) - Akceptowanie pocze w roli klienta z serwerami ssh

6.1.2. Skadnia iptables - tablica nat Tablica nat odpowiedzialna jest za przechowywanie regu dotyczcych translacji adresw IP. Rozrniamy dwa rodzaje translacji NAT: rdowy NAT (SNAT) i docelowy NAT (DNAT). SNAT ma miejsce wtedy, gdy zostaje zmieniany adres rdowy pierwszego pakietu, czyli kiedy zmieniany jest adres maszyny, z ktrej inicjowane jest poczenie. SNAT wykonywany jest zawsze po routingu (ang. post-routing), tu przed tym, gdy pakiet opuci maszyn. Masquerading jest specjalizowan form SNAT. DNAT ma miejsce wtedy, gdy zostaje zmieniany adres docelowy pierwszego pakietu, czyli kiedy zmieniany jest adres maszyny, do ktrej ma dotrze poczenie. DNAT wykonywany jest zawsze przed routingiem (ang. pre-routing), w momencie gdy, pakiet zostaje odebrany z cza. Przykady zastosowania translacji NAT przedstawione s w dalszej czci rozdziau.

108

6. Zapora ogniowa oraz translacja adresw sieciowych - iptables Adres rdowy zostanie zmieniony na 1.2.3.4 iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4 Adres rdowy zostanie zmieniony na 1.2.3.4 dla portw 100-123 iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT \\ --to 1.2.3.4:100-123 Wykonanie maskowanie pocze na interfejsie eth0 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Rysunek 6.6. Przykadowe translacje SNAT

Zmiana adresw docelowych na 10.0.0.2 iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 10.0.0.2 Zmiana adresw docelowe ruchu WWW na 10.0.0.2 oraz port 8080 iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT \\ --to 10.0.0.2:8080 Dostp przez sie wewntrzn do publicznego serwera WWW, ktry przesonity jest przez DNAT z publicznego adresu (212.182.2.1) na adres sieci wewntrznej (192.168.1.10) iptables -t nat -A PREROUTING -d 212.182.2.1 -p tcp --dport 80 \\ -j DNAT --to 192.168.1.10
Rysunek 6.7. Przykadowe translacje DNAT

6.2. Zadania
6.2.1. Zadanie 1 Napisz cian ognia tzw. statyczn za pomoc programu iptables [5] na komputer osobisty, ktry bdzie pozwala czy si z dowolnymi stronami WWW oraz serwerami SSH. Twj adres IP=192.168.1.100. Rozwizanie #!/bin/bash #eth1 - interfejs zew iz=eth1 echo "USUNIECIE STARYCH Regul" iptables -F echo "BLOKUJEMY CALY RUCH SIECIOWY"

6.2. Zadania iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP echo "wpuszczam lo" iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT

109

echo "czno za pomoc protokou ssh" iptables -A OUTPUT -o $iz -p tcp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 22 -j ACCEPT iptables -A INPUT -i $iz -p tcp ! --syn -s 0/0 --sport \ 22 -d 192.168.1.100 --dport 1024:65535 -j ACCEPT echo "czno za pomoc protokou http" iptables -A OUTPUT -o $iz -p tcp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 80 -j ACCEPT iptables -A INPUT -i $iz -p tcp ! --syn -s 0/0 --sport \ 80 -d 192.168.1.100 --dport 1024:65535 -j ACCEPT echo "Wczenie zapyta DNS" iptables -A OUTPUT -o $iz -p udp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 53 -j ACCEPT iptables -A INPUT -i $iz -p udp -s 0/0 --sport \ 53 -d 192.168.1.100 --dport 1024:65535 -j ACCEPT

6.2.2. Zadanie 2 Napisz cian ognia tzw. statyczn za pomoc programu iptables na komputer penicy nastpujce funkcje: Klient: WWW, https, skype, ssh Serwer: ssh, www Rozwizanie #!/bin/bash #eth1 - interfejs zew iz=eth1 echo "USUNIECIE STARYCH Regul" iptables -F echo "BLOKUJEMY CALY RUCH SIECIOWY" iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP

110

6. Zapora ogniowa oraz translacja adresw sieciowych - iptables

echo "wpuszczam lo" iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT ##### Klient ##### echo "czno za pomoc protokou ssh" iptables -A OUTPUT -o $iz -p tcp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 22 -j ACCEPT iptables -A INPUT -i $iz -p tcp ! --syn -s 0/0 --sport \ 22 -d 192.168.1.100 --dport 1024:65535 -j ACCEPT echo "czno za pomoc protokou http" iptables -A OUTPUT -o $iz -p tcp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 80 -j ACCEPT iptables -A INPUT -i $iz -p tcp ! --syn -s 0/0 --sport 80 \ -d 192.168.1.100 --dport 1024:65535 -j ACCEPT echo "czno za pomoc protokou https i skype \ (ustawione poczenia wychodzce na 443)" iptables -A OUTPUT -o $iz -p tcp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 443 -j ACCEPT iptables -A INPUT -i $iz -p tcp ! --syn -s 0/0 --sport \ 443 -d 192.168.1.100 --dport 1024:65535 -j ACCEPT echo "Wczenie zapyta DNS" iptables -A OUTPUT -o $iz -p udp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 53 -j ACCEPT iptables -A INPUT -i $iz -p udp -s 0/0 --sport \ 53 -d 192.168.1.100 --dport 1024:65535 -j ACCEPT ##### Serwer ##### echo "czno z naszym serwerem ssh" iptables -A INPUT -i $iz -p tcp -s 0/0 --sport \ 1024:65535 -d 192.168.1.100 --dport 22 -j ACCEPT iptables -A OUTPUT -o $iz -p tcp ! --syn -s 192.168.1.100 \ --sport 22 -d 0/0 --dport 1024:65535 -j ACCEPT echo "czno z naszym serwerem www" iptables -A INPUT -i $iz -p tcp -s 0/0 --sport \ 1024:65535 -d 192.168.1.100 --dport 80 -j ACCEPT iptables -A OUTPUT -o $iz -p tcp ! --syn -s 192.168.1.100 \ --sport 80 -d 0/0 --dport 1024:65535 -j ACCEPT

6.2. Zadania 6.2.3. Zadanie 3 Do ciany ognia utworzonej w zadaniu 2 dodaj logowanie pocze ze zdalnymi serwerami ssh. Rozwizanie Przed reguami dotyczcymi cznoci za pomoc protokou ssh naley doda regu: iptables -A OUTPUT -o $iz -p tcp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 22 -j LOG lub w dowolnym miejscu regu z parametrem -I co powoduje wstawienie reguy na pocztek listy regu typu lter : iptables -I OUTPUT -o $iz -p tcp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 22 -j LOG 6.2.4. Zadanie 4 Napisz cian ognia tzw. dynamiczn (ltrujc po stanie protokou) za pomoc programu iptables na komputer penicy funkcje opisane w zadaniu 2. Rozwizanie #!/bin/bash #eth1 - interfejs zew modprobe ip_conntrack modprobe ip_conntrack_ftp iz=eth1 echo "USUNIECIE STARYCH Regu" iptables -F echo "BLOKUJEMY CALY RUCH SIECIOWY" iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP ISHED,RELATED -j ACCEPT iptables -A OUTPUT -o $iz -p tcp -s 192.168.1.100 --sport \ 1024:65535 -d 0/0 --dport 20 -m state --state ESTABLISHED -j ACCEPT

111

#### Pasywny - serwer ###### iptables -A INPUT -i $iz -p tcp -s 0/0 --sport 1024:65535 \ -d 192.168.1.100 --dport 1024:65535 -m state --state \ ESTABLISHED,RELATED -j ACCEPT

112

6. Zapora ogniowa oraz translacja adresw sieciowych - iptables iptables -A OUTPUT -o $oz -p tcp -s 192.168.1.100 --sport 1024:65535 \ -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

6.2.5. Zadanie 5 Przykadowa architektura sieci komputerowej zaprezentowana jest na rysunku 6.8. Utwrz regu na komputerze bramie (IPX,IP4), ktra bdzie zmieniaa adresy sieci wewntrznej (IP1,IP2,IP3) na adresy komputera penicego rol bramy. Rozwizanie Regua zmieniajca adresy sieci wewntrznej na stay adres publiczny IPX: iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to IPX Regua zmieniajca adresy sieci wewntrznej na zmienny adres publiczny taki jak w danym momencie przypisany jest do interfejsu eth0 : iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 6.2.6. Zadanie 6 Napisz regu, ktra dla architektury przedstawionej na rysunku 6.8 bdzie kierowaa pakiety z sieci Internet na serwer WWW, ktry bdzie zainstalowany na komputerze w sieci wewntrznej o IP: IP1. Rozwizanie Regua przekazujca porty dla pocze WWW (port 80) dla pakietw kierowanych na interfejs zewntrzny na komputer w sieci wewntrznej: iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT \ --to IP1:80 6.2.7. Zadanie 7 Ustaw regu, ktra spowoduje, e wychodzce poczenia ssh bd zawsze realizowane na znany Ci serwer ssh. Rozwizanie Regua powodujca, e wszelkie poczenia wykonywane na port 22 (ssh) bd kierowane na znany adres IP: iptables -t nat -A OUTPUT -p tcp --syn --dport 22 -j DNAT \ --to Znane_IP

6.2. Zadania

113

Rysunek 6.8. Architektura sieci wewntrznej wraz z bram

Rozdzia 7
Skanowanie - sposb kontroli serwerw sieciowych

116

7. Skanowanie - sposb kontroli serwerw sieciowych Wanym krokiem kontroli serwerw sieciowych jest wykonywania cieki technicznej audytu systemw IT, a w szczeglnoci procesu skanowania. Skanowanie jest to proces, ktry ma na celu zebranie szczegowych informacji na temat oprogramowania znajdujcego si na hostach. Wiedza na ten temat jest kluczowa, poniewa wanie bdy w oprogramowaniu pozwalaj na przeprowadzenie ataku. Kada udostpniona usuga to linie kodu napisane w konkretnym jzyku oprogramowania. Niestety, programici piszc aplikacje popeniaj bdy, ktrych wykorzystanie umoliwia wykonanie w systemie operacji nieprzewidzianej przez twrc oprogramowania. Tak operacj moe by na przykad zdalny dostp do systemu bez potrzeby wczeniejszej autoryzacji. Inn moliwoci wykonania ataku jest wykorzystanie bdnej konguracji danej usugi sieciowej, ale i w tym przypadku jest to zwizane z konkretnym oprogramowaniem. W systemach operacyjnych usugi sieciowe reprezentowane s przez numery portw, czyli w przypadku chci poczenia z konkretn usug udostpnian przez serwer, komputer kliencki komunikuje si z odpowiednim numerem portu. Na przykad serwer WWW standardowo nasuchuje pocze na porcie 80 (jest moliwo zmiany tego numeru portu). Jeeli kierowany jest do niego pakiet na porcie docelowym o numerze 80, wwczas system bdzie wiedzia, e pakiety te kierowane s do serwera WWW. Proces skanowania skada si z dwch etapw. Pierwszy polega na sprawdzeniu, jakie usugi udostpniane s przez konkretne hosty w sieci. W drugim etapie okrelane s wersje oprogramowania realizujce dane usugi. W kolejnych podrozdziaach zostan opisane techniki wykonania procesu skanowania hostw. Istotnym zadaniem, jakie musi zosta wykonane przed rozpoczciem skanowania, jest uzyskanie pisemnej zgodny na wykonywane testy penetracyjne. adna operacja nie moe zosta wykonana, dopki szczegowy plan testw nie zostanie zatwierdzony przez kierownictwo danej organizacji. Program testw powinien zawiera nastpujce informacje: 1. List obiektw (hostw) przewidzianych do testw wraz z ich adresami IP. 2. List osb, ktre wykonuj testy, wraz z przyporzdkowaniem ich do konkretnych skanowanych obiektw. Dla wszystkich skanowanych obiektw lub grupy obiektw musi by wskazana osoba odpowiedzialna. Do tej osoby musz by okrelone dane kontaktowe. 3. Czas przeprowadzania testw powinien by szczegowo okrelony. Do skanowanych obiektw trzeba przyporzdkowa okres dnia, kiedy bd przeprowadzane testy wraz z okreleniem ich czasu trwania. Po uzyskaniu zgody kierownictwa audytowanej organizacji na wykonywane skanowanie mona zacz przeprowadza testy. Skanowanie mona wykona przy uyciu technik, ktre wykorzystuj rne protokoy modelu TCP/IP. Do tego celu mona wykorzysta protokoy: ICMP, TCP, UDP oraz protokoy warstwy aplikacji. Proces skanowania mona wykona przy uyciu rnych aplikacji, ktre pozwalaj wysya specjalnie spreparowane pakiety, wykorzystujc wspomniane protokoy modelu TCP/IP, w naszym przypadku zostanie uyte gwnie narzdzie nmap [6]. W dalszej czci zostan opisane najwaniejsze rodzaje skanowania. Zostan one zaprezentowane na przykadzie narzdzia nmap.

7.1. NMAP

117

7.1. NMAP
W systemach operacyjnych aplikacje sieciowe reprezentowane s przez numery portw. Jeeli na porcie, ktry odpowiada konkretnej usudze, system nasuchuje pocze, to znaczy, e dana usuga jest uruchomiona na tym hocie. Aplikacja nmap okrela ten stan portu jako otwarty. Precyzujc mona powiedzie, e wwczas na danym porcie host przyjmuje poczenia TCP oraz pakiety UDP. Kolejnym podstawowym stanem, w jakim moe znale si port jest zamknity. To oznacza, e dany port jest dostpny (odpowiada na wysane pakiety), ale nie ma tam nasuchujcej na poczenia aplikacji. Nastpnym stanem jest stan ltrowany, ktry informuje, e poczania na tym porcie s ltrowane przez cian ognia samego hosta lub np. router. W taki wypadku nie wiadomo, czy port jest otwarty. Wspomniane 3 stany okrelane przez aplikacje nmap s podstawowymi stanami portw, ale nmap posiada jeszcze 3 kolejne, dodatkowe stany. Moe to by stan nieltrowany. W takim przypadku nmap nie jest w stanie okreli, czy port jest w stanie otwartym czy zamknitym. Kolejnym stanem jest stan otwarty|ltrowany, czyli nie wiadomo, czy port jest otwarty, czy ltrowany. Ostatnim stanem dodatkowym jest stan zamknity|ltrowany, czyli nie mona wskaza, czy jest to stan zamknity, czy ltrowany. W dalszej czci zostan przedstawione najistotniejsze wersje skanowania wykonywane za pomoc aplikacji nmap. 7.1.1. TCP SYN : aga -sS Skanowanie typu TCP SYN polega na wysaniu pakietw SYN do danego hosta, czyli jest to ch nawizania poczania za pomoc protokou TCP. Na taki typ skanowania host moe odpowiedzie pakietem SYN/ACK, co oznacza, e na danym porcie nasuchuje aplikacja i nmap oznacza ten port jako otwarty. Tak rozpoczte poczenie nie zostanie zestawione, poniewa dla pakietu SYN/ACK nie zostanie wysany pakiet potwierdzajcy ACK. Taki stan poczenia nazywany jest w poowie nawizanym (ang. half-open). W przypadku, gdy port jest zamknity, wysyany jest do strony skanujcej pakiet RST, ktry koczy proces nawizywania poczenia. Jeeli nie ma adnej odpowiedzi na taki pakiet, wwczas takie skanowania ponawiane s kilkakrotnie i jeeli na wszystkie zapytania nie ma odpowiedzi, wwczas port okrelany jest jako ltrowany. 7.1.2. TCP CONNECT : aga -sT Ten typ skanowania polega na prbie penego zestawienia poczenia TCP. Poczenie to jest zestawiane za pomoc funkcji systemowej connect(), a nie jak w przypadku innych skanowa, za pomoc pakietw typu RAW. Zestawiajc poczenia typy RAW, aplikacja nmap bdzie otrzymywaa odpowiedzi w postaci pakietw wraz z nagwkami, a nie jak w przypadku standardowych pocze, otrzyma tylko dane bez nagwkw. W przypadku, gdy usuga nasuchuje na tym porcie, wwczas nawizywane jest poczenie. Niestety, taka prba zostanie odnotowana w logach systemowych skanowanego hosta, co dla administratora tego hosta bdzie oznaczao, e host by skanowany. Podobnie jak w przypadku skanowania TCP SYN, w sytuacji, gdy na danym porcie nie nasuchuje adna usuga, ale host jest aktywny w sieci, wwczas zostanie zgoszony stan zamknity.

118

7. Skanowanie - sposb kontroli serwerw sieciowych 7.1.3. TCP NULL : aga -sN Operujc na pakietach typu TCP mamy moliwo niewskazania adnej agi. System, ktry otrzyma pakiet TCP bez agi typu SYN,RST lub ACK, spowoduje wysanie agi RST w przypadku portu zamknitego. W przypadku portu otwartego zostanie zgoszony bd przekroczenia czasu oczekiwania na poczenie. Jeeli dany port jest ltrowany, wwczas nmap otrzyma komunikat ICMP unreachable. Ten typ skanowania pozwala na przejcie przez bezstanow cian ognia lub router. Niestety, niektre systemy operacyjne bezwarunkowo po odebraniu takiego pakietu wysyaj pakiet z ag RST.

7.1.4. TCP ACK : aga -sA Skanowanie TCP ACK polega na wysyaniu pakietw z ag ACK. W wyniku takiego skanowania porty bez ltrowania zawsze odpowiedz ag RST. W takim przypadku otrzymamy odpowied nieltrowany. Porty, ktre nie odpowiedz lub odpowiedz komunikatem ICMP unreachable, zostan okrelone jako ltrowane. Tego typu skanowanie wykorzystywane jest do testowania regu ciany ognia.

7.1.5. TCP ZOMBI SCAN : aga -sI Skanowanie typu Zombi umoliwia skanowanie systemu przez wysyanie pakietw, w ktrych adres IP nadawcy bdzie sfaszowany. Adres nadawcy bdzie adresem hosta Zombi, co spowoduje, e systemy wykrywania wama na badanym hocie bd mylay, e skanowanie jest wykonywane przez hosta Zombi. Wykonanie takiego skanowania jest moliwe w przypadku, gdy stos TCP/IP hosta zombi dziaa standardowo, a w szczeglnoci wane jest eby ID wysyanych pakietw IP byo zwikszane zawsze o 1. Sprawdzenie, czy port jest otwarty mona wykona w 3 krokach. 1. Pocztkowo wysyamy pakiet SYN/ACK do wybranego przez nas hosta, ktry bdzie peni rol Zombi. Wane, eby by to host, ktry czsto nie wysya pakietw IP, moe to by np. drukarka. W odpowiedzi na ten pakiet otrzymujemy obecn warto ID pakietu IP. 2. W kolejnym kroku wysyamy pakiet SYN do badanego hosta, ale jako adres IP nadawcy wpisujemy adres hosta Zombi. W przypadku, gdy port jest otwarty, badany host wyle na adres IP nadawcy pakiet SYN/ACK, co spowoduje, e host Zombi odpowie pakietem z ag RST. 3. W ostatnim kroku przesyamy ponownie pakiet SYN/ACK do hosta Zombi i sprawdzamy warto ID otrzymanego pakietu IP. W przypadku, gdy warto ta zostaa zwikszona o 2, wwczas w kroku 2 badany host wysa pakiet SYN/ACK czyli port jest otwarty. Jeeli warto ta zostaa zwikszona tylko o 1, wwczas w kroku 2 badany host nie wysa pakietu SYN/ACK tylko pakiet RST, co wiadczy o tym, e port jest zamknity. Warto doda, e w przypadku, gdy badany port jest ltrowany, rwnie warto ID pakietu IP zostanie zwikszona o 1, poniewa w kroku 2 badany host nie wyle adnego pakietu do hosta Zombi.

7.1. NMAP 7.1.6. UDP SCAN : aga -sU Oprcz skanowania portw metodami wykorzystujcymi protok TCP istnieje moliwo skanowania za pomoc protokou UDP. Warto skanowa rwnie te porty, poniewa dua cz usug sieciowych wykorzystuje wanie protok UDP. W przypadku takiego skanowania wysyane s pakiety DNS bez danych i w przypadku, gdy badany host zwrci komunikat ICMP port unreachable kod 3, wwczas port bdzie zamknity. W przypadku, gdy zgoszony jest bd ICMP port unreachable kod 1,2,9,10,13, wwczas port jest ltrowany. Jeeli zostanie zwrcony pakiet UDP, wtedy wiadomo, e port jest otwarty. 7.1.7. PROTOCOL SCAN : aga -sO Interesujcym typem skanowania jest sprawdzenie, jakie protokoy IP obsugiwane s przez badanego hosta. W tym przypadku nie s skanowane porty, ale numery protokow. W tym celu zwikszany jest w nagwkach numer odpowiedzialny za wersj protokou. Jeeli aplikacja nmap otrzyma odpowied, wwczas bdzie wiadomo, e dany protok jest wspierany. 7.1.8. ICMP SCAN : aga -sP Za pomoc tej opcji mona sprawdzi, ktre hosty z podanej puli adresowej s w danym momencie aktywne. W tym celu wysyane jest zapytanie icmp request oraz pakiet TCP SYN na port 80 badanego hosta. Oczekiwana jest odpowied, czyli icmp reply, oraz pakiet TCP SYN/ACK. Jeeli skanowanie nie jest wykonywane z konta uprzywilejowanego, wwczas wysyany jest wycznie pakiet TCP SYN na port 80 przy uyciu funkcji connect() opisanej wyej. W przypadku gdy testy wykonywane s w obrbie sieci lokalnej Ethernet, wtedy wykonywane s dodatkowo zapytania ARP. 7.1.9. NMAP : Opcje Skanowania Polecenie skanowania wykonywane za pomoc aplikacji nmap wydawane jest z linii polece terminala. Oprcz zdeniowania podstawowej wersji testw naley uzupeni zapytanie o dodatkowe opcje precyzujce testy. W dalszej czci podrozdziau zostan opisane dodatkowe opcje narzdzia nmap. 7.1.9.1. Zakres portw : aga -p Za pomoc tej opcji mona okreli konkretne porty, ktre maj by przeskanowane. Mona poda pojedynczy port lub cay zakres (np. 1-10). 7.1.9.2. Szybkie skanowanie : aga -F Jeeli chcemy, eby zostay przetestowane tylko porty standardowych usug sieciowych, wwczas mona wczy opcj szybkiego skanowania. 7.1.9.3. Liczba prb skanowania: aga max-retries Wykonujc skanowanie dowolnego portu, czsto nie uzyskamy adnej odpowiedzi. Taka sytuacja moe by spowodowana tym, e testowany ruch jest ltrowany.

119

120

7. Skanowanie - sposb kontroli serwerw sieciowych Innym powodem moe by fakt, e pakiet zagin w sieci, dlatego aplikacja nmap ponawia testy wiele razy. Za pomoc tej agi mona okreli, ile razy maj by ponawiane zapytania. Ta opcja jest istotna w przypadku, gdy wydajno jest wanym czynnikiem oraz gdy nie chcemy generowa nadmiarowego ruchu sieciowego. 7.1.9.4. Opnienia testw : scan-delay Opcja ta pozwala na okrelenie opnie pomidzy wykonywanymi testami. Jako parametr podajemy czas, ktry standardowo liczony jest w milisekundach, ale mona go poda rwnie w sekundach (s), minutach (m) lub w godzinach (h). Parametr ten ma oczywisty wpyw na wydajno komputera, ktry przeprowadza testy, ale jeszcze waniejsz spraw jest oszukanie systemw wykrywania wama. Jest to moliwe dlatego, e spowalniajc testy wtapiamy si w naturalny ruch sieciowy, co utrudni systemom wykrycie przeprowadzonych testw. 7.1.9.5. Fragmentacja : aga -f Za pomoc fragmentacji mona wysya skanujce pakiety w sposb pofragmentowany, czyli pakiet TCP dzielony jest na klika czci. Takie dziaanie utrudni analiz przychodzcych pakietw przez systemy wykrywania wama strony badanej. Maksymalna wielko pakietw zostaa ustalona przez aplikacj nmap na 8 bajtw. Oczywicie kady fragment nagwka TCP dostanie wasny nagwek IP, dziki temu pakiet bdzie mg dotrze do adresata. 7.1.9.6. Decoy : aga -D Skanowanie typu Decoy polega na tym, e konkretne skanowanie wykonywane jest rwnolegle z rnych adresw IP nadawcy, co powoduje, e systemy wykrywania wama nie bd widziay, ktry ze skanw pochodzi z autentycznego IP. Oczywicie, po analizie przebytej drogi na routerach mona dotrze do autentycznego IP, z ktrego przeprowadzany by test, ale maskowanie testw w ten sposb powoduje kolejne utrudnienia dla systemw wykrywania wama. 7.1.9.7. IPspoong : aga -S Za pomoc tej opcji mona ustawi rdowy adres IP strony skanujcej na dowolny. W ten sposb mona wykona atak IPspoongu, co powoduje, e strona skanowana nie bdzie wiedziaa, kto wykonuje testy. W tym przypadku ewentualne pakiety zwrotne bd kierowane na podmieniony adres IP, czyli nie uzyskamy informacji na temat skanowanych portw. Tego typu skany mona wykonywa, eby wprowadzi w bd stron audytowan, e jest ona skanowana przez konkretny adres IP danej organizacji, co moe wprowadzi dodatkow dezorientacj. 7.1.9.8. Zmiana portu rdowego : aga -g Bardzo istotn funkcj jest moliwo zmiany adresu rdowego nadawcy. Ten parametr jest istotny, poniewa bardzo czsto ciany ognia ltruj ruch wycznie po porcie rdowym nadawcy. Strona skanujca moe wykona test z portu rdowego, reprezentujcego port powszechnie uywany (np. DNS:53) na dowolny port, ktry jest celem testw.

7.1. NMAP 7.1.9.9. Wielko danych : aga data-length Standardowe testy wykonywane przez wysyanie pakietw nie zawieraj adnych danych, czyli wysyane s same nagwki. Takie zachowanie aplikacji nmap jest wykonywane ze wzgldu na wydajno przeprowadzanych skanowa. Natomiast, gdy chcemy, eby przeprowadzane testy byy podobne do normalnego ruchu sieciowego, wwczas naley okreli dane, ktre bd dodawane do pakietw. 7.1.9.10. Zmiana adresu MAC : aga spoof-mac Podobnie jak w przypadku faszowania adresu IP nadawcy, moemy rwnie zmieni adres MAC strony wykonujcej skanowanie. Jako argument podawany jest zarwno adres MAC, jak i dowolny adres producenta karty sieciowej. 7.1.9.11. Za suma kontrolna : aga badsum Ciekaw opcj jest ustawianie bdnej sumy kontrolnej wysyanego pakietu. System operacyjny, przyjmujcy pakiety, automatycznie odrzuci te ktrych suma kontrolna nie bdzie si zgadzaa. Inne zachowanie maj systemy wykrywania wama, ktre czsto nie analizuj tego pola. Dziki temu, jeeli wylemy pakiety z bdn sum i otrzymamy odpowied, bdziemy wiedzieli, e t odpowied wygenerowa nie system operacyjny hosta, tylko system wykrywania wama. 7.1.10. Wersje oprogramowania oraz system operacyjny Celem pierwszego kroku skanowania jest okrelenie, jakie usugi s uruchomione na badanym hocie. Aplikacja nmap wskae, jakie porty s otwarte i przypisze im nazw zgodnie ze standardowym ich przyporzdkowaniem. W kroku drugim naley dowiedzie si czego wicej na temat potencjalnie uruchomionych usug na badanym hocie. W tym celu nmap czc si z konkretnymi usugami, zbiera banery skanowanych usug sieciowych i nastpnie przyporzdkowuje je do banerw zgromadzonych w swojej bazie danych. Dziki takiej analizie nmap okrela prawdziw nazw protokou warstwy aplikacji (np. http), nazw aplikacji (np. Apache), wersj aplikacji, typ urzdzenia (np. drukarka) oraz rodzaj systemu operacyjnego wraz z jego wersj. Poniej zostan przedstawione opcje skanowania, ktre umoliwiaj uzyskanie wspomnianych informacji. 7.1.10.1. Wersja usugi : aga -sV Za pomoc tej agi wczana jest detekcja wersji skanowanych usug. W tym przypadku bd analizowane dane wysyane przez badanego hosta w odpowiedzi na skany. 7.1.10.2. Skanowanie RPC : aga -sR Usugi typu RPC (ang. Remote Procedure Call) s rdem wielu luk bezpieczestwa, dlatego ich wykrycie jest istotne. Za pomoc tej opcji bd wykonywane dodatkowe skanowania okrelone jako NULL SunRPC dla wszystkich wykrytych wczeniej otwartych portw. Jeeli do danego portu przyporzdkowane s konkretne usugi, wwczas wywietlana jest ich nazwa wraz z wersj.

121

122

7. Skanowanie - sposb kontroli serwerw sieciowych 7.1.10.3. System operacyjny : aga -O System operacyjny wykrywany jest dziki analizie budowy pakietw wysyanych jako odpowiedzi na przeprowadzane testy skanujce. Systemy operacyjne posiadaj swoje indywidualne metody budowy i sekwencji wysyania pakietw w ramach realizacji stosu TCP/IP. Aplikacja nmap posiada baz danych tych informacji i zebrane dane s analizowane, w wyniku czego okrelany jest system operacyjny. Dodatkowo, podczas przeprowadzanych testw systemu operacyjnego, skanowany host moe dostarcza innych informacji, np. czas od ostatniego restartu lub zainstalowany service pack w przypadku systemu Windows. 7.1.10.4. Zgadywanie systemu operacyjnego : aga osscan-guess Istnieje moliwo, e przeprowadzane testy systemu operacyjnego nie pozwol na okrelenie, jaki system operacyjny jest skanowany. Dzieje si tak, gdy administrator zadba o to, eby system wraz z uruchomionymi usugami nie wysya standardowych odpowiedzi lub wysya je specjalnie spreparowane, tak eby wprowadza w bd strony skanujce. W takim przypadku mona okreli opcj, ktra postara si zgadn system operacyjny, bazujc na niepenych lub sprzecznych danych.

7.2. Optymalizacja skanowania


7.2.1. Sztuczny ruch sieciowy: hping Hping [7] jest narzdziem o wielkich moliwociach sucym do generowania oraz analizowania pakietw TCP/IP. Obecnie najnowsz wersj programu jest wersja 3 i program oznaczany jest jako hping3. Aplikacja obsuguje protokoy TCP, UDP, ICMP oraz RAW-IP i potra wygenerowa i wysa prawie dowolny pakiet w obrbie tych protokow. Ponadto posiada wiele ciekawych opcji, takich jak tryb traceroute czy moliwo przesyania plikw kanaem ukrytym. hping najczciej wykorzystywany jest do testowania sieci, rewalli, systemw fragmentacji, protokow, skanowania hostw, wykrywania i identykowania systemw oraz innych czynnoci zwizanych z audytem sieciowym. W tym podrozdziale zaprezentowano podstawowe moliwoci pakietu hping w zakresie generowania sztucznego ruchu sieciowego. Jedn z podstawowych opcji jest wysanie pakietu TCP z zadanymi agami. Flagi mona ustawi za pomoc opcji: -F -S -R -P -A -U -X -Y fin ustaw flag FIN syn ustaw flag SYN rst ustaw flag RST push ustaw flag PUSH ack ustaw flag ACK urg ustaw flag URG xmas ustaw flag X (nieuywana, kod: 0x40) ymas ustaw flag Y (nieuywana, kod: 0x80)

7.2. Optymalizacja skanowania Port ustawiamy za pomoc opcji -p numer_portu. W przypadku gdy nie ustawiono portu, pakiet zostanie wysany na port 0. Chcc wysa pakiet przez dany interfejs sieciowy, naley uy agi -I nazwa_interfejsu. Wikszo opcji hpinga wymaga praw uytkownika root do manipulowania pakietami. Przykadowe wysanie pakietu z ag SYN na port 0 hosta 192.168.0.1 wyglda nastpujco: # hping3 -S 192.168.0.1
HPING 192.168.0.1 (wlan0 192.168.0.1): S set, 40 headers + 0 data len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=2 win=0 len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=3 win=0 len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=4 win=0 len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=5 win=0 ... bytes rtt=1.9 rtt=1.6 rtt=6.5 rtt=1.7 rtt=1.7 rtt=1.5 ms ms ms ms ms ms

123

Polecenie wysya w odstpie czasowym pakiety z ustawion ag SYN. Dodatkowo otrzymano informacje odnonie do pakietw zwrotnych, takie jak: dugo pakietu, adres rdowy, czas ycia pakietu, port rdowy, opnienie, pozostae agi pakietu. Transmisja midzy komputerami wyglda nastpujco:
14:06:37.207568 IP linux.local.2944 > 192.168.0.1.0: Flags [S], seq 583281012, win 512, length 0 14:06:37.209353 IP 192.168.0.1.0 > linux.local.2944: Flags [R.], seq 0, ack 583281013, win 0, length 0 14:06:38.207757 IP linux.local.2945 > 192.168.0.1.0: Flags [S], seq 2020272793, win 512, length 0 14:06:38.209319 IP 192.168.0.1.0 > linux.local.2945: Flags [R.], seq 0, ack 2020272794, win 0, length 0 14:06:39.207865 IP linux.local.2946 > 192.168.0.1.0: Flags [S], seq 38001498, win 512, length 0 14:06:39.214354 IP 192.168.0.1.0 > linux.local.2946: Flags [R.], seq 0, ack 38001499, win 0, length 0

Dziki powyszemu listingowi mona pozna dodatkowe szczegy wymiany pakietw, takie jak: dokadny czas wysania i otrzymania pakietu, port rdowy naszego komputera, numery sekwencyjne poszczeglnych pakietw. Wysanie pakietw z ag RST lub FIN skutkuje brakiem odpowiedzi z drugiej strony. Przedstawia to poniszy listing: # hping3 -R 192.168.0.1 -p 80 HPING 192.168.0.1 (wlan0 192.168.0.1): F set, 40 headers + 0 data bytes 192.168.0.1 hping statistic

124

7. Skanowanie - sposb kontroli serwerw sieciowych 8 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms Po wysaniu omiu pakietw na port 80 nie otrzymano adnej odpowiedzi. Badany system wanie tak reaguje na pakiety z ag FIN lub RST. Potwierdza to listing komunikacji: 14:39:51.596433 IP linux.local.2496 > 192.168.0.1.www: Flags [R], seq 1513188863, win 512, length 0 14:39:52.596569 IP linux.local.2497 > 192.168.0.1.www: Flags [R], seq 968123380, win 512, length 0 14:39:53.596699 IP linux.local.2498 > 192.168.0.1.www: Flags [R], seq 1983996553, win 512, length 0 14:39:54.596820 IP linux.local.2499 > 192.168.0.1.www: Flags [R], seq 1250340851, win 512, length 0 Jak wida pakiety wysyane do komputera 192.168.0.1 na port 80 (www) zostaj bez odpowiedzi, poniewa maj ustawion ag RST. Jak wspomniano wczeniej, za pomoc hpinga moemy korzysta z innych protokow. Przykadem jest wysyanie pakietw UDP; naley w tym celu uy opcji -2. Oto przykad badania hosta datagramami UDP: # hping3 -2 192.168.0.1 HPING 192.168.0.1 (wlan0 192.168.0.1): udp mode set, 28 headers + 0 data bytes ICMP Port Unreachable from ip=192.168.0.1 name=UNKNOWN status=0 port=2117 seq=0 ICMP Port Unreachable from ip=192.168.0.1 name=UNKNOWN status=0 port=2118 seq=1 ICMP Port Unreachable from ip=192.168.0.1 name=UNKNOWN status=0 port=2119 seq=2 ICMP Port Unreachable from ip=192.168.0.1 name=UNKNOWN status=0 port=2120 seq=3 ICMP Port Unreachable from ip=192.168.0.1 name=UNKNOWN status=0 port=2121 seq=4 UDP jest protokoem bezpoczeniowym, na porcie 0 hosta 192.168.0.1 nie dziaa adna usuga; uzyskano jedynie informacj o niedostpnoci bez datagramw zwrotnych, co potwierdza listing ze ledzenia powyszej komunikacji:
14:59:52.469808 14:59:53.469998 14:59:54.470125 14:59:55.470253 IP IP IP IP linux.local.2117 > 192.168.0.1.0: UDP, length 0 linux.local.2118 > 192.168.0.1.0: UDP, length 0 linux.local.gsigatekeeper > 192.168.0.1.0: UDP, length 0 linux.local.2120 > 192.168.0.1.0: UDP, length 0

Analogicznie do agi -1 mona uzyska pakiety ICMP. Poniszy listing prezentuje odpowiedzi hosta na pakiety ICMP:

7.2. Optymalizacja skanowania

125

# hping3 -1 192.168.0.1 HPING 192.168.0.1 (wlan0 192.168.0.1): icmp mode len=28 ip=192.168.0.1 ttl=64 id=43118 icmp_seq=0 len=28 ip=192.168.0.1 ttl=64 id=43119 icmp_seq=1 len=28 ip=192.168.0.1 ttl=64 id=43120 icmp_seq=2

set, 28 rtt=2.0 rtt=1.6 rtt=1.7

headers + 0 data bytes ms ms ms

Aplikacja pozwala rwnie na skanowanie portw komputera. Uywamy do tego preksu ++ przed numerem portu. Oznacza to wysyanie poszczeglnych pakietw na kolejne porty, poczwszy od ustalonego. W sytuacji, gdy ustalono dodatkowo ag pakietu na SYN, bdzie mona wykry obecno otwartego portu. Prezentuje to poniszy listing:
# hping3 -S 192.168.0.1 -p ++78 HPING 192.168.0.1 (wlan0 192.168.0.1): S set, len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=78 len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=79 len=44 ip=192.168.0.1 ttl=64 DF id=0 sport=80 ms len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=81 len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=82

40 headers + 0 flags=RA seq=0 flags=RA seq=1 flags=SA seq=2

data bytes win=0 rtt=1.9 ms win=0 rtt=1.6 ms win=5840 rtt=1.8

flags=RA seq=3 win=0 rtt=1.7 ms flags=RA seq=4 win=0 rtt=1.6 ms

Polecenie wysya na kolejne porty, zaczynajc od portu o numerze 78, pakiety SYN. Odpowiedzi z agami RA oznaczaj, i pakiet zosta odrzucony i port najprawdopodobniej jest zamknity. Odpowied SA oznacza port otwarty. Jak wida, od hosta 192.168.0.1 otrzymano odpowied z agami SA z portu rdowego 80. Oznacza to, e najpewniej komputer o adresie 192.168.0.1 ma uruchomiony serwer www. Opcja -a IP suy do ustalania rdowego adresu IP dla wysyanych pakietw. Dodatkowo za pomoc opcji -i mona ustali liczb wysyanych pakietw w czasie jednej sekundy. Poniej wygenerowano du liczb faszywych pocze na port 80 badanego hosta: # hping3 -a 192.168.0.155 -S 192.168.0.1 -i u10000 -p 80 HPING 192.168.0.1 (wlan0 192.168.0.1): S set, 40 headers + 0 data bytes 192.168.0.1 hping statistic 561 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms Podajc si za 192.168.0.155, wysano 561 pakietw z ag SYN na port 80 komputera 192.168.0.1. Oto jak wyglda fragment takiego wysyania faszywych pakietw:
16:23:19.617380 IP 192.168.0.155.1138 > 192.168.0.1.www: Flags [S], seq 478053686, win 512, length 0 16:23:19.627438 IP 192.168.0.155.1139 > 192.168.0.1.www: Flags [S], seq 328202492, win

126

7. Skanowanie - sposb kontroli serwerw sieciowych


512, length 0 16:23:19.637495 IP 192.168.0.155.1140 > 192.168.0.1.www: Flags [S], seq 1930392010, win 512, length 0 16:23:19.647551 IP 192.168.0.155.1141 > 192.168.0.1.www: Flags [S], seq 1194871468, win 512, length 0 16:23:19.657613 IP 192.168.0.155.1142 > 192.168.0.1.www: Flags [S], seq 982934497, win 512, length 0

Do manipulowania pakietami hping suy jeszcze wielu opcji. Jednymi z ciekawszych mog by: -t ttl (ustawienie czasu ycia pakietu), -m mtu (ustawienie maksymalnej jednostki transferu), -s port (ustawienie portu rdowego dla pakietu) czy -d rozmiar (ustawienie rozmiaru pakiet). Przykadem zastosowania moe by testowanie odpowiedzi hosta na rne kombinacje tych opcji, np:
# hping3 -A 192.168.0.1 -s 11111 -d 1007 -t 22 -m 1024 HPING 192.168.0.1 (wlan0 192.168.0.1): A set, 40 headers + len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=0 flags=R seq=0 len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=0 flags=R seq=1 len=40 ip=192.168.0.1 ttl=64 DF id=0 sport=0 flags=R seq=2

1007 data bytes win=0 rtt=2.4 ms win=0 rtt=2.7 ms win=0 rtt=2.8 ms

Wysyano kolejne pakiety ACK zaczynajc od portu rdowego 1111, z wielkoci danych pakietu 1007 bajtw, z czasem ycia pakietu rwnym 22 oraz z MTU o wartoci 1024. Badany host odpowiada pakietem RST, a szczegowy fragment prezentuje nastpujcy listing:
16:39:57.409427 IP linux.local.11116 > 192.168.0.1.0: Flags [.], seq 566196180:566197184, ack 1991169248, win 512, length 1004 16:39:57.411866 IP 192.168.0.1.0 > linux.local.11116: Flags [R], seq 1991169248, win 0, length 0 16:39:58.409625 ack 1942238656, 16:39:58.412365 length 0 16:40:05.900055 IP linux.local.11117 > 192.168.0.1.0: Flags [.], seq 4018932636:4018933640, win 512, length 1004 IP 192.168.0.1.0 > linux.local.11117: Flags [R], seq 1942238656, win 0, IP linux.local.11111 > 192.168.0.1.0: Flags [.], seq 766813950:766814954,

ack 1875029729, win 512, length 1004 16:40:05.902383 IP 192.168.0.1.0 > linux.local.11111: Flags [R], seq 1875029729, win 0, length 0 16:40:06.900595 IP linux.local.11112 > 192.168.0.1.0: Flags [.], seq 941150028:941151032, ack 103787603, win 512, length 1004 16:40:06.903195 IP 192.168.0.1.0 > linux.local.11112: Flags [R], seq 103787603, win 0, length 0

Wida odpowiedzi hosta poszczeglnymi pakietami RST na odpowiednie porty.

7.3. Praktyczne zastosowania

127

7.3. Praktyczne zastosowania


Pierwsz czynnoci, ktr warto wykona, jest sprawdzenie obecnoci hostw w sieci lokalnej. Skorzystano tutaj z metody ICMP SCAN opisanej wyej. # nmap -sP 192.168.0.1-255 Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 14:59 CEST Host 192.168.0.1 appears to be up. MAC Address: 00:15:E9:02:71:B0 (D-Link) Host 192.168.0.105 appears to be up. Host 192.168.0.122 appears to be up. MAC Address: 00:16:CE:87:88:3A (Hon Hai Precision Ind. Co.) Nmap finished: 255 IP addresses (3 hosts up) scanned in 24.930 seconds Jak wida, program zwrci adresy trzech komputerw, z ktrych jeden (192.168.0.105) jest naszym adresem. Poza informacjami o aktywnych hostach otrzymujemy informacje o adresach MAC. Dodatkowo skaner identykuje rmy, ktre s uprawnione do nadawania swoim produktom tych adresw. W przypadku np. routerw moe stanowi to cenn informacj. Adresy, ktre odpowiedziay na skanowanie ICMP, to adres bramy 192.168.0.1 oraz zdalny host 192.168.0.122. Nastpnie przetestowano host 192.168.0.122. W celu okrelenia, jakie protokoy obsuguje host, uyto poniszego polecenia: # nmap -sO 192.168.0.122 Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 15:54 CEST Interesting protocols on 192.168.0.122: Not shown: 251 closed protocols PROTOCOL STATE SERVICE 1 open icmp 2 open|filtered igmp 6 open tcp 17 filtered udp 136 open|filtered udplite Dane zwrcone przez program mwi o dosy standardowym zestawie protokow, obsugiwanych przez komputer. Kolejnym krokiem moe by przeskanowanie interesujcych portw na badanej maszynie. W tym celu mona uy np. skanowania TCP NULL. # nmap -sN 192.168.0.122 -p 21,22,23,25,80 Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 15:45 CEST Interesting ports on 192.168.0.122: PORT STATE SERVICE 21/tcp open|filtered ftp 22/tcp open|filtered ssh

128

7. Skanowanie - sposb kontroli serwerw sieciowych 23/tcp closed telnet 25/tcp closed smtp 80/tcp open|filtered http MAC Address: 00:16:CE:87:88:3A (Hon Hai Precision Ind. Co.) Nmap finished: 1 IP address (1 host up) scanned in 7.928 seconds Wanym elementem powyszego polecenia jest uycie opcji -p, za pomoc ktrej deniujemy porty sprawdzone w procesie skanowania. Pozostae porty nie zostan zbadane. W przedstawionym przypadku interesujcymi portami s: 21,22,23,25,80. Wynik skanera informuje nas o stanie portw. Porty 23 oraz 25 s zamknite, natomiast pozostae mog by otwarte bd ltrowane. W celu werykacji tych wynikw mona uy skanowania TCP SYN: # nmap -sS 192.168.0.122 -p 21,22,23,25,80 Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 15:45 CEST Interesting ports on 192.168.0.122: PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 23/tcp closed telnet 25/tcp closed smtp 80/tcp open http MAC Address: 00:16:CE:87:88:3A (Hon Hai Precision Ind. Co.) Nmap finished: 1 IP address (1 host up) scanned in 6.736 seconds Powysze skanowanie rozwiao wtpliwoci co do stanw danych portw. Otwartymi portami (z naszego zbioru) s 21, 22 oraz 80. W powyszym przykadzie skan obejmowa zdeniowane przez uytkownika porty, jednak w sytuacji, gdy nie wiadomo jakich usug spodziewa si na sprawdzanym hocie, warto uy agi -F programu, ktra zbada podstawowe numery portw. To przedstawi midzy innymi zaprezentowany niej przykad: # nmap -F -vv scan-delay 10s max-retries 1 192.168.0.122

Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 17:07 CEST Initiating ARP Ping Scan at 17:07 Scanning 192.168.0.122 [1 port] Completed ARP Ping Scan at 17:07, 10.01s elapsed (1 total hosts) Initiating Parallel DNS resolution of 1 host. at 17:07 Completed Parallel DNS resolution of 1 host. at 17:07, 6.52s elapsed Initiating SYN Stealth Scan at 17:07 Scanning 192.168.0.122 [1256 ports] SYN Stealth Scan Timing: About 0.32% done Discovered open port 21/tcp on 192.168.0.122

7.3. Praktyczne zastosowania Discovered open port 80/tcp on 192.168.0.122 Discovered open port 443/tcp on 192.168.0.122 Discovered open port 22/tcp on 192.168.0.122 ... Polecenie to sprawdza standardowe porty. Do opcji skanera dodatkowo dodano ag -vv, ktra odpowiada za dodatkowe informacje dla osoby skanujcej, oraz opcj scan-delay 10s, ktra wymusza 10 sekund przerwy midzy badaniem kolejnych portw. Opcja ta przydaje si np. do ominicia systemw Firewall/IDS. Ograniczylimy rwnie odpytywania tych samych portw kilkakrotnie. Program w trybie rzeczywistym informuje nas o wykrytych otwartych portach (21,80,443,22). Oto, co moe pokaza program nasuchujcy przychodzcy ruch sieciowy na skanowanej maszynie:
17:34:39.773893 IP 192.168.0.105.45065 > S 2163566778:2163566778(0) win 2048 <mss 17:34:39.776600 IP 192.168.0.105.45065 > R 2163566779:2163566779(0) win 0 17:34:49.777686 IP 192.168.0.105.45065 > win 4096 <mss 1460> 17:35:09.785391 IP 192.168.0.105.45065 > win 3072 <mss 1460> 17:35:19.787463 IP 192.168.0.105.45065 > win 1024 <mss 1460> 17:35:29.791095 IP 192.168.0.105.45065 > win 3072 <mss 1460> 17:35:39.795158 IP 192.168.0.105.45065 > S 2163566778:2163566778(0) win 4096 <mss 17:35:39.797813 IP 192.168.0.105.45065 > R 2163566779:2163566779(0) win 0 17:35:49.798841 IP 192.168.0.105.45065 > win 1024 <mss 1460> 17:35:59.801715 IP 192.168.0.105.45065 > win 3072 <mss 1460> 17:36:09.805507 IP 192.168.0.105.45065 > win 2048 <mss 1460> 17:36:19.807497 IP 192.168.0.105.45067 > win 1024 <mss 1460> 17:36:29.811213 IP 192.168.0.105.45065 > S 2163566778:2163566778(0) win 3072 <mss 17:36:39.814108 IP 192.168.0.105.45065 > win 4096 <mss 1460> 17:36:49.817953 IP 192.168.0.105.45065 > win 1024 <mss 1460> 17:36:59.821811 IP 192.168.0.105.45065 > win 3072 <mss 1460> 17:36:59.826447 IP 192.168.0.105.45065 > win 0 17:37:09.825592 IP 192.168.0.105.45065 > win 1024 <mss 1460> 17:37:19.829515 IP 192.168.0.105.45065 > win 3072 <mss 1460> 17:37:29.835329 IP 192.168.0.105.45065 > win 1024 <mss 1460> 17:37:39.837240 IP 192.168.0.105.45065 > laptop.local.ftp: 1460> laptop.local.ftp: laptop.local.ldaps: S 2163566778:2163566778(0) laptop.local.domain: S 2163566778:2163566778(0) laptop.local.telnet: S 2163566778:2163566778(0) laptop.local.smtp: S 2163566778:2163566778(0) laptop.local.www: 1460> laptop.local.www: laptop.local.1723: S 2163566778:2163566778(0) laptop.local.ldap: S 2163566778:2163566778(0) laptop.local.auth: S 2163566778:2163566778(0) laptop.local.ldaps: S 2180344250:2180344250(0) laptop.local.256: 1460> laptop.local.rtsp: S 2163566778:2163566778(0) laptop.local.3389: S 2163566778:2163566778(0) laptop.local.https: S 2163566778:2163566778(0) laptop.local.https: R 2163566779:2163566779(0) laptop.local.1492: S 2163566778:2163566778(0) laptop.local.1547: S 2163566778:2163566778(0) laptop.local.1669: S 2163566778:2163566778(0) laptop.local.198:

129

130

7. Skanowanie - sposb kontroli serwerw sieciowych


S 2163566778:2163566778(0) win 3072 <mss 17:37:49.841095 IP 192.168.0.105.45065 > win 3072 <mss 1460> 17:37:59.843964 IP 192.168.0.105.45065 > S 2163566778:2163566778(0) win 3072 <mss 1460> laptop.local.6103: S 2163566778:2163566778(0) laptop.local.898: 1460>

Komputerem skanujcym jest 192.168.0.105. Jak wida kolejne pakiety wysyane s w odstpach co dziesi sekund. Oczywicie wydua to znacznie skanowanie i sensowne jest uycie tej opcji wraz z nieduym zakresem portw, ale technika ta posiada pewne zalety. Przy sporym, dodatkowym ruchu sieciowym pakiety te mog zosta przeoczone nie tylko przez czowieka, ale rwnie przez system Firewall/IDS. Opcja max-retries 1 wyklucza kilkukrotne skanowanie jednego portu. Przy odpowiednim dobraniu parametrw scan-delay, max-retries oraz niewielkim zakresie portw -p skanowanie moe okaza si bardzo ciche oraz skuteczne. Sama informacja o stanie danego portu nie jest jeszcze pena. Usugi mog dziaa na innych portach ni standardowe (np. 21 ftp moe dziaa na porcie 80 http). Take w tym momencie nie mamy pewnoci, jaka usuga faktycznie komunikuje si za pomoc jakiego portu. Poza tym w wikszoci powyszych skanowa nie brano pod uwag innych portw ni wywietlone za pomoc agi -p programu nmap. Majc ju list niektrych usug dostpnych na serwerze, naley okreli wersj oprogramowania. Dobrze byoby poczy te dwa zadania, czyli przeskanowanie standardowych portw bez koniecznoci ich listowania oraz wstpne sprawdzenie, co tak naprawd pod danym portem si kryje. W tym celu skorzystamy z agi -sV. Dodatkowo uyjemy opcji -f odpowiedzialnej za fragmentowanie pakietw.
# nmap -sV -f 192.168.0.122 Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 16:48 CEST Interesting ports on 192.168.0.122: Not shown: 1692 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp? 22/tcp open ssh OpenSSH 4.6p1 Debian 5ubuntu0.6 (protocol 2.0) 80/tcp open http Apache httpd 2.2.8 Unix DAV/2 mod_ssl/2.2.8 OpenSSL/0.9.8e PHP/5.2.5 mod_apreq2-20051231/2.6.0 mod_perl/2.0.2 Perl/v5.10.0 443/tcp open ssl/http Apache httpd 2.2.8 ((Unix) DAV/2 mod_ssl/2.2.8 OpenSSL/0.9.8e PHP/5.2.5 mod_apreq2-20051231/2.6.0 mod_perl/2.0.2 Perl/v5.10.0) 3306/tcp open mysql MySQL (unauthorized) MAC Address: 00:16:CE:87:88:3A (Hon Hai Precision Ind. Co.) Servic e Info: OS: Linux

Skanowanie przynioso wiele informacji o uywanym na komputerze oprogramowaniu. Wida wersje oprogramowania, dowiadujemy si rwnie, e skanowany system jest pod kontrol Linuksa (mona przypuszcza, i jest to Ubuntu). Przy okazji wykryto dostpn kolejn usug w postaci serwera MySQL. Wiele szczegowych informacji poda nam serwer http. Jest nim Apache w wersji 2.2.8, z dostpnymi

7.3. Praktyczne zastosowania moduami mod_apreq2, mod_perl, mod_dav oraz z kryptogra opart na bibliotece OpenSSL w wersji 0.9.8e (mod_ssl). Znamy wersje moduw oraz wersj jzyka Perl, zainstalowanego na serwerze. Opcja -f opnia skanowanie, ale pozwala w pewnych sytuacjach omin systemy Firewall oraz IDS. Po stronie skanowanej fragment ruchu przychodzcego, podczas tego skanowania, wyglda nastpujco: ... 17:47:38.409942 IP 192.168.0.105.53590 > laptop.local.ftp: R 3004592011:3004592011(0) win 0 17:47:38.411182 IP 192.168.0.105.53590 > laptop.local.ftp: R 3004592011:3004592011(0) win 0 17:47:43.391709 IP 192.168.0.105.53593 > laptop.local.ftp: F 24:24(0) ack 1 win 183 <nop,nop,timestamp 23773821 9034748> 17:47:43.392028 IP 192.168.0.105.53594 > laptop.local.ftp: S 3304269998:3304269998(0) win 5840 <mss 1460,sackOK,timestamp 23773821 0,nop,wscale 5> 17:47:43.394759 IP 192.168.0.105.53594 > laptop.local.ftp: . ack 1 win 183 <nop,nop,timestamp 23773824 9035998> 17:47:43.395888 IP 192.168.0.105.53594 > laptop.local.ftp: P 1:61(60) ack 1 win 183 <nop,nop,timestamp 23773824 9035998> 17:47:43.410984 IP 192.168.0.105.53591 > laptop.local.ftp: R 3082401686:3082401686(0) win 0 17:47:43.412244 IP 192.168.0.105.53591 > laptop.local.ftp: R 3082401686:3082401686(0) win 0 17:47:48.396503 IP 192.168.0.105.53594 > laptop.local.ftp: F 61:61(0) ack 1 win 183 <nop,nop,timestamp 23778825 9035999> 17:47:48.398645 IP 192.168.0.105.53595 > laptop.local.ftp: S 3388790076:3388790076(0) win 5840 <mss 1460,sackOK,timestamp 23778825 0,nop,wscale 5> 17:47:48.409696 IP 192.168.0.105.53595 > laptop.local.ftp: . ack 1 win 183 <nop,nop,timestamp 23778832 9037250> 17:47:48.414004 IP 192.168.0.105.53595 > laptop.local.ftp: P 1:13(12) ack 1 win 183 <nop,nop,timestamp 23778837 9037250> 17:47:48.418264 IP 192.168.0.105.53592 > laptop.local.ftp: R 3158979442:3158979442(0) win 0 17:47:48.419288 IP 192.168.0.105.53592 > laptop.local.ftp: R 3158979442:3158979442(0) win 0 17:47:53.409143 IP 192.168.0.105.53595 > laptop.local.ftp: F 13:13(0) ack 1 win 183 <nop,nop,timestamp 23783837 9037253> ... Jak wida opcja -f odpowiedzialna jest za zupenie inny przebieg skanowania. Komputer 192.168.0.105 potrzebuje wysania wielu fragmentw pakietu, by sprawdzi jeden port (ftp). Po przeprowadzeniu powyszych testw mona by prawie pewnym co do systemu operacyjnego hosta 192.168.0.122 (laptop.local). Jest nim Linux Ubuntu. Jak

131

132

7. Skanowanie - sposb kontroli serwerw sieciowych pamitamy z pierwszego skanowania, oprcz tego hosta w sieci lokalnej dostpna jest rwnie brama sieciowa o adresie IP 192.168.0.1. Teraz naley przyjrze si temu systemowi. Bdziemy chcieli okreli usugi bramy sieciowej oraz jej system operacyjny. Z poprzednich skanowa mona przypuszcza, i jest to urzdzenie rmy D-Link (adres MAC na to wskazywa). # nmap -O 192.168.0.1 Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 16:05 CEST Interesting ports on 192.168.0.1: Not shown: 1695 closed ports PORT STATE SERVICE 80/tcp open http 515/tcp open printer MAC Address: 00:15:E9:02:71:B0 (D-Link) No exact OS matches for host (If you know what OS is running on it, see http://insecure.org/nmap/submit/ ). TCP/IP fingerprint: OS:SCAN(V=4.20%D=4/13%OT=80%CT=1%CU=36847%PV=Y%DS=1%G=Y% M=0015E9%TM=4BC47A2 OS:A%P=i686-redhat-linux-gnu)SEQ(SP=0%GCD=64%ISR=50%TI=BI%II= BI%SS=S%TS=U)O OS:PS(O1=M5B4%O2=M5B4%O3=M5B4%O4=M5B4%O5=M5B4%O6=M5B4)WIN(W1= 16D0%W2=16D0%W OS:3=16D0%W4=16D0%W5=16D0%W6=16D0)ECN(R=Y%DF=N%T=40%W=16D0% O=M5B4%CC=N%Q=)T OS:1(R=Y%DF=N%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=Y%DF=N%T=40% W=0%S=Z%A=S%F=AR% OS:O=%RD=0%Q=)T3(R=Y%DF=N%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0% Q=)T4(R=Y%DF=N%T=4 OS:0%W=0%S=A%A=S%F=AR%O=%RD=0%Q=)T5(R=Y%DF=N%T=40%W=0%S= Z%A=S+%F=AR%O=%RD=0 OS:%Q=)T6(R=Y%DF=N%T=40%W=0%S=A%A=S%F=AR%O=%RD=0%Q=)T7(R= Y%DF=N%T=40%W=0%S= OS:Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%TOS=0%IPL=38%U N=0%RIPL=G%RID=G%R OS:IPCK=G%RUCK=G%RUL=G%RUD=G)IE(R=Y%DFI=N%T=40%TOSI=Z%CD=S% SI=S%DLI=S)

Network Distance: 1 hop OS detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ . Nmap finished: 1 IP address (1 host up) scanned in 19.200 seconds

7.3. Praktyczne zastosowania

133

Skanowanie za pomoc omwionej wczeniej opcji -O ustalio otwarte porty bramy, adres MAC i odlego od naszego systemu. Otwartymi portami bramy s serwer http oraz serwer wydruku, a odlego od niej do naszego hosta to 1 przeskok. Niestety, jak wida nmap nie by w stanie zidentykowa systemu operacyjnego hosta. Otrzymalimy jedynie odcisk TCP/IP, ktry w przyszoci moe pomc deweloperom programu w dokadnym ustaleniu systemu. W tej sytuacji mona uy opcji osscan-guess, ktra sprbuje na podstawie tych danych okreli najbliszy podobny system do badanego. Oto wyniki skanowania z prb odgadnicia systemu na skanowanym hocie: # nmap -O osscan-guess 192.168.0.1

Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 16:44 CEST Interesting ports on 192.168.0.1: Not shown: 1695 closed ports PORT STATE SERVICE 80/tcp open http 515/tcp open printer MAC Address: 00:15:E9:02:71:B0 (D-Link) Device type: WAP|firewall|broadband router Running (JUST GUESSING) : D-Link embedded (92%), WatchGuard embedded (88%), Linksys embedded (85%) Aggressive OS guesses: D-Link DI-824VUP Wireless VPN Router (92%), Watchguard Firebox X5w firewall/WAP (88%), Linksys BEFSR41 WAP (85%) No exact OS matches for host (If you know what OS is running on it, see http://insecure.org/nmap/submit/ ). TCP/IP fingerprint: OS:SCAN(V=4.20%D=4/13%OT=80%CT=1%CU=35111%PV=Y%DS=1%G=Y% M=0015E9%TM=4BC4837 OS:4%P=i686-redhat-linux-gnu)SEQ(SP=0%GCD=64%ISR=50%TI=BI%II =BI%SS=S%TS=U)O OS:PS(O1=M5B4%O2=M5B4%O3=M5B4%O4=M5B4%O5=M5B4%O6=M5B4)WIN(W1 =16D0%W2=16D0%W OS:3=16D0%W4=16D0%W5=16D0%W6=16D0)ECN(R=Y%DF=N%T=40%W=16D0% O=M5B4%CC=N%Q=)T OS:1(R=Y%DF=N%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=Y%DF=N%T=40 %W=0%S=Z%A=S%F=AR% OS:O=%RD=0%Q=)T3(R=Y%DF=N%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0 %Q=)T4(R=Y%DF=N%T=4 OS:0%W=0%S=A%A=S%F=AR%O=%RD=0%Q=)T5(R=Y%DF=N%T=40%W=0% S=Z%A=S+%F=AR%O=%RD=0 OS:%Q=)T6(R=Y%DF=N%T=40%W=0%S=A%A=S%F=AR%O=%RD=0%Q=)T7( R=Y%DF=N%T=40%W=0%S= OS:Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%TOS=0%IPL=38% UN=0%RIPL=G%RID=G%R OS:IPCK=G%RUCK=G%RUL=G%RUD=G)IE(R=Y%DFI=N%T=40%TOSI=Z%CD=S%

134 SI=S%DLI=S)

7. Skanowanie - sposb kontroli serwerw sieciowych

Network Distance: 1 hop OS detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ . Nmap finished: 1 IP address (1 host up) scanned in 20.179 seconds Aplikacja nmap w tym skanowaniu podaa procentow pewno obecnoci na badanym komputerze jednego z trzech systemw: D-Link DI-824VUP Wireless VPN Router (92%), Watchguard Firebox X5w rewall/WAP (88%), Linksys BEFSR41 WAP (85%). Biorc pod uwag wynik tego skanowania oraz adres MAC, wszystko wskazuje na to, i badanym hostem jest urzdzenie rmy D-Link. Kolejnym ciekawym zastosowaniem nmap a jest skanowanie, w ktrym generowany jest dodatkowy ruch sieciowy, by ukry swoje dziaanie. Skanowanie z opcj -D pozwoli nam wysya zreplikowane skanowanie do hosta, podajc si za kilka hostw. W poniszym przykadzie uyto komendy nmap -D 192.168.0.111 192.168.0.122 , tak by skanowany host mia problem z odrnieniem faktycznie skanujcego go systemu: # nmap -D 192.168.0.111 192.168.0.122 Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 18:55 CEST Interesting ports on 192.168.0.122: Not shown: 1692 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 80/tcp open http 443/tcp open https 3306/tcp open mysql Flaga -D 192.168.0.111 nakazuje skanerowi zreplikowa pakiety i zmieni w nich adres rdowy na 192.168.0.111. Wwczas skanowany host, (192.168.0.122) ledzc ruch wejciowy, ujrzy: 18:57:19.948267 IP 192.168.0.105.43726 > S 1713102994:1713102994(0) win 1024 <mss 18:57:19.948944 IP 192.168.0.111.43726 > S 1713102994:1713102994(0) win 1024 <mss 18:57:19.953877 IP 192.168.0.105.43726 > S 1713102994:1713102994(0) win 1024 <mss 18:57:19.954563 IP 192.168.0.111.43726 > S 1713102994:1713102994(0) win 2048 <mss 18:57:19.960205 IP 192.168.0.105.43726 > S 1713102994:1713102994(0) win 4096 <mss laptop.local.canna: 1460> laptop.local.canna: 1460> laptop.local.850: 1460> laptop.local.850: 1460> laptop.local.5530: 1460>

7.3. Praktyczne zastosowania 18:57:19.962211 IP 192.168.0.111.43726 > S 1713102994:1713102994(0) win 3072 <mss 18:57:19.965671 IP 192.168.0.105.43726 > S 1713102994:1713102994(0) win 2048 <mss 18:57:19.966336 IP 192.168.0.111.43726 > S 1713102994:1713102994(0) win 2048 <mss 18:57:19.972353 IP 192.168.0.105.43726 > S 1713102994:1713102994(0) win 1024 <mss 18:57:19.974366 IP 192.168.0.111.43726 > S 1713102994:1713102994(0) win 2048 <mss 18:57:19.992671 IP 192.168.0.105.43726 > S 1713102994:1713102994(0) win 3072 <mss 18:57:19.994945 IP 192.168.0.111.43726 > S 1713102994:1713102994(0) win 3072 <mss 18:57:19.999714 IP 192.168.0.105.43726 > S 1713102994:1713102994(0) win 3072 <mss 18:57:20.000403 IP 192.168.0.111.43726 > S 1713102994:1713102994(0) win 2048 <mss 18:57:20.004793 IP 192.168.0.105.43726 > S 1713102994:1713102994(0) win 3072 <mss 18:57:20.005467 IP 192.168.0.111.43726 > S 1713102994:1713102994(0) win 4096 <mss ... laptop.local.5530: 1460> laptop.local.522: 1460> laptop.local.522: 1460> laptop.local.1373: 1460> laptop.local.1373: 1460> laptop.local.1349: 1460> laptop.local.1349: 1460> laptop.local.816: 1460> laptop.local.816: 1460> laptop.local.311: 1460> laptop.local.311: 1460>

135

Skanowany host bdzie mia problem z jednoznacznym ustaleniem, ktra maszyna go skanuje, poniewa pakiety przychodz naprzemiennie z dwch adresw IP. Oczywicie, w celu zmylenia komputera docelowego mona poda wicej adresw IP z opcj -D. Ostatnim przykadem uycia skanera nmap jest sfaszowanie prby skanowania. Pozwala nam na to opcja -S. Dziki niej mona ustawi adres rdowy pakietw skanujcych. Po zmianie tego adresu na inny (nie nasz), nie bdziemy w stanie sprawdzi, ktre porty s dostpne. Naszym celem bdzie imitacja skanowania ze strony bramy hosta 192.168.0.122 # nmap -e eth1 -S 192.168.0.1 badsum 192.168.0.122

WARNING: If -S is being used to fake your source address, you may also have to use -e <interface> and -P0 . If you are using it to specify your real source address, you can ignore this warning. Starting Nmap 4.20 ( http://insecure.org ) at 2010-04-13 19:11 CEST Uywajc tej opcji, najczciej bdziemy musieli zdeniowa uyty do transmisji interfejs sieciowy. Realizuje to aga -e. Dodatkowo uyto opcj badsum tak, by zwikszy szans odnotowania tego skanowania po stronie skanowanej. Analizujc ruch wejciowy, host 192.168.0.122 jest przekonany, e skanuje go brama sieciowa

136 (adres 192.168.0.1):

7. Skanowanie - sposb kontroli serwerw sieciowych

19:14:01.302510 IP 192.168.0.1.33124 > laptop.local.2023: S 2016873625:2016873625(0) win 1024 <mss 1460> 19:14:01.304616 IP 192.168.0.1.33124 > laptop.local.bprd: S 2016873625:2016873625(0) win 4096 <mss 1460> 19:14:01.305664 IP 192.168.0.1.33124 > laptop.local.891: S 2016873625:2016873625(0) win 4096 <mss 1460> 19:14:01.314524 IP 192.168.0.1.33124 > laptop.local.156: S 2016873625:2016873625(0) win 3072 <mss 1460> 19:14:01.320583 IP 192.168.0.1.33124 > laptop.local.82: S 2016873625:2016873625(0) win 1024 <mss 1460> 19:14:01.321600 IP 192.168.0.1.33124 > laptop.local.568: S 2016873625:2016873625(0) win 3072 <mss 1460> 19:14:01.322824 IP 192.168.0.1.33124 > laptop.local.953: S 2016873625:2016873625(0) win 4096 <mss 1460> 19:14:01.393653 IP 192.168.0.1.33125 > laptop.local.1007: S 2016808088:2016808088(0) win 4096 <mss 1460> 19:14:01.394729 IP 192.168.0.1.33125 > laptop.local.9992: S 2016808088:2016808088(0) win 4096 <mss 1460> 19:14:01.402529 IP 192.168.0.1.33125 > laptop.local.779: S 2016808088:2016808088(0) win 4096 <mss 1460> 19:14:01.404497 IP 192.168.0.1.33125 > laptop.local.2023: S 2016808088:2016808088(0) win 2048 <mss 1460> 19:14:01.406612 IP 192.168.0.1.33125 > laptop.local.891: S 2016808088:2016808088(0) win 4096 <mss 1460> 19:14:01.407818 IP 192.168.0.1.33125 > laptop.local.bprd: S 2016808088:2016808088(0) win 2048 <mss 1460> 19:14:01.416507 IP 192.168.0.1.33125 > laptop.local.156: S 2016808088:2016808088(0) win 3072 <mss 1460>

Spis rysunkw
2.1. Okno logowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Znak zachty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Przeczanie si midzy konsolami . . . . . . . . . . . . . . . . . . 2.4. Sprawdzenie nazwy zalogowanego uytkownika . . . . . . . . . . . 2.5. Zmiana hasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6. Lista aktywnych uytkownikw . . . . . . . . . . . . . . . . . . . . 2.7. Lista aktywnych uytkownikw z tytuami kolumn . . . . . . . . . 2.8. Wynik komendy w . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9. Wynik komendy last . . . . . . . . . . . . . . . . . . . . . . . . . . 2.10. Wynik komendy last dla jednego uytkownika . . . . . . . . . . . . 2.11. Skadnia komendy sprawdzajcej zainstalowan dystrybucj systemu Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.12. Komenda wywietlajca rozszerzon list uruchomionych procesw 2.13. Wszystkie procesy uytkownika user . . . . . . . . . . . . . . . . . 2.14. Wynik komendy top . . . . . . . . . . . . . . . . . . . . . . . . . . 2.15. Komenda koczca proces . . . . . . . . . . . . . . . . . . . . . . . 2.16. Komenda wymuszajca zakoczenie procesu . . . . . . . . . . . . . 2.17. Skadnia komendy cd . . . . . . . . . . . . . . . . . . . . . . . . . . 2.18. Ustalenie wartoci zmiennej rodowiskowej . . . . . . . . . . . . . . 2.19. Ustalenie wartoci zmiennej rodowiskowej . . . . . . . . . . . . . . 2.20. Przykad deniowania aliasu . . . . . . . . . . . . . . . . . . . . . . 2.21. Pobieranie wartoci zmiennej . . . . . . . . . . . . . . . . . . . . . 2.22. Poprawna konkatenacja zmiennej z cigiem znakw . . . . . . . . . 2.23. Bdna konkatenacja zmiennej z cigiem znakw . . . . . . . . . . 2.24. Wyczyszczenie zmiennej rodowiskowej . . . . . . . . . . . . . . . . 2.25. Usunicie zmiennej rodowiskowej . . . . . . . . . . . . . . . . . . . 2.26. Zmiana znaku zachty . . . . . . . . . . . . . . . . . . . . . . . . . 2.27. Zmieniony znak zachty . . . . . . . . . . . . . . . . . . . . . . . . 2.28. Powrt do domylnego wygldu znaku zachty . . . . . . . . . . . 2.29. Wykorzystanie polecenia sudo . . . . . . . . . . . . . . . . . . . . . 2.30. Instalowanie pakietu DEB . . . . . . . . . . . . . . . . . . . . . . . 2.31. Usunicie pakietu DEB . . . . . . . . . . . . . . . . . . . . . . . . 2.32. Fragment pliku /etc/sources.list . . . . . . . . . . . . . . . . . . . 2.33. Pobranie informacji o najnowszych pakietach . . . . . . . . . . . . 2.34. Instalacja pakietu yakuake . . . . . . . . . . . . . . . . . . . . . . . 2.35. Wyszykiwanie pakietw . . . . . . . . . . . . . . . . . . . . . . . . 2.36. Aktualizacja pakietw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10 11 12 12 13 13 13 14 14 15 15 15 16 16 17 17 18 19 19 19 20 20 20 20 21 21 21 22 23 23 23 24 25 25 26

138

SPIS RYSUNKW 2.37. Usuwanie pakietw . . . . . . . . . . . . . . . . . . . . 2.38. Komenda cat bez parametru . . . . . . . . . . . . . . 2.39. Przekierowanie strumienia wejcia . . . . . . . . . . . 2.40. Przekierowanie strumienia wejcia - nadpisanie pliku . 2.41. Przekierowanie strumienia wyjcia - dopisanie do pliku 2.42. Przykad zastosowania potokw . . . . . . . . . . . . . 2.43. Wywietlenie linii o numerach 101-105 z pliku plik.txt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 27 28 28 28 30 30 33 34 35 36 36 43 48 50 52 52 52 53 53 53 53 54 54 54 55 55 55 55 56 56

3.1. Wywietlenie treci dwch plikw . . . . . . . . . . . . . . . . . . . . 3.2. Wywietlenie dziesiciu pierwszych oraz dziesiciu ostatnich linii z listy zainstalowanych pakietw . . . . . . . . . . . . . . . . . . . . . 3.3. Skadnia komendy locate . . . . . . . . . . . . . . . . . . . . . . . . . 3.4. Wynik komendy locate dla pliku php.ini . . . . . . . . . . . . . . . . 3.5. Skadnia komendy nd . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6. Wzorzec odszukujcy wszystkie wystpienia adresw IP (v4) . . . . 3.7. Skadnia komendy grep . . . . . . . . . . . . . . . . . . . . . . . . . 3.8. Skadnia komendy sed . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9. Przygotowanie listy powok wykorzystywanych przez uytkownikw systemu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10. Zamiana miejscami imienia i nazwiska . . . . . . . . . . . . . . . . . 3.11. Przykad wykorzystania znaku & do duplikowania szukanego tekstu 3.12. Zastpienie znaku % odwoaniem wstecznym . . . . . . . . . . . . . 3.13. Zastpienie tylko 10 wystpienia wyraenia . . . . . . . . . . . . . . 3.14. Wywietlenie tylko pocztku wiersza . . . . . . . . . . . . . . . . . . 3.15. Zapisanie wyniku do pliku . . . . . . . . . . . . . . . . . . . . . . . . 3.16. Ukrycie znakw numer 11 i nastpnych, ale tylko w 25 wierszu . . . 3.17. Ukrycie znakw numer 11 i nastpnych w wierszach o numerach od 15 do 25 wcznie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.18. Ukrycie znakw numer 11 i nastpnych w wierszach uytkownikw, ktry korzystaj z powoki /bin/sh . . . . . . . . . . . . . . . . . . . 3.19. Zmiana separatora . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.20. Ukrycie wierszy z przedziaw okrelonych wyraeniami . . . . . . . 3.21. Ukrycie wierszy od pocztku pliku do wiersza z cigkiem znakw koniec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.22. Ukrycie wierszy od wiersza z cigiem znakw poczatek do koca pliku 3.23. Przykadowe uycie grupowania polece . . . . . . . . . . . . . . . . 3.24. Ukrycie tylko tych wierszy, w ktrych nie ma cigu znakw zostawiamy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. Nadanie wacicielowi prawa do wykonywania pliku . . . . . . . . 4.2. Uruchomienie skryptu ze specjalnym komentarzem oraz prawami do wykonywania pliku . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Uruchomienie skryptu bez specjalnego komentarza . . . . . . . . 4.4. Aktualizacja zmiennej rodowiskowej PATH . . . . . . . . . . . 4.5. Uruchomienie skryptu z arumentami wywoania . . . . . . . . . . 4.6. Skadnia polecenia exit . . . . . . . . . . . . . . . . . . . . . . . . 4.7. Skadnia polecenia read . . . . . . . . . . . . . . . . . . . . . . .

. . 61 . . . . . . . . . . . . 62 62 62 66 68 69

SPIS RYSUNKW 5.1. Instalacja apache2 . . . . . . . . . . . . . . . . . . . . . . 5.2. Werykacja zainstalowania pakietu apache2 . . . . . . . . 5.3. Werykacja zainstalowania pakietu apache2 - dpkg . . . . 5.4. Strona startowa serwera apache2 . . . . . . . . . . . . . . 5.5. Zmienna ServerRoot . . . . . . . . . . . . . . . . . . . . . 5.6. Zminne do moduw MPM . . . . . . . . . . . . . . . . . 5.7. Zmienne serwera apache2 . . . . . . . . . . . . . . . . . . 5.8. Plik konguracyjny envvars . . . . . . . . . . . . . . . . . 5.9. Plik konguracyjny .htaccess . . . . . . . . . . . . . . . . 5.10. Plik konguracyjny conf.d/security . . . . . . . . . . . . . 5.11. Plik konguracyjny apache2 - zapisy kontrolne, dyrektywa 5.12. Lista dostpnych moduw . . . . . . . . . . . . . . . . . . 5.13. Lista dostpnych moduw . . . . . . . . . . . . . . . . . . 5.14. Inna metoda wywietlania moduw apacha2 . . . . . . . 5.15. Zawarto pliku wskazujcego ciek moduu apacha2 . . 5.16. Plik konguracyjny wirtualnego hosta . . . . . . . . . . . 5.17. Konguracja wirtualnego hosta . . . . . . . . . . . . . . . 5.18. Wczanie obsugi protokou TLS . . . . . . . . . . . . . . 5.19. Konguracja wirtualnego hosta www.tls-demo.pl - cz 1 5.20. Konguracja wirtualnego hosta www.tls-demo.pl - cz 2 5.21. Konguracja wirtualnego hosta www.tls-demo.pl - cz 3 5.22. Wycznie domylnej obsugi protokou TLS . . . . . . . . 5.23. Wczenie obsugi domeny tls-demo-ssl . . . . . . . . . . . 5.24. Wpis w pliku hosts . . . . . . . . . . . . . . . . . . . . . . 5.25. Pobieranie pakietu ssl-cert . . . . . . . . . . . . . . . . . . 5.26. Zawarto pliku ssleay.cnf . . . . . . . . . . . . . . . . . . 5.27. Tworzenie certykatu dla witryny tls-demo.pl . . . . . . . 5.28. Okno programu make-ssl-cert . . . . . . . . . . . . . . . . 5.29. Zawarto wygenerowane pliku z kluczami . . . . . . . . . 5.30. Przenoszenie kluczy do osobnych plikw . . . . . . . . . . 5.31. Zmiana prawa dostpu do klucza . . . . . . . . . . . . . . 5.32. Okrelenie lokalizacji kluczy w systemie . . . . . . . . . . 5.33. Ponowne wczytanie konguracji przez serwer apache2 . . 5.34. Certykat witryny www.tls-demo.pl . . . . . . . . . . . . 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. 6.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 84 84 85 86 88 88 89 89 90 91 92 92 93 93 94 95 95 96 97 97 98 98 98 98 99 99 100 100 101 101 101 101 102

139

Tablica regu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zasada ltrowania pakietw . . . . . . . . . . . . . . . . . . . . . . Budowa regu - tablica lter . . . . . . . . . . . . . . . . . . . . . . Regua iptables - Akceptowanie pocze w roli klienta z serwerami ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regua iptables (stan poczenia) - Akceptowanie pocze w roli klienta z serwerami ssh . . . . . . . . . . . . . . . . . . . . . . . . Przykadowe translacje SNAT . . . . . . . . . . . . . . . . . . . . . Przykadowe translacje DNAT . . . . . . . . . . . . . . . . . . . . Architektura sieci wewntrznej wraz z bram . . . . . . . . . . . .

. 104 . 105 . 106 . 106 . . . . 107 108 108 113

Spis skryptw
4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 4.21 4.22 4.23 4.24 4.25 4.26 4.27 4.28 4.29 4.30 Pusty skrypt powoki . . . . . . . . . . . . . . . . . . . . . . . . . . Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hello World bez specjalnego komentarza . . . . . . . . . . . . . . . Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Poprawna i niepoprawne denicje zmiennych . . . . . . . . . . . . Pobranie i wywietlenie wartoci zmiennej . . . . . . . . . . . . . . Konkatenacja stringw - Problem . . . . . . . . . . . . . . . . . . . Konkatenacja stringw - Rozwizanie . . . . . . . . . . . . . . . . . Zmienne tablicowe . . . . . . . . . . . . . . . . . . . . . . . . . . . Wykorzystanie argumentw wywoania skryptu . . . . . . . . . . . Przykad wywoania polecenia w skrypcie . . . . . . . . . . . . . . Przykad wywoania polecenia w skrypcie . . . . . . . . . . . . . . Wykorzystanie zmiennej $? . . . . . . . . . . . . . . . . . . . . . . Wczytywanie wielu zmiennych . . . . . . . . . . . . . . . . . . . . . Obliczanie wyrae arytmetycznych . . . . . . . . . . . . . . . . . Obliczanie wyrae logicznych . . . . . . . . . . . . . . . . . . . . . Skadnia instrukcji if . . . . . . . . . . . . . . . . . . . . . . . . . . Przykad uycia wyraenia logicznego w instrukcji if . . . . . . . . Skadnia ptli while i until. . . . . . . . . . . . . . . . . . . . . . . Przykady wykorzystania ptli while i until. . . . . . . . . . . . . . Skadnia ptli for dla listy . . . . . . . . . . . . . . . . . . . . . . . Rne rodzaje listy w ptli for . . . . . . . . . . . . . . . . . . . . Skadnia zoonej ptli for . . . . . . . . . . . . . . . . . . . . . . . Przykady wykorzystania zoonej ptli for . . . . . . . . . . . . . Przykady wykorzystania instrukcji break oraz continue . . . . . . Skadnia instrukcji case . . . . . . . . . . . . . . . . . . . . . . . . Przykad wykorzystania instrukcji case . . . . . . . . . . . . . . . . Wywietlenie dowolnego przedziau linii w pliku . . . . . . . . . . . Usunicie plikw niewykonywalnych z katalogu podanego jako parametr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.31 Usunicie pustych plikw z katalogu podanego jako parametr oraz stworzenie listy usunitych plikow . . . . . . . . . . . . . . . . . . . 4.32 Skrypt wczytuje liczby z pliku i wypisuje ich maksimum, minimum oraz sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.33 Skrypt oblicza liczb Fibbonacciego, ktrej numer jest podany jako parametr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 61 62 63 63 63 64 64 64 65 66 67 67 68 69 70 71 71 73 74 74 75 75 76 76 77 77 78 78

. 78 . 79 . 79 . 80

SPIS SKRYPTW 4.34 Zmiana liter z duych na mae w plikach znajdujcych si w katalogu podanym w parametrze . . . . . . . . . . . . . . . . . . . . 81

141

Bibliografia
[1] [2] [3] [4] M. Stutz: Linux - Najlepsze przepisy, Helion, Gliwice, 2005 A. Robbins, N. H. F. Beebe: Programowanie skryptw powoki, Helion, Gliwice, 2006 Openssl Project: http://www.openssl.org/ B.Ksiopolski, Z.Kotulski - Bezpieczestwo e-urzdu - Centrum Certykacji, Wspczesne Problemy Systemw Czasu Rzeczywistego, Rozdzia 31, str. 349-359, Wydawnictwa Naukowo-Techniczne, Warszawa 2004 [5] Iptables: http://www.netlter.org/ [6] Nmap Home Page: nmap.org/ [7] Hping - Active Network Security Tool: www.hping.org/

Anda mungkin juga menyukai