====== 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''