====== Tryby pracy i monitorowanie systemu ====== Duża firma organizuje dla swoich pracowników bal maskowy. - szef przychodzi w masce wilka, - sekretarka przychodzi w masce Kopciuszka, - admin przychodzi w masce 255.255.255.0. ===== DO_PRZYGOTOWANIA ===== Samodzielnie należy przed tym laboratorium przygotować: * powtórzyć pracę z vi! * przeczytać manuale do plików //inittab//, //syslog.conf//, //crontab// * przejrzeć slajdy wykładu dot. administracji (Podstawy zarządzania systemem, Procesy i monitorowanie systemu) * przeczytać: * {{pl:dydaktyka:unix:gjn-cron.pdf|Konfigurowanie i zastosowanie systemu Cron}} * {{pl:dydaktyka:unix:gjn-syslog.pdf|Monitorowanie systemu GNU/Linux przy pomocy Syslog}} * prześledzić proces uruchamiania i zatrzymywania systemu, * sprawdzić działanie systemu poczty elektronicznej, w tym klienta mail - potrzebne do czytania raportów Crona, * przypomnieć sobie podstawowe informacje o TCP/IP niezbędne do skonfigurowania interfejsu sieciowego, a tym adresację IP. ===== WPROWADZENIE ===== ==== Tryby pracy systemu ==== Uruchamianie systemu można podzielić na pewne ogólne etapy: * start programu ładującego jądro (bootstrapu), np. //lilo//,//grub//, * ładowanie i dekompresja jądra, * inicjalizacja podstawowych urządzeń, których obsługa jest wkompilowana w jądro, * sprawdzenie i podmontowanie głównego systemu plików, Po załadowaniu jądra uruchamiany jest init: * uruchomienie procesu //init// (zawsze PID=1), * przeczytanie pliku konf. ///etc/inittab//, * sprawdzenie i podmontowanie pozostałych systemów plików, * przejście na odpowiedni poziom pracy (ang. //runlevel//), * uruchomienie usług funkcjonujących na tym poziomie, * zezwolenie na logowanie się użytkowników. //LILO// ładuje jądro Linuksa do pamięci. Jest instalowany na początku twardego dysku (MBR), lub jego partycji i umożliwia uruchamianie różnych systemów operacyjnych. Nie obsługuje jednak systemów plików i ma ograniczone możliwości obsługi sytuacji awaryjnych. Bootloaderem nowej generacji jest //GRUB//, obsługuje też ładowanie systemu przez sieć (DHCP/TFTP). //Init// jest zawsze pierwszym procesem tworzonym przez jądro i ma zawsze PID=1. Uruchamia wszystkie inne procesy, działając z uprawnieniami administratora. Zmienia poziomy pracy systemu (runlevels), w tym uruchamia i zatrzymuje system. Konfiguracja jest w pliku ///etc/inittab//. === Poziomy pracy systemu=== Są to różne tryby pracy systemu, w Linuksie: * poziom 0 oznacza zatrzymanie (halt), * poziom 1 jest trybem dla jednego użytkownika (single) - administratora, * poziomy 2 - 5 są różnymi trybami pracy dla wielu użytkowników, * 6 - oznacza zatrzymanie i restart (reboot), * poziomy pracy można zmieniać: ''# init N'' * przeważnie //inittab// jest w stylu SYSV, każdemu poziomowi odpowiada katalog ///etc/rcN.d// i w nim skrypty //Kxx Sxx// W nowych dystrybucjach Linuksa do uruchamiania systemu stosuje się uniwersalny skrypt rc: * pracuje na każdym poziomie od 0 - 6, * skrypt zatrzymuje i uruchamia usługi na każdym poziomie, * każdemu poziomowi pracy jest przyporządkowany podkatalog ///etc/rc<#>.d//, * nazwa usługi (skryptu) w tych katalogach ma postać: //K##nazwa// lub //S##nazwa// ===Zatrzymanie systemu === składa się z etapów: * wydanie polecenia **shutdown**, * system powiadamia użytkowników o zatrzymaniu, * wszystkie procesy użytkowników są zatrzymywane, * system przechodzi na poziom 0, lub 6, * zatrzymanie odpowiednich usług, * odmontowanie systemów plików, * zatrzymanie lub restart systemu. ==== Monitorowanie pracy ==== Linux (podobnie jak systemy Unix) ma mechanizmy rejestrujące każde zdarzenie w systemie. * rejestrowanie (logowanie; log - dziennik) oznacza systematyczne zapisywanie odpowiednich informacji do plików, * pliki rejestrów określa się po ang. //log files//, * logowanie jest wykonywane przez pracujący bez przerwy system //Sysklogd//, składający się z demonów: //klogd// i //syslogd//, Syslog: * system Sysklogd zapisuje (loguje) informacje do plików rejestrów/"logów" systemowych, w katalogu ///var/log// * pliki rejestrów są plikami tekstowymi o jednolitej składni, * pliki rejestrów są cyklicznie porządkowane przy pomocy specjalnych programów wywoływanych przez //Cron//. * syslogd jest jednym z najważniejszych demonów systemowych, * syslogd rejestruje wszystkie informacje o pracy systemu, * jest uruchamiany jako jeden z pierwszych procesów i zamykany jako jeden z ostatnich, * konfiguracja syslogd znajduje się w pliku ///etc/syslog.conf// Konfiguracja syslogd: * plik ///etc/syslog.d (5)// zawiera reguły według których syslogd sortuje informacje i zapisuje je do różnych plików rejestrowych, * reguła to dwa pola: ''selector action'', * ''selector'' ma 2 części ''facility.priority'', * ''facility'' określa system z którego pochodzi wiadomość np.: ''auth, kern, mail, syslog'', * ''priority'' mówi o stopniu ważności wiadomości, np.: ''debug, warn, err, emerg''. * w polu action może być wpisany plik, urządzenie sterujące terminalem. Pliki rejestrowe systemu: * nazwy i zawartość zależą od konfiguracji syslogd, * pliki rejestrów są plikami tekstowymi, * składają się z linii o określonym formacie, przeważnie jest to: data godzina hostname proces: komunikat * umieszczane są w katalogu ///var/log//, * niektóre duże programy jak Apache czy FTP mogą zakładać w ///var/log// własne katalogi z logami. ==== Korzystanie z Cron ==== Automatyzacja niektórych prac systemu jest niezwykle pomocna, używa się do niej programów: * at umożliwia jednorazowe uruchomienie programu o zadanym czasie, * cron umożliwia cykliczne uruchamianie programów, * obydwa systemy mogą być używane przez wszystkich użytkowników, * składają się z części serwera (demona) i klienta - uruchamianego przez użytkownika, * serwer atd kolejkuje zadania każdego użytkownika, * w przypadku cron każdy użytkownik ma jeden plik //crontab//, w którym zapisuje wszystkie zadania, * cron udostępnia dodatkową funkcjonalność administratorowi, * cron jest jednym z podstawowych narzędzi automatyzujących pracę administratora. Do komunikacji z demonem crond służy polecenie **crontab**: * **crontab** umożliwia edycję i pokazywanie pliku //crontab//, * każdy użytkownik ma jeden taki plik, * w pliku może się znajdować wiele zadań, każde w osobnej linii, * polecenie **crontab** korzysta z zewnętrznego edytora do edycji pliku. Składnia pliku //crontab//: * linia składa się z sześciu pól, ostatnie to nazwa polecenia do wykonania, * pola w każdej linii oznaczają kolejno: minutę, godzinę, dz. mies., miesiąc, dz. tyg., * gwiazdka w miejscu wartości oznacza: "dla każdej wartości pola", np.: co godzinę, * kilka wartości rozdziela się przecinkami, * znak "-" pozwala na podanie zakresu wartości, * połącznie go ze znakiem "/" umożliwia podanie kroku w obrębie zakresu. Plik ///etc/crontab// zawiera centralną konfigurację demona cron, ma możliwość podania przed poleceniem nazwy użytkownika z prawami którego będzie wykonywane polecenie. //Cron// jest m.in. przydatny w cyklicznym archiwizowaniu i analizowaniu plików //Sysloga//. ==== Konfigurowanie interfejsów sieciowych ==== Konfigurowanie interfejsu sieciowego można podzielić na kilka etapów. * określenie parametrów (IP, maska, itp.), * konfigurownie przy pomocy ifconfig, * testowanie przy pomocy ping, * zapis konfiguracji w plikach dystrybucji systemu. Przed przystąpieniem do konfigurowania interfejsu trzeba ustalić jego podstawowe parametry. Są to: * adres IP, * maska sieci IP, * broadcast IP, * adres MAC, jeżli wykorzystuje się DHCP. **ifconfig** służy do konfigurowanie interfejsu sieciowego. * Podstawowy sposób wywołania to: ifconfig if address adres netmask maska * Włączanie, wyłącznie interfejsu: ifconfig if up,down * Wyświetlanie informacji o interfejsie: ifconfig if **ping** jest uniwersalnym programem będącym częścią narzędzi dla sieci TCP/IP. Program służy do testowania połączeń w sieci IP, wykorzystuje protokół ICMP (pakiety echo replay/requst). Interfejs loopback jest to wewnętrzny interfejs sieciowy, pełni rolę interfejsu zwrotnego, ma zawsze adres 127.0.0.1 i jest niezbędny do poprawnego działania aplikacji opartych o sieć TCP/IP. Dystrybucje mogą dostarczać: * programów typu **ifup**, **ifdown**, * plików opisujących konfigurację interfejsów ///etc/network//, ///etc/sysconfig/network//, * dodatkowych narzędzi konfiguracyjnych typu RHControlPanel. Przed przystąpieniem do konfigurowania tablicy routingu należy określić podstawowe parametry sieci do której włącza się interfejsy. Są to: * adresy interfejsów, * adresy sieci IP, * ewentualnie inne sieci do których określa się bezpośrednio dostęp, * adres routera przekazującego pakiety poza sieć, default route, Podstawowym programem do konfigurowania routingu jest program route. Program służy do: * zarządzania tablicą routingu, * tablica określa sposób przekazywania pakietów przez stos TCP/IP, * sposób użycia to: route -v -n {add|del} {-host|-net} adres gw adres netmask maska interfejs Do testowania routingu można użyć programu traceroute. Program służy do testowania routingu w sieci IP, wykorzystuje pole TTL pakietów IP i protokół UDP lub protokół ICMP. Resolver jest biblioteką będącą częścią biblioteki systemowej. Zajmuje się odnajdywaniem nazw maszyn pracujących w sieci. Jego konfiguracja składa się z kilku plików. Nazwę maszyny w sieci IP ustawia się przy pomocy polecenia hostname. Nazwę najczęściej zapisuje się na stałę w pliku ///etc/hostname// czytanym w trakcie startu systemu. Plik //host.conf// jest jednym z podstawowych elementów konfiguracji: zawiera część konfiguracji resolvera, opcje to: * ''order {hosts,bind,nis}'' - porządek odwoływania się do DNS i hosts, * ''trim on/off'' - usuwanie nazw domen * ''multi on/off'' - wielokrotne nazwy * ''nospoof,spoofalert,reorder on/off'' W pliku resolv.conf zapisuje się: * adresy serwerów DNS: nameserver addr, * nazwę lokalnej domeny: domain, * sposób przeszukiwania domen: search. Plik ///etc/hosts// zawiera istotne dla funkcjonowania resolvera informacje. Znajdują się w nim między innymi: * adresy IP lokalnych interfejsów (w tym musi być loopback), * nazwa FQDN maszyny, * adresy sieci podłączonych do interfejsów lokalnych, * adresy innych maszyn i sieci. Do testowania resolvera można użyć: * ping wraz z nazwą symboliczną (domenową), * narzędzi do pracy z DNS: **host**, **nslookup**, * powyższe dwa programy działają tylko w przypadku połączenia z serwerem DNS. ===== ĆWICZENIA ===== UWAGA! W poniższych ćwiczeniach należy zwracać baczną uwagę na to, które z nich wymagają dostępu administratora. Warto sprawdzić które czynności mogą być wykonane z poziomu użytkownika! ==== - Zamykanie ==== - Zamknąć system przy pomocy **shutdown**. - ^_^ Zamknąć system przy pomocy **shutdown** z opóźnieniem 3 minutowym, wysyłając przy tym stosowną informację do użytkowników. ==== - Start systemu ==== Zwrócić uwagę jak przebiega start systemu UML. Po zalogowaniu jako root sprawdzić działanie plecenia **dmesg**. ==== - Init ==== - Sprawdzić jaki jest domyślny tryb pracy systemu. - W pliku ///etc/inittab// proszę zmienić pole ''initdefault''. Zrestartować system, sprawdzić i ocenić wyniki modyfikacji. - Wykonać ćwiczenie 1. Odnaleźć w katalogu ///etc// podkatalog rc.d. Zamienić kolejność uruchamiania 2 wybranych usług. - Jeżeli usługa jest uruchamiana z numerem "nn" (Snn), to z jakim numerem powinna być zatrzymywana? - Uruchmić jeden ze skryptów z katalogu rc..d. Jakie parametry przyjmuje skrypt? - Wykorzystując ćwiczenie 5., ręcznie zatrzymać i ponownie uruchomić wybraną usługę z katalogu rc..d. - ^_^ Wykonać ćwiczenie 1. Zmodyfikować strukturę plików startowych tak, by podczas przejścia na domyślny tryb pracy, jako ostatnie było uruchamiane dodtakowe wybrane polecenie (skrypt). - //We własnym zakresie//: W pliku ///etc/inittab// proszę zmienić pole ''ctrlaltdel'', tak aby wciśnięcie klawiszy powodowało (Uwaga: w UML nie można tego sprawdzić, wciśnięcie klawiszy jest przechwytywane): - brak reakcji, - pojawienie się na konsoli komunikatu, - zatrzymanie (halt) systemu. ==== - Procesy i sygnały ==== - Po otwarciu dwóch oddzielnych sesji proszę w każdej z nich wywołać polecnie: **ps**. Jakie procesy są widoczne? - Proszę przećwiczyć użycie opcji ''l u m e'' polecenia **ps**. - Jakich opcji ps należy użyć, aby obejrzeć: - proces ''init'', - PID procesów, - PPID procesów, - środowisko procesów, - informacje o zużyciu pamięci przez procesy. - Jak przy pomocy ps i innego polecenia można oglądnąć procesy wybranego użytkownika? - Uruchomić w tle proces find, odnaleźć jego PID i usunąć proces. - ^_^ Jak można przy pomocy jednokrotnego użycia kill usunąć wszystkie procesy w danej sesji? - Powtórzyć kilkakrotnie ćwiczenie 5. za każdym razem usuwając proces innym sygnałem. Jakie pojawiają się komunikaty? - Jaki sygnał należy wysłać do demona systemowego by przeczytał swoją konfigurację? ==== - Priorytety procesów ==== - Przy pomocy **ps** wyświetlić wartości nice procesów. - Uruchomić proces **find** z nice 10. Jak zmienić wartość nice tego procesu? - Zmienić wartość nice dla powłoki w której się pracuje. - ^_^ Uruchomić w tle 2 procesy find, z nice odpowiednio 0 i 19. Który z nich zakończy się pierwszy? Zmierzyć czas ich działania przy pomocy **time**. ==== - Polecenia at i cron ==== - O ile w systemie jest uruchomiony demon **atd** (sprawdzić!), proszę wykonać poniższe: Przy pomocy polecenia at proszę zlecić uruchomienie: - **who** za godzinę, - **ps** w najbliższą niedzielę, - **df** jutro o tej samej porze. Proszę oglądnąć kolejkę zleceń i zawartość skryptów zleceń. - Powtórzyć ćwiczenie 1. dla poleceń, które nie wypisują informacji na wyjściu. Czy został wysłany list z raportem (sprawdzić przez mail)? Jeżeli nie, to jak wymusić wysłanie raportu pocztą elektroniczną? - W sesji administratora zabronić dostępu do **at** wybranemu użytkownikowi. Sprawdzić jak działa kontrola dostępu. - ^_^ Uruchamiać przy pomocy Cron wybrane polecenie: - co godzinę, - co pół godziny, - w każdy poniedziałek o 6:00, - codziennie, o 6:20, 8:20, 12:20, 18:20, - co 4 godziny ale tylko od poniedziałku do piątku, - o 12:00, 13:00, 14:00, 15:00; w 1., 13., 20. dzień każdego miesiąca. - Jak uruchamiać program codziennie korzystając z Cron, ale bez modyfikacji pliku crontab? - ^_^ Założyć katalog ///etc/cron.new// i tak skonfigurować demon Cron, by pliki wykonywalne w tym katalogu były uruchamiane 3 razy dziennie. ==== - Konfiguracja syslogd ==== Do testowania syslogd można użyć polecenia **logger**, które wysyła wiadomości do **syslogd**. Wywołanie polecenia jest następujące: logger [-p facility.priority] wiadomosc Użycie parametru ''-p'' jest opcjonalne. Dodatkowo można etykietować wpisy przez ''-t''. - ^_^ Skonfigurować syslogd tak, aby odpowiednie komunikaty były kierowane do podanych plików. źródło priorytet plik user wszystkie user.log user warning user_warn.log daemon wszytskie daemon.log local7 info local.log local7 niższe od err local_err.log mail i uucp wszystkie mail.log security i auth wszystkie security.log wszystkie emerg emerg.log wszystkie wszystkie all_messages.log Co należy zrobić, aby zmiany w konfiguracji odniosły skutek? Proszę przetestować wprowadzone zmiany przy pomocy polecenia **logger**. ==== - Rotacja plików rejestrowych ==== - Skonfigurować system Cron w ten sposób by programy logrotate lub savelog były uruchamiane: - w każdą niedzielę o 23:00, - 30. dnia miesiąca o 5:00, - codziennie o 2:00. - ^_^ Proszę skonfigurować logrotate aby dokonywał rotacji plików: - ///var/log/messages// codziennie, kompresował je i zachowywał 8 poprzednich fragmentów, - ///var/log/security// codziennie, bez kompresji i datę każdej rotacji zapisywał w pliku ///var/log/rotate.log//, - ///var/log/debug co// tydzień, bez kompresji. ==== - Podstawy konfigurowania interfejsów sieciowych ==== - Proszę ustalić z jakich adresów IP mogą korzystać terminale, maszyny UML wykorzystywane za zajęciach (domyślnie nieroutowalna sieci 192.168.1.0/24). - Sprawdzić bieżącą konfigurację interfejsu i zapisać ją. - Skonfigurować interfejs ''eth0'' przy pomocy **ifconfig**. - Sprawdzić łączność z innymi maszynami przez **ping**. - Przeglądnąć bieżącą konfigurację routingu na terminalu (w UML) i na serwerze przez **route**. - Przetestować łączność z wybranym odległym serwerem przez traceroute. - Oglądnąć ///etc/resolv.conf// sprawdzić działanie DNS przez **host**, **dig**, **nslookup**. - Sprawdzić pola MX dla różnych domen, wskazują one na Mail eXchangery domeny (serwery poczty), np.: ''dig agh.edu.pl mx''