Notice: Use of undefined constant d - assumed 'd' in /home/admin/domains/katolik.pl/public_html/komputer/showa.php on line 2

Notice: Undefined variable: menu in /home/admin/domains/katolik.pl/public_html/komputer/menu.inc on line 23

Notice: Undefined variable: szczegoly in /home/admin/domains/katolik.pl/public_html/komputer/showa.inc on line 28
 

   Linuxowe
 powrót
Sposoby na Pingwina

Sposoby na Pingwina

Linux to OS jak każdy inny - dobre i wydajne zarządzanie nim wymaga zatem nieco wiedzy i sporo wprawy. Na szczęście w każdej dystrybucji tego systemu znajdziemy nadmiar narzędzi, które pomogą nam w tym zadaniu.

Każdy, kto choć raz zetknął się z Linuksem (czy innym systemem uniksowym, np. BSD), przekonał się o różnicach w administracji pomiędzy tym OS-em a Okienkami Microsoftu. Wynikają one nie tylko z odmiennej filozofii działania wymienionych systemów. Przyczyną różnic jest również to, że efektywne zarządzanie Windows wymaga skompletowania szeregu dodatkowych narzędzi, które w Linuksie dostajemy wraz z używaną dystrybucją.

Fakt ten nie oznacza bynajmniej, że administracja Linuksem jest zadaniem banalnym. Warto zatem na początek zapoznać się z kilkunastoma najczęściej używanymi narzędziami administracyjnymi. Programy systemowe trzeba bowiem poznać, a to z kolei skutkuje często koniecznością zrozumienia zasad, jakie rządzą działaniem Pingwina.

Omawiane w artykule programy i polecenia podzielono na trzy grupy: narzędzia stricte systemowe, aplikacje pomocne w konfiguracji sieci oraz programy służące do zapewnienia bezpieczeństwa użytkownikom OS-u. Chwilami zakresy zastosowań poszczególnych narzędzi przenikają się. Nie ma w tym jednak niczego dziwnego, bo na przykład bezpieczeństwo systemu zależy zarówno od uprawnień użytkowników, jak i jakości zapory ogniowej.

Wspólną cechą wszystkich opisanych w tym artykule aplikacji jest to, że możemy je znaleźć w znakomitej większości dystrybucji Linuksa. Nawet jeśli niektóre nie zainstalują się po wybraniu domyślnej konfiguracji systemu, to z łatwością odnajdziemy je na płytach z pakietami lub na serwerach FTP naszej odmiany Pingwina.

Celem niniejszego tekstu nie jest opisanie wszystkich narzędzi, które powinien znać dobry administrator Linuksa - wymagałoby to po prostu zapełnienia opisami i przykładami użycia aplikacji sporej grubości książki. Starałem się raczej wybrać programy ważne, niekoniecznie bardzo popularne, ale z jakiegoś powodu warte poznania. Zawsze natomiast można skorzystać ze źródeł podanych w ramce na końcu artykułu, przejrzeć kilka stron WWW poświęconych Linuksowi i - przede wszystkim - stosować się do znanej i często powtarzanej przez bywalców grup dyskusyjnych zasady RTM (Read The Manual). Z oczywistych względów użycie w zasadzie wszystkich opisanych tu narzędzi będzie wymagało uprawnień roota. 


Narzędzia systemowe

Choć maszyna linuksowa w większości wypadków pracuje w sieci lokalnej lub w Internecie, administrację nią powinniśmy zacząć od uporządkowania "lokalnej" sytuacji. Zawsze bowiem należy się liczyć z niepoprawnym działaniem urządzeń, wyczerpaniem się zasobów maszyny czy niesfornością użytkowników. Dlatego też wycieczkę po meandrach zarządzania OS-em zaczniemy od typowo systemowych narzędzi, umożliwiających kontrolę nad katalogami, uprawnieniami użytkowników oraz działającymi w tle usługami.
 
Wyłączamy niepotrzebne usługi
Konfigurację każdego systemu operacyjnego, szczególnie podłączonego do jakiejkolwiek sieci, należy rozpocząć od wyłączenia niepotrzebnych usług systemowych. Wprawdzie dzisiejsze instalatory zwracają uwagę użytkownika na to, jakie serwisy będą działały w systemie, to v zazwyczaj przydaje się jednak rzut oka na stan OS-u już po jego zainstalowaniu.

Szukając działających w tle usług, powinniśmy zajrzeć w kilka miejsc. Przede wszystkim używamy popularnego polecenia wyświetlającego działające procesy - ps -ax. Ponadto warto przeanalizować zawartość pliku /etc/inetd.conf, czyli zbioru konfiguracyjnego "superserwera" sieciowego inetd, uruchamiającego większość usług sieciowych.

Gdy już odnajdziemy zbędne usługi, należy je zatrzymać (poleceniem typu /etc/rc.d/init.d/nfsd stop), a następnie usunąć stosowne wpisy z katalogu /etc/rc.d oraz z pliku /etc/inetd.conf. Zamiennie możemy użyć jednego z tekstowych lub graficznych narzędzi konfiguracyjnych dołączanych do naszej dystrybucji (takich jak YaST w SuSE czy Centrum sterowania w Mandrake'u). Po ponownym uruchomieniu OS-u sprawdzamy, czy nasze działania odniosły pożądany skutek.
 

Dodatkowe atrybuty plików
Większość użytkowników Linuksa zetknęła się z parą narzędzi chmod i chown, pozwalających na szczegółowe przydzielenie uprawnień do plików i katalogów poszczególnym użytkownikom systemu. Wiele osób nie zna natomiast działającego na systemach plików ext2/ext3 narzędzia chattr (e2fsprogs.sourceforge.net) określającego dodatkowe atrybuty zbiorów. Przykładowo: wywołanie programu w postaci:

chattr +i plik.cfg

spowoduje, że pliku nie będzie mógł zmienić (a więc również usunąć) żaden użytkownik systemu, nawet root. Z kolei parametr +A zablokuje uaktualnianie daty modyfikacji zbioru. Pełen zestaw opcji programu chattr można znaleźć w pomocy systemowej (man chattr). Do wyświetlania rozszerzonych atrybutów plików służy program lsattr. 

Polecenia ułatwiające zarządzanie systemem

ps - Wyświetlanie uruchomionych procesów systemowych ps -t tty1,tty2 - wszystkie procesy uruchomione w terminalach tty1 i tty2

chattr - Rozszerzone atrybuty plików w systemach ext2/ext3 chattr +a plik.txt - zbiór plik.txt będzie można modyfikować tylko w trybie dodawania danych (append)

sudo - Uruchamianie programów z uprawnieniami innych użytkowników sudo nazwa_programu - uruchomienie programu zdefiniowanego wcześniej programem visudo

df - Procent wolnego miejsca na zamontowanych partycjach df /dev/hda - ilość wolnego miejsca na dysku /dev/hda

du - Prezentacja objętości poszczególnych katalogów na dysku du -sh * - sumaryczne objętości wszystkich podkatalogów aktualnego katalogu

hdparm - Dostrajanie sterownika dysku twardego hdparm -Tt /dev/hda - test czasu buforowanego/niebuforowanego do dostępu urządzenia /dev/hda


Podaruj innym swoje uprawnienia, czyli używaj sudo

W normalnie działających systemach (zwłaszcza tych, które są instalowane na komputerach domowych lub biurowych) bardzo często konieczne jest przydzielenie zwykłym użytkownikom niektórych uprawnień roota. Pomaga w tym sudo (www.sudo.ws) - program tak samo często chwalony, jak krytykowany. Trzeba sobie powiedzieć jasno, że - jakkolwiek zdarzały się w tej aplikacji "dziury" - większość problemów z bezpieczeństwem systemu wynika z błędnej konfiguracji sudo, a nie z natury jego działania. Spróbujmy zatem przyjrzeć się tej aplikacji nieco bliżej.

Sudo to nic innego, jak program uruchamiający określone aplikacje "w imieniu" użytkownika root. To, które są to aplikacje i którym użytkownikom wolno z nich korzystać, określa plik konfiguracyjny sudo. Może go edytować wyłącznie root, i to za pośrednictwem specjalnego narzędzia - visudo. Program ten wykorzystuje edytor vi/vim, zatem przed użyciem sudo konieczne jest przynajmniej pobieżne zapoznanie się ze wspomnianym edytorem. Wpis w visudo ma zawsze postać:

user1 host=(user2) program

Należy to rozumieć następująco: użytkownik user1 może wykonać na maszynie host aplikację o nazwie program z uprawnieniami użytkownika user2. Domyślnie w pliku konfiguracyjnym sudo znajduje się zawsze wpis w rodzaju:

root ALL=(ALL) ALL
Oznacza on, że użytkownik root może używać dowolnego programu z uprawnieniami każdego użytkownika
systemu, na którym umieścimy taki wpis konfiguracyjny. Jeśli natomiast dopiszemy w visudo wiersz:

emil localhost=(root) /sbin/
ifconfig

to użytkownik emil, wydając w lokalnym systemie np. polecenie sudo /sbin/ifconfig eth0, będzie mógł obejrzeć parametry interfejsu sieciowego o nazwie eth0.
 

Kto zajmuje miejsce na dysku?
Jednym z podstawowych zadań administratora jest kontrolowanie na bieżąco ilości wolnego miejsca na dyskach. Podstawowym poleceniem, którego używa się do tego celu, jest df, jednak informuje nas ono o wolnym miejscu na poszczególnych partycjach, a nie pozwala zdiagnozować przyczyn braku wolnych megabajtów. Jeśli chcemy się przekonać, który program czy użytkownik zajmuje przestrzeń dyskową, powinniśmy skorzystać z narzędzia du.

Tej ostatniej aplikacji warto użyć z odpowiednimi opcjami, najlepiej posiłkując się dodatkowo np. programem sort (www.gnu.org/software/coreutils). Jeżeli przykładowo chcemy wyświetlić pięć podkatalogów zajmujących najwięcej miejsca w danym katalogu, możemy użyć polecenia:

du -cksh * | sort -rn | head -6

Opis wszystkich parametrów programów du, sort i head znajdziemy w podręczniku systemowym (man du, man sort, man head). Mówiąc w skrócie, wyniki działania polecenia du są sortowane malejąco, a na ekranie wyświetlanych jest sześć pierwszych wierszy (suma miejsca zajmowanego przez wszystkie podkatalogi bieżącego katalogu i pięć podkatalogów zabierających najwięcej miejsca). Warto dopasować podany przykład użycia du do własnych potrzeb i dopisać do pliku .profile alias do takiego polecenia.
 

Dostrajanie "twardziela"
Wydawałoby się, że dysk twardy to na tyle standardowy element peceta, iż jakakolwiek software'owa konfiguracja tego komponentu nie jest potrzebna. Linux pozwala jednak nieco dostroić "twardziela" - jest to szczególnie przydatne w sytuacjach, gdy urządzenia HDD pracują zauważalnie wolniej, niż powinny. Do usprawnienia pracy dysków możemy użyć polecenia hdparm. Uwaga: w skrajnych przypadkach niewłaściwe użycie tego narzędzia może spowodować utratę danych. Warto zatem przed rozpoczęciem eksperymentów wykonać kopię najważniejszych plików i uruchomić Linuksa w trybie jednego użytkownika.

Hdparm pozwoli nam nie tylko dostroić działanie dysku, ale i sprawdzić wynik naszych działań. Test aktualnej wydajności urządzenia najlepiej przeprowadzić za pomocą polecenia:

hdparm -Tt /dev/hda

co spowoduje sprawdzenie czasów odczytu danych znajdujących się w pamięci podręcznej dysku (parametr -T) oraz danych niebuforowanych (opcja -t). Pomiar najlepiej przeprowadzić kilkakrotnie.
Jeśli się okaże, że wyniki znacznie odbiegają od parametrów nominalnych danego dysku (a dosyć często tak się zdarza z powodu domyślnej, czyli bezpiecznej konfiguracji urządzenia), możemy przyjrzeć się ustawieniom wyświetlanym po wpisaniu polecenia:

hdparm /dev/hda

Warto przeanalizować zwłaszcza parametry multcount (liczba sektorów pobieranych w czasie jednego odczytu), IO_support (tryb współpracy dysku z magistralą PCI) oraz using_dma (wykorzystanie mechanizmu DMA). Po przejrzeniu dokumentacji urządzenia i pomocy systemowej do polecenia hdparm (man hdparm) możemy poeksperymentować z ustawieniami - ciągle pamiętając o tym, że nieprawidłowe parametry mogą się skończyć np. zawieszeniami systemu. Na szczęście w przypadku wystąpienia problemów wystarczy zrestartować komputer - aby zmienić parametry dysku na stałe, musimy wpisać odpowiednie wywołanie programu hdparm, np. do któregoś z plików startowych naszego systemu (najlepiej do rc.local lub jego odpowiednika).

Skrypty konfiguracyjne w Linuksie

Trudno sobie wyobrazić administrowanie systemem uniksowym bez pomocy skryptów konfiguracyjnych. Towarzyszą one zatem zarówno uniksowemu rootowi, jak i zwykłym użytkownikom tego OS-u na każdym kroku - choć być może czasem nawet nie zwracamy na to szczególnej uwagi.
Zgłębiając tajniki zarządzania Linuksem, warto poznać podstawy tworzenia programów skryptowych. Najprościej zacząć od krótkich programów złożonych z poleceń shella (np. niezwykle popularnego basha) - pomogą nam w tym podręcznik systemowy (man bash) i liczne poradniki zamieszczane w Internecie przez entuzjastów systemu z pingwinem w herbie. Skrypty basha nie są może zbyt wydajne i elastyczne w użyciu, ale do większości prostych zadań w zupełności wystarczają.
Kolejny krok to zapoznanie się z zaawansowanymi językami skryptowymi, takimi jak Python (
www.python.org) czy Perl (www.cpan.org).
Są to bardzo wydajne narzędzia, które - choć stworzono je z zamiarem ułatwienia przetwarzania tekstu czy uelastycznienia zarządzania systemem - stanowią dziś pełnoprawne środowiska programistyczne. Dzięki istnieniu interpreterów dla różnych systemów operacyjnych i platform (np. modułów serwera WWW Apache) oraz niezliczonych bibliotek programistycznych w Pythonie i Perlu możemy pisać programy działające w konsoli tekstowej, aplikacje okienkowe, multimedialne, skrypty zaszyte na stronach WWW itd.
Wymienione języki nie są jedynymi, których może używać linuksowy "admin" - choć cieszą się prawdopodobnie największą popularnością. Inne przykłady opensource'owych wynalazków w dziedzinie "skryptowania" to chociażby awk, Tcl/Tk czy LISP.
 

Zarządzanie siecią

Administracja serwerem linuksowym polega w dużej mierze na zapewnieniu prawidłowego i bezpiecznego działania usług sieciowych. Linux pełni często funkcję routera sieciowego i/lub serwera usług, takich jak poczta elektroniczna, WWW czy news. Ponieważ opisywany system może się poszczycić w pełni sieciowym rodowodem, trudno się dziwić, że udostępnia on użytkownikom całą masę narzędzi służących do konfiguracji wszelkich aspektów sieci.
 
Klasyka interfejsów sieciowych
Dawno już minęły czasy, kiedy prawidłowe skonfigurowanie połączenia sieciowego w Linuksie wymagało nierzadko kompilacji jądra i napisania kilku skryptów systemowych. Dzisiaj większość koniecznych czynności wykonają za nas instalator systemu i graficzne, zautomatyzowane narzędzia konfiguracyjne. Niemniej zdarzają się sytuacje, że diagnoza i naprawa błędnie działającego routingu czy interfejsu sieciowego wymaga skorzystania z konsolowych narzędzi (przy ich użyciu jest też zwyczajnie szybsza i bardziej efektywna). Dlatego warto zapoznać się w wolnej chwili z takimi programami, jak ifconfig i route.

Pierwsza z wymienionych aplikacji to podstawowe narzędzie konfiguracji interfejsów sieciowych. Użyta bez parametrów wyświetla konfigurację aktywnych interfejsów, opcja -a powoduje pojawienie się na liście również interfejsów nieaktywnych. Możemy także dokładnie określić interfejs oraz operację, którą chcemy wykonać w odniesieniu do niego. Jeśli np. zamierzamy wyłączyć interfejs eth0 (pierwsza karta sieciowa), używamy polecenia:

ifconfig eth0 down

Program oferuje znacznie więcej opcji - pozwala m.in. na nadanie interfejsowi określonego adresu IP, maski sieciowej i adresu rozgłoszeniowego (broadcast), jak również na konfigurację karty sieciowej (np. na ustalenie numeru przerwania wykorzystywanego przez urządzenie). Szczegóły - jak zwykle - można znaleźć w podręczniku systemowym (man ifconfig).

Do ustalania zawartości tzw. tablicy routingu (czyli tablicy, według której są w systemie przekierowywane pakiety sieciowe) służy polecenie route. Wydane bez parametrów powoduje wyświetlenie zawartości tabeli routingu. Podstawowe opcje polecenia to add i del, służące odpowiednio do dodawania i usuwania wpisów we wspomnianej tabeli. W systemie powinna istnieć tzw. trasa domyślna (dodawana poleceniem w postaci route add -net default gw GATEWAY, gdzie GATEWAY to adres bramy sieciowej), wskazująca najczęściej interfejs łączący komputer/sieć lokalną z Internetem. Warto przy okazji wspomnieć o pliku /etc/named.conf, w którym przechowywane są adresy wykorzystywanych przez nasz komputer serwerów nazw (DNS). Jeżeli korzystamy z technologii automatycznego przydziału adresów IP (DHCP), numery IP serwerów nazw zazwyczaj są pobierane automatycznie.
 

Co "słychać" w sieci?
Jednym z bardziej wszechstronnych uniksowych narzędzi sieciowych jest netstat. Wspomnieliśmy o nim przy okazji konfiguracji uruchamianych usług - netstat uruchomiony z opcjami -ln pozwala wyświetlić otwarte porty naszej maszyny wraz z nazwami nasłuchujących na nich serwerów. Składnia nestat -rn zastępuje z kolei polecenie route, czyli podaje zawartość tabeli routingu (zaletą w porównaniu z route jest fakt, iż netstat jest zazwyczaj dostępny dla wszystkich użytkowników OS-u). netstat -i wyświetla listę aktywnych interfejsów sieciowych, a netstat -M - listę połączeń realizowanych za pośrednictwem maskarady (czyli linuksowej wersji usługi NAT). Lista opcji narzędzia jest bardzo długa - warto choć raz dokładnie przejrzeć podręcznik systemowy, aby w razie potrzeby wiedzieć, gdzie szukać pomocy w trudnych sytuacjach.
 

Łączenie zdalne
W czasach gdy Internet był jeszcze wspólnotą zapaleńców eksplorujących możliwości globalnej Sieci, funkcjonowało sporo różnych metod zdalnego logowania się do sieciowego hosta. Najpopularniejszą było skorzystanie z usługi Telnet, która jednak odeszła w niepamięć w momencie nasilenia się sieciowego wandalizmu. Dziś jedyną zalecaną metodą kontaktu z shellem serwera uniksowego jest użycie zapewniającego bezpieczną autoryzację użytkownika i szyfrowanie przesyłanych informacji protokołu SSH.
      W każdej dystrybucji Linuksa znajdziemy zarówno klienta, jak i serwer SSH. Użycie klienta jest bardzo proste - wystarczy wpisać polecenie:

ssh -l użytkownik adres_hosta

i po zgłoszeniu się zdalnego hosta wpisać hasło do swojego konta. Co ciekawe, odpowiednia konfiguracja serwera SSH (dokładniej: zezwolenie na tunelowanie pakietów serwera X11 i uruchomienie samego serwera X Window) umożliwia użycie w programie ssh opcji -X. Dzięki temu po zalogowaniu się na serwerze możemy uruchomić na nim dowolny program korzystający z linuksowych okienek (oczywiście w tym wypadku logować się należy z konsoli tekstowej lokalnych X-ów).

Również użycie serwera SSH nie jest szczególnie skomplikowane - instalacja z pakietu RPM/DEB umożliwi automatyczną konfigurację demona sshd (w tym wygenerowanie kluczy kryptograficznych) i jego uruchomienie. Powinniśmy jedynie dostroić serwer do własnych wymagań (modyfikując plik /etc/ssh/ssh_config) oraz dbać o jego regularne uaktualnianie.
     

Netfilter, czyli podstawy bezpieczeństwa sieciowego
Jedną z ogromnych zalet Linuksa jest dostępna standardowo w systemie solidna (choć stosunkowo nieskomplikowana i dzięki temu szybka) zapora ogniowa. Mowa tu o mechanizmie netfilter będącym składnikiem jądra systemowego. Jego aktualna odmiana o nazwie iptables (następca ipchains) jest obecnie podstawowym narzędziem blokowania niepożądanego ruchu IP w opensource'owych systemach uniksowych.
Działanie iptables jest oparte na zestawie konfigurowanych przez administratora regułek. Zasady te pozwalają na kontrolę ruchu wchodzącego i wychodzącego z naszej sieci, przekierowanie pakietów pomiędzy komputerami i ich portami (ten mechanizm jest wykorzystywany do implementacji linuksowej wersji usługi NAT, czyli maskarady), wykrywanie i ograniczanie skutków najczęstszych ataków (np. DoS) oraz efektów działania robaków sieciowych (dzięki możliwości odfiltrowania pakietów o określonej zawartości).
W miarę wprawny administrator linuksowej zapory ogniowej w ciągu godziny czy dwóch skonfiguruje w sieci lokalnej usługę NAT, "przezroczyste" proxy (transparent proxy), dostroi trasy pakietów sieciowych, adresowanych do serwerów różnych usług (czyli - innymi słowy - rozłoży równomiernie natężenie ruchu w LAN-ie), zablokuje potencjalne próby ataku i zapobiegnie przeciążeniom newralgicznych punktów sieci.
Iptables to mechanizm w dużym stopniu konfigurowalny i skalowalny. Możliwe jest tworzenie własnych tzw. łańcuchów, łączących w całość mniejsze regułki. Choć na pierwszy rzut oka zasady komponowania regułek iptables wydają się skomplikowane, wrażenie to mija po krótkim czasie ich używania. Można zresztą posiłkować się którymś z wielu graficznych narzędzi ułatwiających konfigurację firewalla, jednak najefektywniejsze będzie (prawie) zawsze ręczne utworzenie odpowiednich regułek. 


Przydatne drobiazgi
Wśród wielu różnych narzędzi sieciowych warto wymienić niewielkie programy pomagające w diagnozowaniu połączenia i sprawdzaniu aktualnego statusu innych komputerów w Sieci. O programie ping słyszeli chyba wszyscy, ale z pewnością niewiele osób zna wszystkie opcje uniksowej wersji tego narzędzia. Pozwala ono m.in. używać do "pingowania" adresu rozgłoszeniowego (dzięki opcji -b), co może być przydatne, gdy chcemy szybko sprawdzić status wszystkich maszyn w podsieci. Inne ciekawe opcje tej aplikacji to m.in. -p (pozwala na podanie szablonu zawartości pakietu ICMP), -i (podaje odstęp w sekundach pomiędzy kolejnymi pakietami) czy -I (wyświetla adres źródłowy w wysyłanych pakietach). Użycie programu ping jest również najprostszą metodą poznania adresu IP hosta, którego nazwę podamy w wywołaniu polecenia. Jedyna wada narzędzia to fakt, iż wielu administratorów serwerów internetowych blokuje odpowiadanie na pakiety ICMP w obawie przed potencjalnymi próbami ataków sieciowych.
      Jeśli chcemy poznać adres IP hosta, mimo że nie odpowiada on na żądania aplikacji ping, możemy skorzystać z narzędzia dig. Wywołanie w postaci:

dig www.chip.pl

zwróci (w sekcji ANSWER SECTION) adres IP serwera o podanej nazwie. Program ma dodatkową zaletę - skorzystanie polecenia:

dig -x 213.180.130.200

spowoduje próbę odszukania w DNS-ach nazwy hosta (w tym przypadku jednego z serwerów Onetu). Jeszcze dokładniejsze informacje, włącznie z danymi adresowymi właściciela domeny, zwróci program whois - niestety, czasem musimy go doinstalować samodzielnie. Ponieważ whois korzysta z osobnych baz informacji o domenach, jego działanie jest ograniczone do najpopularniejszych rodzajów domen. 


Bezpieczeństwo

Dzisiejsza Sieć przypomina dżunglę, w której co słabsze jednostki skazane są na rychłą śmierć. Nie ma w tym stwierdzeniu wielkiej przesady - przy odrobinie pecha źle zabezpieczony serwer może paść łupem włamywacza, automatu spamowego lub samoczynnie instalowanego trojana w ciągu kilku godzin od podłączenia do Internetu. Co gorsza, maszyna taka zazwyczaj służy jako doskonała platforma do ataków na komputery w Sieci - swoim niedbalstwem lub niewiedzą możemy zatem łatwo się przyczynić do zupełnie wymiernych szkód wyrządzonych innym użytkownikom Internetu.

Spoczywająca na nas wszystkich odpowiedzialność za stan Sieci powinna nas skłonić do rzetelnego zabezpieczenia własnych maszyn przed włamaniami. Co najważniejsze, podstawowe czynności konfiguracyjne należy wykonać przed podłączeniem komputera do Internetu, a jedną z bardziej istotnych operacji jest regularna aktualizacja zainstalowanego oprogramowania. Nic bowiem nie pomoże doskonale skonfigurowana, ale "dziurawa" zapora ogniowa.
 

Blokowanie dostępu do usług sieciowych
Najprostszą metodą wybiórczego zablokowania zdalnego dostępu do usług sieciowych oferowanych przez nasz serwer jest skorzystanie z mechanizmu tcpwrappera, czyli odpowiednie wyedytowanie plików /etc/hosts.allow i /etc/hosts.deny. Ponieważ większość serwerów internetowych jest uruchamianych za pośrednictwem demona inetd, który wykorzystuje właśnie te pliki, taka metoda może być w niektórych przypadkach stosunkowo skuteczna i bezpieczna.

W zbiorze /etc/hosts.allow umieszczamy definicje dotyczące zaufanych hostów i usług, które mają być udostępniane na zewnątrz naszej sieci. Plik /etc/hosts.deny zawiera z kolei regułki blokujące określone usługi dla wskazanych adresów IP. Same wpisy mają stosunkowo prostą strukturę - jeśli np. w pliku /etc/hosts.deny zawrzemy regułkę ALL : ALL, domyślnie wszystkie usługi zostaną zablokowane. Aby udostępnić usługę WWW (serwowaną przez demona httpd) dla lokalnych użytkowników oraz adresów z sieci 211.120.10.*, wystarczy wpisać teraz w pliku /etc/hosts.allow regułkę:

httpd : LOCAL, 211.120.10.

Szczegółowe informacje na temat wymienionych plików można znaleźć w pomocy systemowej (man hosts.allow).
 

"Ogniomurki" w akcji
Linux został standardowo wyposażony w dobrą i stosunkowo elastyczną zaporę ogniową w postaci zaszytego w jądrze systemowym mechanizmu iptables. Pozwala on nie tylko na akceptowanie i odrzucanie określonych pakietów, ale i na przekierowywanie ich pomiędzy portami, implementację mechanizmu translacji adresów NAT (w Linuksie noszącego nazwę maskarady) i sporo innych zabiegów. Nieco więcej informacji można znaleźć w ramce "Netfilter, czyli podstawy bezpieczeństwa sieciowego". 


Nie pozwól się szpiegować!
Jednym z utrapień administratora współczesnego serwera sieciowego jest nagminne skanowanie otwartych portów przypadkowych maszyn internetowych. Skanowanie, jakkolwiek samo w sobie nieszkodliwe, może stanowić rozpoznanie poprzedzające atak włamywacza lub sieciowego robaka/trojana. Aby zabezpieczyć się przed takimi próbami, można wykorzystać jeden z programów ukrywających otwarte porty przed próbami skanowania. Najpopularniejsze narzędzia linuksowe służące do tego celu to portsentry oraz psad (www.cipherdyne.com/psad). Pierwszy z wymienionych programów zyskał swego czasu ogromną popularność, która nieco zmalała po przejęciu producenta tej aplikacji przez Cisco. Psad to z kolei "dziecko" projektu bezpiecznej dystrybucji Linuksa - Bastille. Ponieważ psad charakteryzuje się nieco lepszymi parametrami niż portsentry, polecam ten pierwszy program, zwłaszcza że konfiguracja obu narzędzi jest równie prosta.
 

Przyłapać włamywacza
Uwieńczeniem procesu zabezpieczania naszego serwera jest instalacja jednego lub kilku narzędzi w automatyczny sposób wykrywających próby włamań. Zasada działania takich programów, określanych terminem IDS (Intrusion Detection System), opiera się na dwóch zasadniczych technikach. Pierwsza, wykorzystywana m.in. przez znane narzędzie tripwire, bazuje na wyliczeniu sum kontrolnych dla plików ważnych z punktu widzenia bezpieczeństwa systemu oraz okresowym porównywaniu aktualnego stanu z zapisanym w specjalnej bazie. Włamywacz, chcąc ukryć swoją obecność i zachować możliwość kontroli nad OS-em, zazwyczaj podmieni ten czy inny program w systemie na jego odpowiednik zawierający świadomie umieszczoną w nim furtkę (backdoor), co powinno zostać wykryte przez automatycznego strażnika.

Druga klasa narzędzi, których przedstawicielem jest słynny snort, działa w bardziej złożony sposób, opierając się na bazie tzw. sygnatur ataków. Aplikacje tego typu analizują ruch sieciowy w poszukiwaniu sygnałów mogących świadczyć o ataku na nasz system. Spotykane są również narzędzia (takie jak logcheck) analizujące dzienniki systemowe w poszukiwaniu podejrzanych wpisów.

Wszystkie wymienione programy są stosunkowo proste w użyciu, jednak nie obronią nas automatycznie przed włamaniem. Reakcja na atak polega w ich przypadku zazwyczaj na wysłaniu e-maila do administratora - a do tego ostatniego należy natychmiastowa "akcja ratunkowa". Jeśli zatem nie mamy dostatecznie dużo czasu, aby na bieżąco śledzić zachowanie naszego systemu, nie warto tracić czasu na instalację snorta i usuwanie raz w tygodniu zbędnych listów ze skrzynki pocztowej. 
 

Z arsenału przeciwnika
Stara wojenna zasada głosi, że pierwszym krokiem do zwyciężenia wroga jest poznanie jego taktyki. Odnosi się to w stu procentach do ochrony sieci przed włamaniami - dobry administrator bezwzględnie musi znać techniki wykorzystywane przez sieciowych wandali. Co więcej, znajomość narzędzi używanych przez włamywaczy w znacznym stopniu pomoże nam w wykrywaniu potencjalnych luk w zabezpieczeniach własnych serwerów.

Podstawowe narzędzia z przybornika włamywacza to sniffery, czyli programy śledzące pakiety przesyłane w sieci. Najsłynniejszym linuksowym snifferem jest Ethereal (www.ethereal.com) rozpoznający wiele protokołów sieciowych i pozwalający w dowolny sposób podsłuchiwać sieciowy ruch. Inne programy z tej grupy to Ettercap (ettercap.sourceforge.net), Sniffit (reptile.rug.ac.be/~coder/sniffit) czy Kismet (www.kismetwireless.net- to narzędzie jest o tyle ciekawe, że napisano je z myślą o sieciach Wireless LAN). Nie należy również zapominać o dostępnym w każdym systemie tcpdumpie, który nie jest wprawdzie najwygodniejszy, ale stanowi podstawę działania niektórych zaawansowanych snifferów.

Linux oferuje również dostęp do rozbudowanych "kombajnów", badających w sposób zautomatyzowany stan zabezpieczeń naszej sieci i pomagających ustrzec się typowych błędów w jej konfiguracji. Pierwsze narzędzie tego typu, noszące nazwę SATAN (skrót od Security Administrator Tool for Analyzing Networks - www.porcupine.org/satan), ma już dziś raczej historyczne znaczenie - zastąpiły je takie programy, jak SAINT (Security Administrator's Integrated Network Tool - www.saintcorporation.com/ saint) czy SARA (Security Auditor's Research Assistant - www-arc.com/sara). Ogromną popularność zyskał również wygodny w użyciu Nessus (www.nessus.org). 
 
Grzegorz Dąbrowski

Więcej informacji:
Dokumentacja linuksowa
http://www.linuxdoc.org/
http://www.jtz.org.pl/
Poradniki dla administratorów
http://www.tldp.org/LDP/sag/
http://www.oreilly.com/catalog/linag2/book/
http://www.seifried.org/lasg/
Narzędzia opisywane w artykule
http://e2fsprogs.sourceforge.net/
http://www.sudo.ws/
http://www.gnu.org/software/coreutils/
http://www.cipherdyne.com/psad/
 

Artykuł pochodzi
z CHIP-a nr 12/2004


 

 

Kontakt i o nas | Wspomóż nas | Reklama | Księga Gości

Copyright (C) Salwatorianie 2000-2011