Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00529 008441 10739938 na godz. na dobę w sumie
Linux. Bezpieczeństwo. Receptury - książka
Linux. Bezpieczeństwo. Receptury - książka
Autor: , , Liczba stron: 352
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-249-1 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> hacking >> bezpieczeństwo systemów
Porównaj ceny (książka, ebook, audiobook).

Poznaj narzędzia i techniki w zabezpieczeniach systemów linuksowych

Zabezpieczanie systemu komputerowego to proces złożony. Nie trzeba jednak od razu wprowadzać złożonych mechanizmów ochrony systemu. Znajomość podstawowych procedur pomaga dostatecznie zwiększyć poziom bezpieczeństwa. Czy chcesz szybko dowiedzieć się, jak wysyłać zaszyfrowane listy elektroniczne z programu Emacs? Jak ograniczyć dostęp do usług sieciowych w określonych porach dnia? Jak zabezpieczyć serwer WWW zaporą sieciową? Skonfigurować uwierzytelnianie z użyciem klucza publicznego przez SSH?

Książka 'Linux. Bezpieczeństwo. Przewodnik encyklopedyczny' nauczy Cię, jakie polecenia należy wykonać i co wpisać w plikach konfiguracyjnych, by poprawić bezpieczeństwo Twojego systemu. Nie jest to klasyczny podręcznik; nie znajdziesz tu teorii, lecz rozwiązania konkretnych problemów i sposoby łatania typowych luk w zabezpieczeniach. Dzięki książce nie będziesz tracić cennego czasu, poszukując właściwej składni poleceń. Przeznaczona jest dla średnio zaawansowanych użytkowników i administratorów systemów Linux.

Jeśli administrujesz systemami linuksowymi, receptury przedstawione w niniejszej książce pozwolą zwiększyć wydajność Twojej pracy: osiągniesz więcej poświęcając mniej czasu. Zdobędziesz pewność, że zastosujesz właściwe rozwiązania gdy pojawiają się konkretne zagrożenia.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Linux. Bezpieczeñstwo. Receptury Autorzy: Daniel J. Barrett, Richard E. Silverman, Robert G. Byrnes T³umaczenie: Adam Podstawczyñski ISBN: 83-7361-249-1 Tytu³ orygina³u: Linux Security Cookbook Format: B5, stron: 346 Zabezpieczanie systemu komputerowego to proces z³o¿ony. Nie trzeba jednak od razu wprowadzaæ z³o¿onych mechanizmów ochrony systemu. Znajomoġæ podstawowych procedur pomaga dostatecznie zwiêkszyæ poziom bezpieczeñstwa. Czy chcesz szybko dowiedzieæ siê, jak wysy³aæ zaszyfrowane listy elektroniczne z programu Emacs? Jak ograniczyæ dostêp do us³ug sieciowych w okreġlonych porach dnia? Jak zabezpieczyæ serwer WWW zapor¹ sieciow¹? Skonfigurowaæ uwierzytelnianie z u¿yciem klucza publicznego przez SSH? Ksi¹¿ka „Linux. Bezpieczeñstwo. Przewodnik encyklopedyczny” nauczy Ciê, jakie polecenia nale¿y wykonaæ i co wpisaæ w plikach konfiguracyjnych, by poprawiæ bezpieczeñstwo Twojego systemu. Nie jest to klasyczny podrêcznik; nie znajdziesz tu teorii, lecz rozwi¹zania konkretnych problemów i sposoby ³atania typowych luk w zabezpieczeniach. Dziêki ksi¹¿ce nie bêdziesz traciæ cennego czasu, poszukuj¹c w³aġciwej sk³adni poleceñ. Przeznaczona jest dla ġrednio zaawansowanych u¿ytkowników i administratorów systemów Linux. • Kontrola dostêpu do systemu na ró¿nych poziomach - od zapory sieciowej a¿ po poszczególne us³ugi; programy: iptables, ipchains, xinetd, inted i wiele innych. • Monitorowanie sieci programami: ethereal, dsniff, netstat i innymi. • Ochrona po³¹czeñ sieciowych technologiami SSH i SSL. • Wykrywanie w³amañ programami: tripwire, snort, tcpdump, logwatch i innymi. • Zabezpieczanie uwierzytelniania za pomoc¹ kluczy kryptograficznych, technologii Kerberos, oprogramowania PAM; autoryzacja przywilejów administratora programem sudo. • Szyfrowanie plików i wiadomoġci e-mail oprogramowaniem GnuPG. • Sondowanie zabezpieczeñ w³asnego systemu programami do ³amania hase³, narzêdziem nmap i skryptami pomocniczymi. Jeġli administrujesz systemami linuksowymi, receptury przedstawione w niniejszej ksi¹¿ce pozwol¹ zwiêkszyæ wydajnoġæ Twojej pracy: osi¹gniesz wiêcej poġwiêcaj¹c mniej czasu. Zdobêdziesz pewnoġæ, ¿e zastosujesz w³aġciwe rozwi¹zania gdy pojawiaj¹ siê konkretne zagro¿enia. Spis treści Przedmowa..........................................................................................................................9 Rozdział 1. Tripwire i migawki systemu ...................................................................17 ..................17 1.0. Wprowadzenie...................................................a...................................................a........ 1.1. Konfiguracja Tripwire...................................................a.................................................................20 1.2. Wyświetlanie założeń i konfiguracji...................................................a.........................................22 1.3. Modyfikacja założeń i konfiguracji...................................................a...........................................22 1.4. Podstawowe sprawdzanie spójności...................................................a........................................24 1.5. Sprawdzanie spójności w trybie tylko do odczytu ...................................................a................25 1.6. Zdalne sprawdzanie spójności ...................................................a..................................................26 1.7. Superskrupulatne sprawdzanie spójności...................................................a...............................28 1.8. Drogie i superskrupulatne sprawdzanie spójności...................................................a................30 1.9. Automatyczne sprawdzanie spójności...................................................a.....................................30 1.10. Odczytywanie najnowszego raportu Tripwire...................................................a.....................31 1.11. Uaktualnianie bazy danych ...................................................a.....................................................32 1.12. Dodawanie plików do bazy danych...................................................a.......................................33 1.13. Usuwanie plików z bazy danych...................................................a............................................35 1.14. Sprawdzanie systemów plików Windows VFAT ...................................................a................35 1.15. Sprawdzanie plików zainstalowanych za pomocą menedżera pakietów RPM.................36 1.16. Sprawdzanie spójności za pomocą programu rsync ...................................................a...........37 1.17. Ręczne sprawdzanie spójności ...................................................a................................................38 Rozdział 2. Zapory sieciowe: oprogramowanie iptables i ipchains ....................41 2.0. Wprowadzenie...................................................a...................................................a........ ..................41 2.1. Weryfikacja adresu źródłowego...................................................a................................................43 2.2. Blokowanie sfałszowanych adresów...................................................a........................................45 2.3. Blokowanie całego ruchu sieciowego...................................................a.......................................47 2.4. Blokowanie ruchu przychodzącego...................a...................................................a.......................48 2.5. Blokowanie ruchu wychodzącego ...................................................a............................................49 4 Spis treści 2.6. Blokowanie przychodzących żądań usług ...................................................a..............................50 2.7. Blokowanie dostępu z określonego hosta zdalnego ...................................................a..............51 2.8. Blokowanie dostępu do określonego hosta zdalnego ...................................................a...........52 2.9. Blokowanie dostępu do wszystkich serwerów WWW określonej zdalnej sieci...................53 2.10. Blokowanie połączeń z komputerów zdalnych, zezwalanie na lokalne .............................54 2.11. Kontrola dostępu na podstawie adresów MAC ...................................................a...................55 2.12. Zezwalanie wyłącznie na dostęp SSH...................................................a....................................56 2.13. Blokowanie wychodzących połączeń Telnet...................................................a.........................57 2.14. Zabezpieczanie wydzielonego serwera ...................................................a.................................58 2.15. Blokowanie pingów...................................................a...................................................a.. ..............59 2.16. Wyświetlanie reguł zapory sieciowej...................................................a.....................................60 2.17. Usuwanie reguł zapory sieciowej ...................................................a...........................................61 2.18. Wstawianie reguł zapory sieciowej ...................................................a........................................62 2.19. Zapisywanie konfiguracji zapory sieciowej ...................................................a..........................63 2.20. Ładowanie konfiguracji zapory sieciowej ...................................................a.............................64 2.21. Testowanie konfiguracji zapory sieciowej...................................................a.............................66 2.22. Budowanie złożonych drzew reguł...................................................a........................................67 2.23. Uproszczone rejestrowanie ...................................................a......................................................69 Rozdział 3. Kontrola dostępu do sieci........................................................................71 3.0. Wprowadzenie...................................................a...................................................a........ ..................71 3.1. Wyświetlanie interfejsów sieciowych...................................................a.......................................74 3.2. Włączanie i wyłączanie interfejsu sieciowego ...................................................a........................75 3.3. Włączanie i wyłączanie usługi (xinetd) ...................................................a...................................76 3.4. Włączanie i wyłączanie usługi (inetd)..............a...................................................a.................... ....77 3.5. Dodawanie nowej usługi (xinetd)...................................................a.............................................78 3.6. Dodawanie nowej usługi (inetd)...................................................a...............................................79 3.7. Ograniczanie dostępu zdalnym użytkownikom ...................................................a....................80 3.8. Ograniczanie dostępu zdalnym hostom (xinetd) ...................................................a...................82 3.9. Ograniczanie dostępu zdalnym hostom (xinetd z biblioteką libwrap) .................................83 3.10. Ograniczanie dostępu zdalnym hostom (xinetd w połączeniu z tcpd)...............................84 3.11. Ograniczanie dostępu zdalnym hostom (inetd) ...................................................a...................85 3.12. Ograniczanie dostępu o określonych porach dnia...................................................a...............86 3.13. Ograniczanie określonym hostom dostępu do serwera SSH ................................................88 3.14. Ograniczanie dostępu do serwera SSH w zależności od konta systemowego...................89 3.15. Ograniczanie zasobów usług do określonych katalogów systemu plików ........................90 3.16. Zapobieganie atakom powodującym odmowę obsługi ...................................................a......92 3.17. Przekierowanie do innego gniazda ...................................................a........................................93 3.18. Rejestrowanie przypadków korzystania z usług ...................................................a.................94 3.19. Uniemożliwianie logowania się przez terminal jako root ...................................................a..96 Spis treści 5 Rozdział 4. Techniki i infrastruktury uwierzytelniania.........................................97 4.0. Wprowadzenie...................................................a...................................................a........ ..................97 4.1. Tworzenie aplikacji obsługującej infrastrukturę PAM ...................................................a........100 4.2. Wymuszanie stosowania silnych haseł za pomocą oprogramowania PAM ......................101 4.3. Tworzenie list kontroli dostępu za pomocą oprogramowania PAM...................................102 4.4. Sprawdzanie poprawności certyfikatu SSL...................................................a...........................104 4.5. Odkodowywanie certyfikatu SSL ...................................................a...........................................105 4.6. Instalowanie nowego certyfikatu SSL ...................................................a....................................106 4.7. Generowanie żądania podpisania certyfikatu SSL (CSR) ...................................................a...107 4.8. Tworzenie samopodpisanego certyfikatu SSL...................................................a......................109 4.9. Tworzenie organu certyfikującego ...................................................a.........................................110 4.10. Konwertowanie certyfikatów SSL z formatu DER do formatu PEM.................................113 4.11. Rozpoczęcie pracy z oprogramowaniem Kerberos...................................................a............114 4.12. Dodawanie użytkowników do domeny Kerberos ...................................................a.............119 4.13. Dodawanie hostów do domeny Kerberos ...................................................a...........................120 4.14. Korzystanie z uwierzytelniania Kerberos w usłudze SSH ..................................................121 4.15. Korzystanie z uwierzytelniania Kerberos w usłudze Telnet...............................................124 4.16. Zabezpieczanie usługi IMAP technologią Kerberos ...................................................a..........126 4.17. Uwierzytelnianie użytkowników w systemie z użyciem technologii Kerberos i PAM..127 Rozdział 5. Mechanizmy autoryzacji .......................................................................131 ................131 5.0. Wprowadzenie...................................................a...................................................a........ 5.1. Logowanie do powłoki z przywilejami roota...................................................a.......................133 5.2. Uruchamianie programów X z przywilejami roota ...................................................a.............134 5.3. Uruchamianie poleceń jako inny użytkownik przez program sudo....................................135 5.4. Jak obejść uwierzytelnianie hasłem w programie sudo ...................................................a......136 5.5. Wymuszanie uwierzytelniania hasłem w sudo...................................................a....................138 5.6. Autoryzacja w sudo z uwzględnieniem nazwy hosta...................................................a.........138 5.7. Przydzielanie przywilejów grupie przez program sudo ...................................................a....140 5.8. Uruchamianie przez sudo dowolnego programu w katalogu..............................................140 5.9. Blokowanie argumentów poleceń w sudo ...................................................a............................141 5.10. Współużytkowanie plików z użyciem grup ...................................................a.......................142 5.11. Zezwalanie przez sudo na dostęp do współużytkowanegao pliku w trybie tylko do odczytu...................................................a...................................................a...143 5.12. Autoryzacja zmian haseł przez sudo...............a...................................................a.....................144 5.13. Uruchamianie-zatrzymywanie demonów przez sudo ...................................................a......145 5.14. Ograniczenie przywilejów roota za pomocą sudo...................................................a.............145 5.15. Zabijanie procesów przez sudo...................................................a.............................................146 5.16. Wyświetlanie prób wywołania programu sudo...................................................a.................148 5.17. Zdalny dziennik sudo...................................................a.............................................................148 6 Spis treści 5.18. Udostępnianie przywilejów roota przez SSH...................................................a.....................149 5.19. Uruchamianie poleceń roota przez SSH ...................................................a..............................151 5.20. Udostępnianie przywilejów roota przez Kerberos su ...................................................a.......152 Rozdział 6. Ochrona wychodzących połączeń sieciowych ..................................155 6.0 Wprowadzenie...................................................a...................................................a......... ................155 6.1. Logowanie do zdalnego hosta...................................................a.................................................156 6.2. Uruchamianie zdalnych programów ...................................................a.....................................157 6.3. Zdalne kopiowanie plików ...................................................a......................................................158 6.4. Uwierzytelnianie za pomocą klucza publicznego (OpenSSH)..............................................161 6.5. Uwierzytelnianie z użyciem klucza publicznego (Klient OpenSSH, serwer SSH2, klucz OpenSSH) ...................................................a...............163 6.6. Uwierzytelnianie z użyciem klucza publicznego (Klient OpenSSH, serwer SSH2, klucz SSH2) ...................................................a.......................165 6.7. Uwierzytelnianie z użyciem klucza publicznego (Klient SSH2, serwer OpenSSH) ..........166 6.8. Uwierzytelnianie przez mechanizm wiarygodnego hosta ...................................................a.167 6.9. Uwierzytelnianie bez hasła (interaktywne)...................................................a...........................171 6.10. Uwierzytelnianie w zadaniach cron ...................................................a.....................................173 6.11. Wyłączanie agenta SSH po wylogowaniu...................................................a...........................175 6.12. Dostosowanie działania klienta SSH do poszczególnych hostów......................................175 6.13. Zmiana domyślnych ustawień klienta SSH ...................................................a........................176 6.14. Tunelowanie innej sesji TCP przez SSH ...................................................a..............................178 6.15. Panowanie nad hasłami...................................................a..........................................................179 Rozdział 7. Ochrona plików.......................................................................................181 7.0. Wprowadzenie...................................................a...................................................a........ ................181 7.1. Stosowanie prawa dostępu do plików...................................................a...................................182 7.2. Zabezpieczanie współużytkowanego katalogu...................................................a....................183 7.3. Blokowanie wyświetlania zawartości katalogu...................................................a....................184 7.4. Szyfrowanie plików z użyciem hasła...................................................a.....................................185 7.5. Rozszyfrowywanie plików ...................................................a......................................................186 7.6. Przygotowanie oprogramowania GnuPG do szyfrowania z użyciem klucza publicznego ...................................................a................................................187 7.7. Wyświetlanie zawartości zbioru kluczy ...................................................a................................189 7.8. Ustawianie klucza domyślnego...................................................a...............................................190 7.9. Udostępnianie kluczy publicznych ...................................................a........................................191 7.10. Dodawanie kluczy do zbioru ...................................................a................................................192 7.11. Szyfrowanie plików w celu wysłania innym...................................................a......................193 7.12. Podpisywanie pliku tekstowego ...................................................a...........................................194 7.13. Podpisywanie i szyfrowanie plików ...................................................a....................................195 7.14. Składanie podpisu w oddzielnym pliku...................................................a..............................195 Spis treści 7 7.15. Sprawdzanie sygnatury...................................................a..........................................................196 7.16. Zademonstrowanie kluczy publicznych...................................................a..............................197 7.17. Tworzenie kopii zapasowej klucza prywatnego ...................................................a................198 7.18. Szyfrowanie katalogów ...................................................a..........................................................200 7.19. Dodawanie klucza do serwera kluczy ...................................................a.................................200 7.20. Wysyłanie nowych sygnatur na serwer kluczy...................................................a..................201 7.21. Uzyskiwanie kluczy z serwera kluczy ...................................................a.................................201 7.22. Anulowanie klucza...................................................a...................................................a...............204 7.23. Zarządzanie zaszyfrowanymi plikami za pomocą programu Emacs................................205 7.24. Zarządzanie zaszyfrowanymi plikami za pomocą programu vim ....................................206 7.25. Szyfrowanie kopii zapasowych...................................................a.............................................208 7.26. Korzystanie z kluczy PGP w programie GnuPG ...................................................a...............209 Rozdział 8. Ochrona poczty elektronicznej .............................................................211 8.0. Wprowadzenie...................................................a...................................................a........ ................211 8.1. Szyfrowanie poczty elektronicznej w Emacsie ...................................................a.....................212 8.2. Szyfrowanie poczty elektronicznej w vimie...................................................a..........................214 8.3. Szyfrowanie poczty elektronicznej w programie Pine ...................................................a........214 8.4. Szyfrowanie poczty elektronicznej w programie Mozilla...................................................a...216 8.5. Szyfrowanie poczty elektronicznej w programie Evolution..................................................217 8.6. Szyfrowanie poczty elektronicznej w programie mutt ...................................................a.......218 8.7. Szyfrowanie poczty elektronicznej w programie elm ...................................................a.........219 8.8. Szyfrowanie poczty elektronicznej w programie MH...................................................a.........220 8.9. Udostępnianie serwera pocztowego POP/IMAP z obsługą SSL..........................................220 8.10. Testowanie połączenia pocztowego przez SSL ...................................................a..................225 8.11. Zabezpieczanie transmisji POP/IMAP przez protokół SSL w programie Pine...............226 8.12. Zabezpieczanie transmisji POP/IMAP przez protokół SSL w programie mutt ..............228 8.13. Zabezpieczanie transmisji POP/IMAP przez protokół SSL w programie Evolution .....229 8.14. Zabezpieczanie transmisji POP/IMAP przez program stunnel i protokół SSL...............230 8.15. Zabezpieczanie transmisji POP/IMAP za pomocą SSH ...................................................a...231 8.16. Zabezpieczanie transmisji POP/IMAP za pomocą programów SSH i Pine.....................233 8.17. Otrzymywanie poczty elektronicznej bez udostępniania serwera.....................................235 8.18. Udostępnienie serwera SMTP różnym klientom ...................................................a...............237 Rozdział 9. Testowanie i kontrolowanie .................................................................241 9.0. Wprowadzenie...................................................a...................................................a........ ................241 9.1. Testowanie haseł kont (program John the Ripper) ...................................................a..............242 9.2. Testowanie haseł kont (CrackLib)...................................................a...........................................244 9.3. Wyszukiwanie kont bez haseł ...................................................a.................................................246 9.4. Wyszukiwanie kont superużytkowników...................................................a.............................246 8 Spis treści 9.5. Sprawdzanie podejrzanych zachowań dotyczących kont ...................................................a..247 9.6. Sprawdzanie podejrzanych zachowań dotyczących kont w wielu systemach ..................249 9.7. Testowanie ścieżki wyszukiwania...................................................a..........................................251 9.8. Efektywne przeszukiwanie systemów plików ...................................................a.....................253 9.9. Wyszukiwanie programów z bitami setuid lub setgid ...................................................a.......256 9.10. Zabezpieczanie specjalnych plików urządzeń...................................................a....................258 9.11. Poszukiwanie plików pozwalających na zapis...................................................a...................259 9.12. Poszukiwanie rootkitów...................................................a.........................................................261 9.13. Poszukiwanie otwartych portów ...................................................a..........................................262 9.14. Badanie aktywności sieci w komputerze lokalnym...................................................a...........268 9.15. Śledzenie procesów ...................................................a...................................................a. .............274 9.16. Obserwacja ruchu sieciowego ...................................................a...............................................276 9.17. Obserwacja ruchu sieciowego (z interfejsem graficznym)...................................................a282 9.18. Wyszukiwanie łańcuchów w ruchu sieciowym ...................................................a.................284 9.19. Wykrywanie niezabezpieczonych protokołów sieciowych.................................................287 9.20. Rozpoczęcie pracy z programem Snort ...................................................a...............................293 9.21. Podsłuchiwanie pakietów programem Snort...................................................a......................294 9.22. Wykrywanie włamań programem Snort ...................................................a.............................295 9.23. Rozkodowywanie komunikatów alarmowych programu Snort ........................................298 9.24. Rejestrowanie z użyciem programu Snort ...................................................a..........................300 9.25. Dzielenie dzienników programu Snort na różne pliki...................................................a......301 9.26. Uaktualnianie i dostrajanie reguł programu Snort ...................................................a............302 9.27. Przekierowanie komunikatów systemowych do dzienników (syslog) .............................304 9.28. Testowanie konfiguracji syslog ...................................................a.............................................308 9.29. Rejestrowanie zdalne ...................................................a..............................................................309 9.30. Rotacja plików dziennika ...................................................a.......................................................310 9.31. Wysyłanie komunikatów do systemu rejestrującego ...................................................a........311 9.32. Zapisywanie komunikatów w dziennikach ze skryptów powłoki ....................................313 9.33. Zapisywanie komunikatów w dziennikach z programów w Perlu...................................315 9.34. Zapisywanie komunikatów w dziennikach z programów w C .........................................316 9.35. Łączenie plików dziennika ...................................................a....................................................317 9.36. Tworzenie raportów z dzienników: program logwatch ...................................................a...319 9.37. Definiowanie filtra logwatch ...................................................a.................................................320 9.38. Nadzorowanie wszystkich wykonywanych poleceń ...................................................a........322 9.39. Wyświetlanie wszystkich wykonywanych poleceń...................................................a...........324 9.40. Przetwarzanie dziennika z księgowania procesów ...................................................a...........326 9.41. Odtwarzanie po włamaniu ...................................................a....................................................328 9.42. Zgłaszanie faktu włamania ...................................................a....................................................329 Skorowidz........................................................................................................................333 Kontrola dostępu do sieci 3.0. Wprowadzenie Jednym z najważniejszych zadań związanych z zabezpieczaniem systemów jest kontro- lowanie przychodzących połączeń sieciowych. Administrator systemów może zapewnić taką kontrolę na różnych poziomach. Na najniższym poziomie — sprzętowym — może po prostu odłączyć kable. Takie środki są jednak rzadko wymagane, chyba że włamanie było na tyle poważne, iż komputerowi już w żaden sposób nie można ufać. Kontrolowa- nie za pomocą oprogramowania jest dużo praktyczniejsze i też może być realizowane na różnych poziomach — od ogólnego do specyficznego dla usjługi: Interfejs sieciowy Interfejs można włączyć lub wyłączyć. Zapora sieciowa Konfigurując reguły zapory sieciowej w jądrze linuksowymj, kontrolujemy ruch przychodzący (a także wychodzący i przekazywany). Zagajdnienia te omówiono w rozdziale 2. Superdemon lub demon usług internetowych Superdemon odpowiada za uruchamianie (bądź nie) specyficjznych usług sieciowych. Decyzja jest podejmowana na podstawie różnych krytejriów. Załóżmy, że system otrzymuje przychodzące żądanie połączenia Telnet. Supejrdemon może takie żądanie przyjąć lub odrzucić na podstawie adresu źródłowego, pory dnia lub liczby otwartych połączeń Telnet. Może również całkowicie zablokować jdostęp przez Telnet. Superdemony zazwyczaj działają na plikach konfiguracyjjnych, za pomocą których można w wygodny sposób sterować dostępem do wszystkijch usług systemowych. 72 Rozdział 3. Kontrola dostępu do sieci Indywidualne usługi sieciowe Dowolna usługa sieciowa, np. sshd lub ftpd może posiadać własne mechanizmy kontroli dostępu. Na przykład, program sshd obsługuje słowo kluczowe AllowUsers, program ftpd korzysta z pliku /etc/ftpaccess, a inne usługi wymagają uwierzytelnienia użytkownika. Kiedy nadchodzi żądanie dostępu do usługi, wszystkie te elementy dochodzą do głosu. Za- łóżmy, że użytkownik kawalarz próbuje skorzystać z usługi FTP systemu serwer.przykladowy. com przez konto użytkownika janek. Sytuację przedstawiono na rysunku 3.1. Gdy serwer.przykladowy.com jest podłączony fizycznie do sieci… oraz interfejs sieciowy jest włączony… oraz zapora sieciowa w jądrze wpuszcza pakiety FTP z hostaj kawalarza… oraz superdemon jest uruchomiony… oraz superdemon przyjmuje połączenia FTP z komputera kawalarza… oraz program ftpd jest zainstalowany i wykonywalny… oraz konfiguracja ftpd w pliku /etc/ftpaccess zezwala na połączenie… oraz kawalarz uwierzytelnia się jako janek… — wówczas połączenie uda się (jeśli nic innego się nie sjtanie, np. nie wystąpi awaria sieci). Rysunek 3.1. Warstwy zabezpieczeń, przez które prze.chodzi połączenie przychodzące Administrator systemu musi być świadomy wszystkich tych poziomów kontroli. W niniej- szym rozdziale zostaną omówione: ifconfig Niskopoziomowy program do sterowania, włączania, wyłącjzania i ustawiania parametrów interfejsów sieciowych. 3.0. Wprowadzenie xinetd 73 Superdemon odpowiadający za wywołanie innych demonówj. Jego działanie zależy od plików konfiguracyjnych, zazwyczaj znajdujących się jw katalogu /etc/xinetd.d (jeden plik odpowiada jednej usłudze). Na przykład, plijk /etc/xinetd.d/finger określa sposób wywołania na żądanie demona usługi finger: /etc/xinetd.d/finger: service finger { server = /usr/sbin/in.fingerd ścieżka do pliku wykonywalnego user = nobody usługa uruchamiana jako nobody wait = no usługa uruchamiana wielowątkowo socket_type = stream usługa na podstawie gniazda strumieniowego } Program xinetd jest wykorzystywany w dystrybucji Red Hat. inetd inetd jest starszym odpowiednikiem superdemona xinetd. Jego konfigurację opisuje plik /etc/inetd.conf, w którym jednej usłudze odpowiada jeden wiersz. Anajlogiczny do przedstawionej wyżej konfiguracji usługi finger w tymj przypadku wyglądałby następująco: /etc/inetd.conf: finger stream tcp nowait nobody /usr/sbin/in.fgingerd in.fingerd Program inetd jest wykorzystywany w dystrybucji SuSE. TCP-wrappers Warstwa kontroli dostępu do systemu ze strony określonjych komputerów lub domen oraz na podstawie innych kryteriów. Zasady dostępu sąj opisane w plikach /etc/hosts.allow (połączenia przyjmowane) oraz /etc/hosts.deny (połączenia odrzucane). Na przykład, aby zablokować wszystkie połączenia z usjługą finger, w pliku /etc/hosts.deny wpiszemy: finger : ALL : DENY Żeby zaś zezwolić na połączenia z usługą finger tylko z komputerów domeny przyjazna.org, wpiszemy w pliku /etc/hosts.allow: finger : *.przyjazna.org finger: ALL : DENY Nie będziemy tutaj przytaczać całej składni tych plikjów, ponieważ jest ona opisana na stronie podręcznika hosts.allow(5). Należy jednak pamiętać, że mechanizm TCP-wrappers obsługuje również funkcję sprawdzania tożsamości przez protokół IDENT, potrafi uruchamiać dowolne programy zewnętrzne oraz jrealizować wiele innych ważnych zadań. Oprogramowanie TCP-wrappers jest obecne w obu dystrybucjach, Red Hat i SuSE. 74 Rozdział 3. Kontrola dostępu do sieci Wszystkie receptury opisane w niniejszym rozdziale rmają istotną wadę: nie ograniczają dostępu na podstawie hosta, lecz nar podstawie źródłowego adresu IP. Na przykład, można określić, że do danej usługi — świadczonej przez nasz system — może mieć dostęp tylko host o numrerze IP 121.108.19.42. Adres źródłowy można jednak w prosty sposób sfałszowaćr. Nasze ograniczenia teoretycznie może obejść komputer, który podszyje się rpod adres 121.108.19.42. Jeśli naprawdę chcemy kontrolować dostęp na podstawier hosta, a nie adresu źródłowego, lepiej zastosować mechanizm kryptograficrznego uwierzytelniania hosta, np. uwierzytelnianie klienta lub serwera przez protorkół SSH albo protokół IPSec. 3.1. Wyświetlanie interfejsów sieciowych Problem Chcemy wyświetlić listę wszystkich interfejsów sieciojwych. Rozwiązanie W celu uzyskania listy wszystkich interfejsów, włączonych i wyłączonych, których ste- rowniki są załadowane, wydajemy polecenie: $ ifconfig -a Aby wyświetlić tylko włączone interfejsy, napiszemy: $ ifconfig Do wyświetlania informacji o jednym interfejsie — zazwyczaj eth0 — służy polecenie: $ ifconfig eth0 Omówienie Gdy nie jesteśmy zalogowani jako użytkownik root, polecenia ifconfig może nie być w ścieżce dostępu. Wówczas próbujemy wpisać /sbin/ifconfig. Polecenie ifconfig wywołane z opcją -a wyświetla wszystkie interfejsy, bez względu na to, czy są włączone czy nie. Nie wyświetla jednak informacji o interfejsach, których sterow- niki nie są załadowane. Załóżmy, że w komputerze zainstalowano dwie karty ethernetowe (eth0 i eth1) różnych producentów, obsługiwane przez różne sterowniki. W systemie Linux skonfigurowano jednak tylko jeden sterownik (eth0), to znaczy dla tej jednej karty istnieje plik /etc/sysconfig/network-scripts/ifcfg-*. Z drugiego interfejsu zazwyczaj nie korzystamy. W takim przypadku polecenie ifconfig -a nie wyświetli drugiego interfejsu dopóty, dopóki nie wpiszemy ifconfig eth1 (co spowoduje załadowanie odpowiedniego sterownika). 3.2. Włączanie i wyłączanie interfejsu sieciowego 75 Zobacz również ifconfig(8). 3.2. Włączanie i wyłączanie interfejsu sieciowego Problem Chcemy zablokować wszelkie połączenia przychodzące i wychodzące z siecią obsługi- waną przez dany interfejs sieciowy. Rozwiązanie W celu wyłączenia jednego interfejsu sieciowego, np. eth0, napiszemy: # ifconfig eth0 down W celu włączenia jednego interfejsu sieciowego, np. eth0, napiszemy: # ifconfig eth0 up W celu wyłączenia całej komunikacji sieciowej wystarcjzy wpisać: # /etc/init.d/network stop lub: # service network stop Red Hat W celu włączenia obsługi sieci wpisujemy: # /etc/init.d/network start lub: # service network start Red Hat Omówienie W Linuksie istnieją trzy poziomy abstrakcji, na których można włączyć lub wyłączyć interfejsy sieciowe (oprócz fizycznego odłączenia kabjla sieciowego): /sbin/ifconfig Najniższy poziom — umożliwia włączenie lub wyłączenie jednego interfejsu sieciowego. Program ifconfig ułatwia również wykonywanie innych czynności konfigurjacyjnych związanych z interfejsem. 76 Rozdział 3. Kontrola dostępu do sieci /sbin/ifup, /sbin/ifdown Te skrypty średniego poziomu operują na pojedynczych ijnterfejsach sieciowych i służą odpowiednio do ich włączania lub wyłączania jprzez wywołanie programu ifconfig z właściwymi argumentami. Inicjalizują również obsługę pjrotokołu DHCP i odpowiadają za szereg innych funkcji. Użytkownik rzjadko korzysta z nich bezpośrednio. /etc/init.d/network Ten nadrzędny skrypt operuje na wszystkich interfejsajch sieciowych. W zależności od potrzeb uruchamia skrypty ifup lub ifdown dla poszczególnych interfejsów oraz realizuje dodatkowe funkcje: dodaje trasy, tworzy pliki blokujące informujące o włączonej obsłudze sieci i wiele innych. Włącza lubj wyłącza nawet interfejs pseudosieci, co — jeśli zależało nam tylko na zablokowjaniu ruchu zewnętrznego — może nie być pożądane. Skrypty ifup, ifdown oraz network są dość krótkie i warto je przestudiować. Zobacz również ifconfig(8). Strona podręcznika usernetctl(8) opisuje sposób modyfikacji przez nieuprzy- wilejowanego użytkownika parametrów interfejsów sieciowych obsługiwanych przez skrypty ifup i ifdown (przy przyzwoleniu administratora). 3.3. Włączanie i wyłączanie usługi (xinetd) Problem Chcemy uniemożliwić uruchamianie określonej usługi TCP przejz demon xinetd. Rozwiązanie Jeśli nazwa usługi brzmi „mojausluga”, otwieramy jej plik konfiguracyjny /etc/xinetd/ mojausluga lub plik /etc/xinetd.conf i do parametrów usługi dodajemy wpis: disable = yes Na przykład, aby wyłączyć usługę Telnet, w pliku /etc/xinetd.d/telnet wpisujemy: service telnet { ... disable = yes } 3.4. Włączanie i wyłączanie usługi (inetd) 77 Następnie wymuszamy na programie xinetd wprowadzenie zmian przez ponowne odczy- tanie plików konfiguracyjnych: # kill -USR2 `pidof xinetd` W celu włączenia usługi, usuwamy wpis disable i ponownie wysyłamy sygnał SIGUSR2. Omówienie Zamiast wyłączać usługę, można po prostu usunąć jej plik konfiguracyjny programu xinetd (np. /etc/xinetd.d/telnet), a nawet usunąć z komputera plik wykonywalny odpowiedzialny za usługę. Takie operacje trudno jednak cofnąć (natomiast nie należy usuwać pliku wyko- nywalnego przy pozostawieniu włączonej usługi w plikach konfiguracyjnych. xinetd będzie próbował uruchamiać usługę, co spowoduje zgłaszanie błędówj). Ewentualnie można użyć programu ipchains lub iptables [2.7], jeśli chcemy, aby usługa działała, ale była dostępna tylko dla użytkowników łączących się spod wybranych adre- sów źródłowych. Niektóre usługi mogą również posiadać własne mechanizmy kontroli dostępu, za pomocą których można ograniczyć dostęp do jwybranych adresów klientów. Zobacz również xinetd(8). Strona programu xinetd znajduje się pod adresem http://www.synack.net/xinetd. 3.4. Włączanie i wyłączanie usługi (inetd) Problem Chcemy uniemożliwić uruchamianie określonej usługi TCP przejz demon inetd. Rozwiązanie W celu wyłączenia usługi wstawiamy znak komentarza (#) przed wierszem tej usługi w pliku /etc/inetd.conf. Po zmianie przykładowy wpis dla usługi Telnet wygląda nastę- pująco: /etc/inetd.conf: # telnet stream tcp nowait root /usr/sbin/in.teglnetd in.telnetd Następnie wymuszamy na programie inetd wprowadzenie zmian przez ponowne odczy- tanie plików konfiguracyjnych (tutaj znak krzyżyka (#) jest znakiem zachęty użytkownika root, a nie symbolem komentarza): # kill -HUP `pidof inetd W celu włączenia usługi, usuwamy odpowiedni znak komentarza i ponownie wysyłamy sygnał SIGHUP. 78 Omówienie Rozdział 3. Kontrola dostępu do sieci Zamiast wyłączać usługę, można po prostu usunąć cały wiersz w pliku konfiguracyjnym programu inetd, a nawet usunąć z komputera plik wykonywalny odpowiedzialny za usługę. Takie operacje trudno jednak cofnąć (natomiast nie należy usuwać pliku wykonywalnego przy pozostawieniu włączonej usługi w plikach konfiguracyjnych — inetd będzie próbował uruchamiać usługę, co spowoduje zgłaszanie błędów). Ewentualnie można użyć pro- gramu ipchains lub iptables [2.6], jeśli chcemy, aby usługa działała, ale nie była dostępna ze zdalnych systemów. Zobacz również inetd(8), inetd.conf(5). 3.5. Dodawanie nowej usługi (xinetd) Problem Chcemy dodać nową usługę sieciową, którą ma kontrolowaćj demon xinetd. Rozwiązanie Tworzymy nowy plik konfiguracyjny w katalogu /etc/xinetd.d, zawierający przynajmniej następujące informacje: service NAZWA_USŁUGI Nazwa z /etc/services; patrz services(5) { server = /ŚCIEŻKA/DO/SERWERA Plik wykonywalny usługi server_args = DOWOLNE_ARGUMENTY Dowolne argumenty; tę opcję można pominąć user = UŻYTKOWNIK Użytkownik, z prawami którego uruchamiana jest usługa socket_type = TYP stream, dgram, raw lub seqpacket wait = YES lub NO yes = działanie jednowątkowe; no = działanie wielowątkowe Określamy nazwę usługi NAZWA_USŁUGI i wymuszamy na programie xinetd ponowne odczytanie plików konfiguracyjnych. [3.3] Omówienie Aby utworzyć plik konfiguracyjny usługi dla demona xinetd, musimy oczywiście wiedzieć, jakie właściwości ma mieć usługa i jak ma być uruchamiana. Czy wykorzystuje gniazda typu strumieniowego czy datagramowego? Czy ma działać jedno- czy wielowątkowo? Z jakimi ewentualnymi argumentami uruchamiany jest progrjam serwera? 3.6. Dodawanie nowej usługi (inetd) 79 Pliki konfiguracyjne programu xinetd pozwalają wprowadzać bardzo wiele dodatkowych słów kluczowych i wartości. Szczegółowe informacje można znaleźć na stronie podręcz- nika xinetd.conf(5). xinetd odczytuje wszystkie pliki z katalogu /etc/xinetd.d tylko wtedy, gdy tak określono w pliku /etc/xinetd.conf za pomocą następującego wiersza: includedir /etc/xinetd.d Warto upewnić się — zaglądając do wspomnianego pliku — jaką wartość przypisano zmiennej includedir. Zobacz również xinetd(8), xinetd.conf(5), services(5). Strona programu xinetd znajduje się pod adresem http://www.synack.net/xinetd. 3.6. Dodawanie nowej usługi (inetd) Problem Chcemy dodać nową usługę sieciową, którą ma kontrolowaćj demon inetd. Rozwiązanie Dodajemy nowy wiersz do pliku /etc/inetd.conf, zawierający dane w następującej postaci: NAZWA_USŁUGI TYP_GNIAZDA PROTOKÓŁ WĄTKOWANIE UŻYZTKOWNIK /ŚCIEŻKA/DO/SERWERA ARGUMENTY Następnie wymuszamy na programie inetd ponowne odczytanie pliku konfiguracyjnego /etc/inetd.conf. [3.4] Omówienie Wiersz odpowiadający usłudze w pliku /etc/inetd.conf zawiera następujące wartości: 1. Nazwa usługi. Nazwa wymieniona w pliku /etc/services. Jeśli w pliku tym nie ma żądanej nazwy, dodajemy odpowiedni wpis określający nazwę usługi, numer portu i protokół. Więcej informacji można znaleźć na stronie podręcznikaj services(5). 2. Typ gniazda. Jedna z następujących wartości: stream, dgram, raw, rdm lub seqpacket. 3. Protokół. Zazwyczaj tcp lub udp. 80 Rozdział 3. Kontrola dostępu do sieci 4. Wątkowanie. W przypadku usługi jednowątkowej: wait; w przypadku usługi wielowątkowej: nowait. 5. Użytkownik. Z prawami tego użytkownika jest uruchamiana usługa. 6. Ścieżka do pliku wykonywalnego serwera. 7. Argumenty serwera rozdzielone znakami białymi. Wyliczanie argumentów njależy rozpocząć od argumentu zerowego, tj. samej nazwy pliku jserwera. Na przykład, w przypadku serwera /usr/sbin/in.telnetd argumentem zerowym byłby in.telnetd. Oto pełny przykład: telnet stream tcp nowait root /usr/sbin/in.teglnetd in.telnetd W wierszu pliku inetd.conf mogą się znaleźć jeszcze inne informacje, np. wielkości buforów, adres lokalnego hosta, na którym odbywa się nasłuchiwanie itd. Szczegółowe informacje można znaleźć na stronie podręcznika. Zobacz również inetd(8), inetd.conf(5), services(5). 3.7. Ograniczanie dostępu zdalnym użytkownikom Problem Chcemy, aby do usługi TCP mieli dostęp tylko wybrani zdalni użytkownicy. Nie możemy przewidzieć, z jakich hostów będą nawiązywane połączjenia. Rozwiązanie Za pomocą zapory sieciowej blokujemy port TCP tej usługi obsługujący połączenia przy- chodzące. [2.6] Uruchamiamy serwer SSH i pozwalamy użytkownikom nawiązywać połą- czenia tunelowane przez SSH z przekazaniem portu. W przydzielaniu lub blokowaniu dostępu będą od tej pory wykorzystywane mechanizmy uwierzytelniania SSH. Dostęp przez protokół SSH proponujemy przez udostępnienie kluczja publicznego. Na przykład, aby uzyskać dostęp do serwera grup dyskusyjnych (port TCP 119) naszego serwera serwer.przykladowy.com, użytkownik korzystający z hosta mojklient będzie musiał zbudować następujący tunel SSH z dowolnego portu lokalnego (np. 23456) do serwera grup dyskusyjnych: mojklient$ ssh -f -N -L 23456:serwer.przykladowy.com:119 serwer.przykladowy.com 3.7. Ograniczanie dostępu zdalnym użytkownikom 81 Teraz musi już tylko połączyć się z tym tunelem. Przykład dla czytnika grup dysku- syjnych tin: mojklient$ export NNTPSERVER=localhost mojklient$ tin -r -p 23456 Omówienie Tunelowanie SSH (czyli przekazywanie portów) polega na przekierowaniu połączenia TCP w taki sposób, że przebiega ono przez klienta i serwer SSH w sposób niemal niewi- doczny1. [6.14] Tunel ten łączy port lokalny ze zdalnym, szyfrując ruch w punkcie wej- ściowym i rozszyfrowując w punkcie wyjściowym. Na przykład, tunel NNTP (usługa grup dyskusyjnych, port 119) działa na następującej zasadzie: czytnik grup dyskusyjnych komu- nikuje się z klientem SSH, który przekazuje dane tunelem do serwera SSH, a ten z kolei komunikuje się z serwerem NNTP (rysunek 3.2). Rysunek 3.2. Tunelowanie protokołu NNTP przez SSH Blokując port usługi (119), uniemożliwiamy realizowanie z tyjm portem połączeń z zewnątrz. Jednak SSH wykorzystuje inny port (22), który nie jest zajblokowany zaporą sieciową. Ewentualnie można sprawdzić, czy dana usługa nie posiada własnych mechanizmów uwierzytelniających. Na przykład, serwer wu-ftpd korzysta z pliku /etc/ftpaccess, demon sshd obsługuje słowo kluczowe AllowUsers itd. Zobacz również ssh(1), sshd(8), tin(1). 1 Połączenie takie nie jest przezroczyste dla usług, rw przypadku których istotne znaczenie mają parametry gniazd, np. FTP. Jednak w innych przypadkach rpołączenie przez SSH jest „widziane” przez usługę jak połączenie standardowe. 82 Rozdział 3. Kontrola dostępu do sieci 3.8. Ograniczanie dostępu zdalnym hostom (xinetd) Problem Chcemy, aby tylko określone zdalne hosty miały dostęp jdo usługi TCP przez xinetd. Rozwiązanie Stosujemy słowa kluczowe only_from i no_access: service ftp { only_from = 192.168.1.107 ... } service smtp { no_access = haker.zly.org ... } Następnie resetujemy xinetd, tak aby zmiany zostały wprowadzone. [3.3] Omówienie To chyba najprostszy sposób kontrolowania dostępu do poszczególnych usług. Oczywiście, można tak kontrolować tylko usługi obsługiwane przez djemon xinetd. Słowa kluczowe only_from oraz no_access mogą występować wielokrotnie w sekcji jednej usługi: { no_access = haker.zly.org blokujemy konkretny host no_access += 128.220. blokujemy wszystkie hosty danej sieci } Jeśli host, który próbuje nawiązać połączenie, jest wymieniony na obu listach (only_from i no_access), xinetd podejmuje jedno z następujących działań: • Jeśli host pasuje do wpisów w obu listach, pod uwagę jesjt brany wpis bardziej specyficzny. Na przykład, określenie 128.220.13.6 jest bardziej specyfijczne niż 128.220.13. • Jeśli komputer pasuje do wpisów w obu listach i wpisy jte są tak samo specyficzne, xinetd zgłasza taki stan jako błąd konfiguracyjny i nie uruchjamia usługi w danym przypadku. 3.9. Ograniczanie dostępu zdalnym hostom (xinetd z biblioteką libwrap) 83 Zatem przy następującym wpisie: service cokolwiek { no_access = 128.220. haker.zly.org kliegnt.przykladowy.com only_from = 128.220.10. .zly.org kliengt.przykladowy.com } połączenia z adresu 128.220.10.3 są dozwolone, a te z adresu 128.220.11.2 — blokowane. Podobnie host haker.zly.org nie może się połączyć, ale inne komputery centralne z domeny zly.org mogą. klient.przykladowy.com jest wpisem nieprawidłowym i połączenia z tego komputera zostaną zablokowane. Ponadto dowolny host, który nie pasuje do żadnego z wpisów, nie zdoła się połączyć z usługą. Zobacz również xinetd.conf(5). 3.9. Ograniczanie dostępu zdalnym hostom (xinetd z biblioteką libwrap) Problem Chcemy, aby tylko określone zdalne hosty miały dostęp do usługi TCP przez program xinetd skompilowany z obsługą biblioteki libwrap. Rozwiązanie Kontrolujemy dostęp, używając plików /etc/hosts.allow i /etc/hosts.deny. Na przykład, aby zezwolić na połączenia Telnet tylko z adresu 192.168.1.100 oraz hostom z domeny przy- kladowy.com, do pliku /etc/hosts.allow dodajemy następujące wpisy: in.telnetd : 192.168.1.100 in.telnetd : *.przykladowy.com in.telnetd : ALL : DENY Następnie resetujemy xinetd, tak aby zmiany zostały wprowadzone. [3.3] Omówienie Ta metoda przeznaczona jest dla osób, którym zależy na przeniesieniu kontroli dostępu z mechanizmów specyficznych dla demona xinetd [3.8] do plików /etc/hosts.allow i /etc/ hosts.deny albo którym bardziej odpowiada składnia i możliwości tych plików. Składnia ta daje bardzo szerokie możliwości definiowania hostów i sieci, którym zezwalamy lub nie zezwalamy na połączenia ze specyficznymi usługami świajdczonymi przez nasz system. 84 Rozdział 3. Kontrola dostępu do sieci Przedstawiona receptura działa tylko wtedy, gdy program xinetd skompilowano z włączoną obsługą biblioteki libwrap. W celu sprawdzenia, czy program xinetd został tak skompilo- wany, sprawdzamy wynik polecenia: $ strings /usr/sbin/xinetd | grep libwrap libwrap refused connection to s from s s started with libwrap options compiled in. Jeśli zobaczymy charakterystyczne wiersze w formacie printf — takie jak wyżej — posia- damy wersję programu xinetd z wkompilowaną obsługą biblioteki libwrap. Zobacz również xinetd(8), hosts.allow(5). 3.10. Ograniczanie dostępu zdalnym hostom (xinetd w połączeniu z tcpd) Problem Chcemy, aby tylko określone zdalne hosty miały dostęp do usługi TCP przez program xinetd, ale programu xinetd nie skompilowano z obsługą biblioteki libwrap. Rozwiązanie Definiujemy reguły kontroli dostępu w plikach /etc/hosts.allow i (lub) /etc/hosts.deny. Na przykład, aby zezwolić na połączenia Telnet tylko z adresu 192.168.1.100 oraz hostom z domeny przykladowy.com, do pliku /etc/hosts.allow dodajemy następujące wpisy: in.telnetd : 192.168.1.100 in.telnetd : *.przykladowy.com in.telnetd : ALL : DENY Następnie modyfikujemy pliki /etc/xinetd.conf lub /etc/xinetd.d/nazwaluslugi tak, aby zamiast danej usługi był uruchamiany program tcpd: Stara wersja pliku /etc/xinetd.conf lub /etc/xinetdf.d/telnet: service telnet { ... flags = ... server = /usr/sbin/in.telnetd ... } 3.11. Ograniczanie dostępu zdalnym hostom (inetd) 85 Nowa wersja pliku /etc/xinetd.conf lub /etc/xinetd.fd/telnet: service telnet { ... flags = ... NAMEINARGS server = /usr/sbin/tcpd server_args = /usr/sbin/in.telnetd ... } Następnie resetujemy xinetd, tak aby zmiany zostały wprowadzone. [3.3] Omówienie Przedstawiona receptura dotyczy tylko tych rzadkich przypadków, gdy z jakiegoś po- wodu nie chcemy korzystać z wbudowanych mechanizmów kontroli dostępu programu xinetd [3.8], a program xinetd nie posiada wkompilowanej obsługi biblioteki libwrap. Opisana metoda jest wzorowana na pierwotnej metodzie kontroli dostępu stosowanej w programie inetd i wykorzystującej mechanizm TCP-wrappers. [3.11] W pliku należy umieścić znacznik NAMEINARGS, w wyniku którego program xinetd szuka nazwy pliku wykonywalnego w opcji server_args (w tym przypadku jest to /usr/sbin/ in.telnetd). Zobacz również xinetd(8), hosts.allow(5), tcpd(8). 3.11. Ograniczanie dostępu zdalnym hostom (inetd) Problem Chcemy, aby tylko określone zdalne hosty miały dostęp jdo usługi TCP przez inetd. Rozwiązanie Używamy demona tcpd i określamy reguły dostępu w plikach /etc/hosts.allow i (lub) /etc/ hosts.deny. Poniżej przedstawiono przykład „opakowania” (ang. wrap) demona usługi Telnet, in.telnetd tak, aby zezwolić na połączenia tylko z adresu 192.168.1.100 oraz hostom z domeny przykladowy.com, do pliku /etc/hosts.allow dodajemy następujące wpisy: in.telnetd : 192.168.1.100 in.telnetd : *.przykladowy.com in.telnetd : ALL : DENY 86 Rozdział 3. Kontrola dostępu do sieci Następnie modyfikujemy odpowiednie pliki konfiguracyjne, wpisując zamiast nazwy usługi słowo tcpd i restartujemy program inetd. Omówienie Pliki kontroli dostępu /etc/hosts.allow i /etc/hosts.deny zawierają definicje reguł, na podstawie których zdalne hosty uzyskują dostęp do lokalnych usług TCP. Demon kontroli dostępu tcpd przetwarza te reguły i określa, czy w danym przypadku uruchamiać usługę opisaną regułami. Najpierw ustawiamy reguły kontroli dostępu w plikach /etc/hosts.allow i (lub) /etc/hosts. deny. Następnie modyfikujemy plik /etc/inetd.conf tak, aby dana usługa była uruchamiana przez tcpd: Stara wersja pliku /etc/inetd.conf: telnet stream tcp nowait root /usr/sbin/in.telngetd in.telnetd Nowa wersja pliku /etc/inetd.conf: telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd Następnie restartujemy inetd, tak aby zmiany zostały wprowadzone. [3.4] Zobacz również hosts.allow(5), tcpd(8), inetd.conf(5). 3.12. Ograniczanie dostępu o określonych porach dnia Problem Chcemy, aby usługa była dostępna tylko o określonych porjach dnia. Rozwiązanie W przypadku programu xinetd używamy obsługiwanego przez ten program atrybutu access_times. Na przykład, aby usługa telnetd była dostępna codziennie od 8:00 do 17:00, napiszemy: Plik /etc/xinetd.conf lub /etc/xinetd.d/telnet: service telnet { ... access_times = 8:00-17:00 } 3.12. Ograniczanie dostępu o określonych porach dnia 87 W przypadku demona inetd musimy zaimplementować taką funkcję własnoręcznie. W tym celu zastosujemy makroprocesor m4 i usługę cron. Najpierw wymyślamy łańcuchy zna- ków określające pory dnia, np. „praca” oznacza godzinę 8:00, a „odpoczynek” godzinę 17:00. Następnie piszemy skrypt (np. uslugi-inetd, który za pomocą makroprocesora m4 wybiera wiersze z pliku szablonu, tworzy plik konfiguracyjny demona inetd i wymusza na demonie inetd odczytanie tego pliku): /usr/local/sbin/uslugi-inetd: #!/bin/sh m4 $@ /etc/inetd.conf.m4 /etc/inetd.conf.$$ mv /etc/inetd.conf.$$ /etc/inetd.conf kill -HUP `pidof inetd` Kopiujemy oryginalny plik /etc/inetd.conf do pliku szablonu /etc/inetd.conf.m4. Edytujemy szablon tak, aby usługi były włączane warunkowo, w zależności od wartości pewnego parametru, np. PORA_DNIA. Przykładowy, oryginalny wiersz dotyczący usługi Telnetj: telnet stream tcp nowait root /usr/sbin/tcpd gin.telnetd wyglądałaby następująco: ifelse(PORA_DNIA,praca,telnet stream tcp nowait root g/usr/sbin/tcpd in.telnetd) Powyższy zapis należy interpretować tak: „jeśli zmienna PORA_DNIA ma wartość praca, dołącz następujący wiersz dotyczący usługi Telnet; w przeciwnym razie nie dołączaj jej”. Na koniec wprowadzamy odpowiednie wpisy w pliku crontab, które będą włączały lub wyłączały usługi o określonych porach przez ustawieniej parametru PORA_DNIA: 0 8 * * * /usr/local/sbin/uslugi-inetd -DPORA_DNIA=praca 0 17 * * * /usr/local/sbin/uslugi-inetd -DPORA_DNIA=odpoczynek Omówienie W przypadku demona xinetd możemy z łatwością kontrolować dostęp do poszczególnych usług za pomocą parametru access_times. Czas określa się w formacie 24-godzinnym. W przypadku demona inetd sprawa jest bardziej skomplikowana. Żeby włączyć lub wyłą- czyć usługę o określonej porze dnia, musimy podmienić plik konfiguracyjny. Przedsta- wioną recepturę można w prosty sposób rozszerzyć o obsługę dodatkowych parametrów i wartości podobnych do PORA_DNIA. Zauważmy, że w programie xinetd definiowane są przedziały czasowe, natomiast w naszej recepturze dla programu inetd podajemy tylko pory, o których cron uruchamia skrypt uslugi-inetd. Zobacz również xinetd.conf(5), inetd.conf(5), m4(1), crontab(5). 88 Rozdział 3. Kontrola dostępu do sieci 3.13. Ograniczanie określonym hostom dostępu do serwera SSH Problem Chcemy ograniczyć dostęp do serwera sshd konkretnym, zdalnym hostom. Rozwiązanie Wykorzystujemy wbudowaną w program sshd obsługę mechanizmu TCP-wrappers. Wystarczy do plików /etc/hosts.allow i /etc/hosts.deny dodać odpowiednie reguły i jako usługę wpisać w nich sshd. Na przykład, aby tylko host 192.168.0.37 miał dostęp do serwera SSH, wstawimy następujące wiersze do pliku /etc/hosts.allow: sshd: 192.168.0.37 sshd: ALL : DENY Omówienie Wywołanie tcpd czy innego programu nie jest konieczne, ponieważ program sshd sam odczytuje reguły w plikach /etc/hosts.allow i /etc/hosts.deny. Obsługa mechanizmu TCP-wrappers w programie sshd jest opcjonalna i włącza się ją w czasie kompilacji. W dystrybucji Rerd Hat 8.0 opcja ta została wkompilowana w sshd, ale w dystrybucji SuSE już nie. Jeśli nie jesteśmy pewnri, czy nasza wersja programu sshd obsługuje mechanizm TCP-wrappers albo gdy sshd najwyraźniej ignoruje wpisy w plikach /etc/hosts.allow i /etc/hosts.deny, wykonujemy następujący test: $ strings /usr/sbin/sshd | egrep hosts\.(allow|deny) /etc/hosts.allow /etc/hosts.deny Jeśli program egrep nie zwraca żadnych wyników, obsługa mechanizmu TCP-wrappers nie została wkompilowana w naszą wersję prrogramu sshd. Pozostaje wtedy pobranie oprogramowania OpenSSH z adresru http://www.openssh.com (lub pobranie pakietu RPM z kodem źródłowym przygotowanego przez producenta naszej dystrybucji) ri przebudowanie go: $ ./configure --with-libwrap ...inne wymagane opcje... $ make # make install Zobacz również sshd(8), hosts_access(5). 3.14. Ograniczanie dostępu do serwera SSH w zależności od konta systemowego 89 3.14. Ograniczanie dostępu do serwera SSH w zależności od konta systemowego Problem Chcemy, aby przychodzące połączenia SSH były dozwalane tylko niektórym kontom systemowym. Rozwiązanie W pliku konfiguracyjnym /etc/ssh/sshd_config wykorzystujemy słowo kluczowe AllowU- sers. Na przykład, aby zezwolić na połączenia SSH z dowolnego miejsca na świecie z kon- tami użytkowników kowalski i nowak — i tylko z tymi kontami — użyjemy wpisu: /etc/ssh/sshd_config: AllowUsers kowalski nowak Dopuszczając połączenia z adresu zdalny.przykladowy.com z kontem kowalski i żadne inne połączenia przychodzące, napiszemy: AllowUsers kowalski@zdalny.przykladowy.com Zauważmy, że nie ma tu znaczenia zdalny użytkownik o nazwie kowalski@zdalny.przy- kladowy.com, a jedynie połączenie ze zdalnego hosta zdalny.przykladowy.com z lokalnym kontem kowalski. Po zmodyfikowaniu pliku sshd_config restartujemy sshd, tak aby zmiany zostały uwzględ- nione. Omówienie Słowo AllowUsers umożliwia określenie listy kont lokalnych, dla których są dozwolone połączenia SSH. Jest to lista definitywna: jeśli jakieś konto nie jest na niej wymienione, nie będzie możliwe połączenie się z nim przez SSH. Zapis w drugim z wyżej wymienionych formacie (uzytkownik@host) wygląda dość niefortunnie, bo przypomina adres e-mail lub określenie użytkownika zdalnego — a nie jest ani jednym, ani drugim. Wiersz: AllowUsers uzytkownik@zdalnyhost oznacza „zezwalaj zdalnemu systemowi o nazwie zdalnyhost na połączenia przez SSH z naszym lokalnym kontem o nazwie uzytkownik”. Sama obecność wpisu ze słowem kluczowym AllowUsers nie gwarantuje jeszcze dostępu do konta przez sshd: zdalny użytkownik musi jeszcze dokonać zwykłego uwierzytelnia- nia (przez hasło, klucz publiczny itd.), nie mówiąc już o ewentualnych innych blokadach (reguły zapory sieciowej itp.). 90 Rozdział 3. Kontrola dostępu do sieci Zobacz również sshd_config(5). 3.15. Ograniczanie zasobów usług do określonych katalogów systemu plików Problem Chcemy ograniczyć zasoby usługi do określonego katalogu (i podkatalogów) systemu plików. Rozwiązanie Tworzymy klatkę chroot, uruchamiając zamiast usługi program GNU chroot. Jako argument tego programu podajemy nazwę pliku wykonywalnego usługi. Innymi słowy, zmieniamy następujący wpis: Plik /etc/xinetd.conf lub /etc/xinetd.d/mojausluga:f service mojausluga { ... server = /usr/sbin/mojausluga -a -b ... } na następujący: service mojausluga { ... user = root server = /usr/sbin/chroot server_args = /var/klatka /usr/sbin/mojausluga -a g-b ... } Omówienie Program chroot wymaga dwóch argumentów: nazwy katalogu i nazwy programu. Powo- duje, że program zachowuje się tak, jakby dany katalog był katalogiem głównym systemu plików (/). Takie rozwiązanie uniemożliwia uzyskanie przez program dostępu do plików spoza hierarchii katalogu podanego jako argument chroot — czyli spoza „klatki chroot” — ponieważ z punktu widzenia programu chroot pliki te nie mają nazwy. Nawet jeśli pro- gram jest uruchamiany z przywilejami roota, tego ograniczenia nie można obejść. Funkcja systemowa wywoływana przez program chroot (o identycznej nazwie, chroot) działa jednokierunkowo: kiedy zostanie już wywołana, nie istnieje funkcja systemowa odwraca- jąca jej działanie w kontekście wywołującego ją procejsu lub jego procesów potomnych. 3.15. Ograniczanie zasobów usług do określonych ka
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Linux. Bezpieczeństwo. Receptury
Autor:
, ,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: