|
|
pl:dydaktyka:unix:lab_administrowanie_2 [2015/12/03 10:40] kkluza [DO_PRZYGOTOWANIA] |
pl:dydaktyka:unix:lab_administrowanie_2 [2019/06/27 15:50] |
====== Tryby pracy i monitorowanie systemu ====== | |
| |
<code> | |
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. | |
</code> | |
| |
===== 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: | |
<code> | |
ifconfig if address adres netmask maska | |
</code> | |
* Włączanie, wyłącznie interfejsu: | |
<code> | |
ifconfig if up,down | |
</code> | |
* Wyświetlanie informacji o interfejsie: | |
<code> | |
ifconfig if | |
</code> | |
| |
**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: | |
<code> | |
route -v -n {add|del} {-host|-net} adres gw adres netmask maska interfejs | |
</code> | |
| |
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.<initdefault>.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.<initdefault>.d. Jakie parametry przyjmuje skrypt? | |
- Wykorzystując ćwiczenie 5., ręcznie zatrzymać i ponownie uruchomić wybraną usługę z katalogu rc.<initdefault>.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 <Ctrl-Alt-Del> 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 na 2 sposoby. | |
- Zmienić wartość nice dla powłoki w której się pracuje. | |
- ^_^ Uruchomić w tle 2 procesy find, z nice odpowiednio 0 i 20. 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: | |
| |
<code> | |
logger [-p facility.priority] wiadomosc | |
</code> | |
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. | |
<code> | |
ź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 | |
</code> | |
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'' | |