Podstawowe usługi systemu
Lokalne Sieci Komputerowe 1
Plan wykładu
•
init,
• getty,
• login
• telnet,
• ssh,
• syslog
• cron i at
Inicjalizacja systemu Linux
Program
init kontroluje proces ładowania trybu
wieloużytkownikowego, m.in. uruchamia
wszystkie zaplanowane skrypty.
• Podczas normalnego działania
init sprawdza
czy działa
getty (aby umożliwić użytkownikom
zalogowanie), adoptuje osierocone procesy.
• Podczas zamykania systemu
init jest
odpowiedzialny za zabicie wszystkich procesów,
oraz inne skonfigurowane rzeczy.
init
Czynności przygotowujące system do pracy
wykonywane przez proces init:
• sprawdzanie spójności systemów plików za pomocą
polecenia
fsck,
• montowanie lokalnych dysków,
• startowanie UNIX-owych procesów usługowych
• uruchamianie demonów sieciowych i montowanie
(o ile są dostępne)
zdalnych systemów plików,
• umożliwienie użytkownikom włączania się do systemu
przez wystartowanie procesów
getty.
Poziomy pracy – System V
W systemach UNIX istnieje szereg z góry zdefiniowanych
stanów systemu, określanych jako poziomy pracy
(run-levels) identyfikowanych jednoznakową nazwą
(zwykle cyfrą).
Poziomy pracy – System V
Poziom pracy
Nazwa i wykorzystanie
0
Wyłączony: warunki, w których można bezpiecznie odłączyć zasilanie.
1 (s lub S)
Tryb jednoużytkownikowy lub administracyjny (w wielu wersjach nierozróżnialne)
2
Tryb wieloużytkownikowy: normalny stan działania pojedynczego systemu, nie
skonfigurowanego w sieci.
3
Stan dostępu do zdalnych plików. Poziom 3 jest sieciowym poziomem pracy systemu.
4
Stan konfigurowalny: (nie używany)
5
Stan firmowy: stosowany w celu wykonania niektórych czynności konserwacyjnych.
6
Restart systemu.
plik /etc/inittab
• Plik
inittab opisuje, które procesy powinny
zostać uruchomione przez proces
init podczas
startu systemu. Każda linia w pliku
inittab jest
zapisana w następującym formacie:
id : runlevels : action : process
• id – etykieta jednoznacznie identyfikująca linię
• runlevel - lista poziomów pracy
• action - akcja, która powinna zostać podjęta
• process - proces, który zostanie uruchomiony
plik /etc/inittab (pole action)
•
initdefault - domyślny poziom pracy systemu
•
boot - wykonywana podczas startu systemu
•
bootwait - wykonywana podczas startu systemu, init czeka na jej
zakończenie
•
sysinit - wykonywana przed akcjami typu boot oraz bootwait
•
wait - wykonywana w chwili przejścia na określony polem runlevel
poziom pracy, proces
init czeka na jej zakończenie
•
once - wykonywana w chwili przejścia na określony polem runlevel
poziom pracy
•
respawn - proces zastaje automatycznie wznowiony po zakończeniu
działania (np. getty)
•
ctrlaltdel - wykonywana po naciśnięciu przez użytkownika
kombinacji klawiszy Alt+Ctrl+Delete
/etc/rc*.d
• Nazwy wszystkich plików w takim katalogu rozpoczynają się od liter
"
S" lub "K", po których następuje dwucyfrowa liczba, a następnie
opisowy fragment nazwy.
• Skrypty "
rcn" wykonują pliki zaczynające się na "K", w kolejności
alfabetycznej, a następnie, również alfabetycznie, pliki
S
• Pliki na "
K" używane są zwykle w celu zabijania procesów i
wykonywania innych związanych z tym czynności.
• Pliki z nazwą rozpoczynającą się od litery "
S" odpowiadają za
startowanie procesów i wykonywanie pozostałych funkcji
inicjujących.
• Pliki w katalogach "
rc*.d" są z reguły linkami do plików w katalogu
"
/etc/init.d", który stanowi podstawowe miejsce dla skryptów
inicjujących.
Plan wykładu
• init,
•
getty,
• login
• telnet,
• ssh,
• syslog
• cron i at
getty
• getty jest programem zarządzającym fizycznymi lub wirtualnymi
terminalami. Po wykryciu połączenia, monituje o podanie nazwy
użytkownika i uruchamia program login w celu uwierzytelnienia
użytkownika
• Pierwotnie, w systemach Unix, getty obsługiwał połączenia terminali
szeregowych podłączonych do hosta. „tty” w nazwie oznacza
teletype (dalekopis), ale obecnie oznacza dowolny terminal
tekstowy
• Komputery pracujące pod kontrolą systemów uniksowych, nawet
jeśli nie świadczą usługi zdalnego logowania, wciąż korzystają z
getty do logowania do virtualnej konsoli
• Zamiast programu login, getty może być skonfigurowany przez
administratora tak, by uruchamiał dowolny inny program, np. demon
ppp do zapewnienia wdzwanianego dostępu do internetu.
Plan wykładu
• init,
• getty,
•
login
• telnet,
• ssh,
• syslog
• cron i at
login
• Program jest odpowiedzialny za autoryzację użytkownika oraz
inicjalizację jego środowiska - ustawienie odpowiednich praw
dostępu do terminala, uruchomienie powłoki, etc.
• Częścią inicjalizacji środowiska jest wyświetlenie pliku /etc/
/etc/
/etc/
/etc/motd
motd
motd
motd
(można zablokować umieszczając plik .
.
.
.hushlogin
hushlogin
hushlogin
hushlogin w katalogu
domowym).
• Plik /etc/
/etc/
/etc/
/etc/nologin
nologin
nologin
nologin blokuje wszelkie próby zalogowania się (jest
zazwyczaj tworzony przez shutdown
shutdown
shutdown
shutdown). login
login
login
login odmawiając wyświetli
zawartość tegoż pliku.
• login
login
login
login zapisuje wszelkie niepoprawne próby zalogowania się
poprzez syslog
syslog
syslog
syslog. Loguje również wszelkie logowania dokonane
przez roota, umożliwiając w ten sposób wytropienie włamywaczy.
login
• Aktualnie zalogowani użytkownicy umieszczani są w
/
/
/
/var
var
var
var/run/
/run/
/run/
/run/utmp
utmp
utmp
utmp. Plik ten przy każdym restarcie systemu jest
usuwany. Polecenia takie jak: who
who
who
who, w
w
w
w opierają się na jego
zawartości.
• Wszelkie poprawne logowania się zapisywane są w /var/log/wtmp.
Co jakiś czas należy go usunąć –
nie istnieją żadne ograniczenia co do jego rozmiaru.
Program last
last
last
last służy do przeglądania pliku wtmp
wtmp
wtmp
wtmp.
• utmp
utmp
utmp
utmp i wtmp
wtmp
wtmp
wtmp są w formacie binarnym przez co przeglądanie ich
zawartości wymaga specjalnych programów.
Proces logowania
Logowanie się poprzez terminale:
interakcja pomiędzy: init, getty,
login i powłoką.
Ź
ródło: The Linux System Administrators' Guide
http://www.linuxpl.org/SAG/
Plan wykładu
• init,
• getty,
• login
•
telnet,
• ssh,
• syslog
• cron i at
telnet
•
Telnet jest najstarszą i najbardziej elementarną usługą
internetową. Został opisany w dokumentach RFC numer
RFC 854 i RFC 855
Usługa telnet umożliwia pracę na zdalnym komputerze.
Uruchomia się ją poprzez wpisanie polecenia:
telnet adres
Po nawiązaniu połączenia telnet wyświetli nam
informację o wersji systemu operacyjnego serwera, jego
nazwie oraz numerze wirtualnego terminala (np. ttyp0,
ttyp1, ttyp2, itd…) Następnie pojawi się monit o podanie
nazwy użytkownika oraz hasła (login i password).
telnet
• Usługa telnet często implementowana jest do
urządzeń aktywnych sieci (switche, routery) w
celu ułatwienia ich konfiguracji.
• Połączenie tego typu nie jest szyfrowane, a więc
możliwe do podsłuchu. Z tego powodu częściej
stosuje się jego następcę czyli
SSH.
Plan wykładu
• init,
• getty,
• login
• telnet,
•
ssh,
• syslog
• cron i at
SSH (secure shell)
• SSH to tylko następca protokołu telnet. W SSH
transfer wszelkich danych jest zaszyfrowany,
oraz możliwe jest rozpoznawanie użytkownika na
wiele sposobów.
• SSH to wspólna nazwa dla całej rodziny
protokołów, nie tylko terminalowych, lecz także
służących do przesyłania plików (SCP, SFTP),
zdalnej kontroli zasobów, tunelowania itp.
• Wspólną cechą wszystkich tych protokołów jest
identyczna z ssh technika szyfrowania danych i
rozpoznawania użytkownika.
Plan wykładu
• init,
• getty,
• login
• telnet,
• ssh,
•
syslog
• cron i at
Syslog - wprowadzenie
• Program Syslog jest jednym z najważniejszych
narzędzi systemowych.
• Umożliwia rejestrowanie zdarzeń zachodzących
w systemie przy pomocy zcentralizowanego
mechanizmu.
• Pozwala na rejestrowanie informacji
pochodzących z następujących źródeł:
– zgłoszeń przekazywanych przez bibliotekę systemową
– informacji pochodzących od jądra systemu.
Syslog - architektura
• Przyjmowaniem informacji zgłaszanych przez bibliotekę systemową
zajmuje się demon syslogd.
• Aplikacje, najczęściej różne demony, przekazują informacje poprzez
standardową funkcję syslog(3). Są one następnie przekazywane do
demona syslogd, który w zależności od ich typu i priorytetu, zapisuje
je w odpowiednich plikach, tak zwanych plikach rejestrowych (ang.
log files).
• Każdy wpis do pliku rejestrowego dokonywany przez syslogd zawiera
informacje dotyczące czasu jego powstania, maszyny i procesu.
• Raporty od jądra systemu Linux zbiera demon klogd. Po opatrzeniu
ich informacjami o typie i priorytecie zostają przesłane do syslogd.
Syslog - architektura
Ź
ródło: http://home.agh.edu.pl/~gjn/dydaktyka/papers/GJN-Cron/GJN-Syslog.html
Syslog – współpraca z innymi programami
• Na rysunku widać, że podstawowy mechanizm generowania raportów
zapewnia aplikacjom biblioteka systemowa, która udostępnia trzy
funkcje:
– openlog() - otwarcie komunikacji (stworzenie deskryptora),
– syslog()
- przesłanie wiadomości,
– closelog() - zamknięcie komunikacji.
• Z tych funkcji korzystają demony i aplikacje pracujące w systemie.
• Możliwe jest przesyłanie wiadomości do Syslog również z poziomu
skryptów, na przykład skryptów w sh.
• Wygodnie jest do tego wykorzystać program logger, który wysyła
informacje poprzez syslogd.
• W skryptach napisanych w języku Perl można użyć pakietu
Sys::Syslog, który jest interfejsem do opisanych powyżej wywołań
funkcji systemowych.
Konfiguracja syslogd
•
Cała konfiguracja Syslog znajduje się w pliku
/etc/syslog.conf.
•
Jest to plik tekstowy, zawierający reguły według
których Syslog sortuje informacje i zapisuje je do
różnych plików rejestrowych.
•
Każda linijka pliku jest osobną regułą, na którą
składają się dwa pola:
(1)
selektor (ang. selector)
(2)
działanie (ang. action).
Konfiguracja syslogd - selektor
Pole „selektor” ma dwie części rozdzielone kropką, które
określają rodzaj rejestrowanego komunikatu:
•
funkcja (facility) wskazuje na źródło komunikatu i może
mieć następujące wartości: auth, authpriv, cron,
daemon, kern, lpr, mail, mark, news, syslog, user, uucp,
local0-local7.
priorytet (priority) określa jego stopień ważności (od
najniższego): debug, info, notice, warning, err, crit,
alert, emerg.
Konfiguracja syslogd – selektor (2)
Dodatkowo w polu „selektor” można stosować następujące
znaki:
• przecinek (
,) - grupuje kilka typów „funkcji”, którym
odpowiada to samo „działanie”, w tym przypadku
„priorytet” jest ignorowany,
• średnik (
;) - pozwala na grupowanie kilku selektorów,
którym odpowiada to samo działanie.
• gwiazdka (
*) - może zastępować pola „funkcja” oraz
„priorytet” i oznacza „dla każdej wartości tego pola”.
Trzeba pamiętać, że
priorytet oznacza wszystkie
komunikaty o priorytecie nie niższym niż podany!
Np. priorytet err oznacza komunikaty o
priorytetach: err, crit, alert i emerg
Możliwe jest jednak podawanie innego rodzaju
zakresów priorytetów, wykorzystując znak
równości (=) i wykrzyknika (!).
Konfiguracja syslogd – działanie
Wskazuje co ma się dziać z komunikatami określonymi przez selektor:
• nazwa pliku - komunikaty są dopisywane do pliku, poprzedzenie
nazwy minusem powoduje wywołanie sync() po dopisaniu każdego
komunikatu,
• nazwa terminala - przesyła komunikaty na wybrane terminale,
• |nazwa potoku (ang. named pipe) - komunikaty są przesyłane do
kolejki FIFO (na przykład stworzonej przy pomocy mkfifo), skąd
mogą być odbierane przez inny program,
• @nazwa maszyny - Syslog będzie przesyłał komunikaty do innej
maszyny w sieci (na port 514/UDP),
• nazwa użytkownika - komunikaty będą wyświetlane na terminalu
użytkownika (jeżeli zalogowany). Można podać listę nazw
użytkowników rozdzielonych przecinkami, lub podać gwiazdkę (*).
syslog – organizacja plików
Pliki rejestrowe przechowuje się w katalogu /var/log.
Dla większości podstawowych źródeł komunikatów warto
przeznaczyć osobne pliki o nazwie odpowiadającej funkcji:
syslog.* -/var/log/syslog
cron.* /var/log/cron.log
daemon.* -/var/log/daemon.log
lpr.* /var/log/lpr.log
user.* /var/log/user.log
uucp.* /var/log/uucp.log
local.* /var/log/local.log
syslog – organizacja plików (2)
Informacje dotyczące bezpieczeństwa i autoryzacji warto umieścić w
osobnym podkatalogu.
auth,authpriv.* -/var/log/security/auth.log
Po każdym wpisie do pliku auth.log będzie wywoływana funkcja sync(),
aby upewnić się, że dane znalazły się natychmiast na dysku.
Jeżeli na maszynie pracuje serwer pocztowy komunikaty pochodzące od
niego można podzielić na kilka grup.
mail.info
/var/log/mail/mail.info
mail.warn
/var/log/mail/mail.warn
mail.err
-/var/log/mail/mail.err
syslog – organizacja plików (2)
Poniższy przykład pokazuje jak można dokładnie rozdzielić grupy
komunikatów w zależności od priorytetu.
kern.* /var/log/kernel/kern.all
kern.=debug
/var/log/kernel/kern.debug
kern.info;kern.!err
/var/log/kernel/kern.info-warning
kern.err
/var/log/kernel/kern.err-emerg
Wszystkie informacje od jądra są przekazywane do pliku kern.all.
Kolejne reguły wysyłają do określonych plików odpowiednio: te i
tylko te, które mają priorytet debug, komunikaty o priorytecie od
info do warning, oraz te o priorytecie od err do emerg.
Plan wykładu
• init,
• getty,
• login
• telnet,
• ssh,
• syslog
•
cron i at
Cron
• System Cron składa się z dwóch podstawowych
części: serwera i klienta.
• Serwer, czyli demon crond, pracuje cały czas w
systemie i na podstawie systemowych plików
konfiguracyjnych oraz konfiguracji użytkowników
cyklicznie uruchamia zadania.
• Program klient nosi nazwę crontab i służy do
edycji pliku konfiguracyjnego użytkownika.
crontab
• Polecenie korzysta z zewnętrznego edytora do edycji
pliku. Uruchamiany edytor można wybrać przy pomocy
zmiennej VISUAL lub EDITOR. Przeważnie domyślnym
edytorem jest VI.
• Podstawowe wywołania crontab to:
– crontab -e - edycja pliku,
– crontab -l - wyświetlenie pliku,
– crontab -r - usunięcie pliku,
– crontab -u user {-e|-l-r} – praca z plikiem zadanego użytkownika
- wywołanie tylko dla administratora,
– crontab plik - użycie gotowego pliku jako crontab.
crontab
• Jedna linia opisuje jedno zadanie i składa się z sześciu
pól, rozdzielonych białymi spacjami.
• Pola w każdej linii oznaczają kolejno: minutę, godzinę
dzień miesiąca, miesiąc, dzień tygodnia, ostatnie to
nazwa polecenia do wykonania.
• Gwiazdka w miejscu wartości oznacza: „dla każdej
wartości pola”.
• W danym polu można podawać kilka wartości
rozdzielonych przecinkami, natomiast użycie znaku „-”
pozwala na podanie zakresu wartości.
• Podanie po zakresie znaku „/” i kolejnej wartości
umożliwia podanie kroku w obrębie zakresu.
crontab - przykłady
0 * * * * polecenie
uruchomi polecenie co godzinę
0 8 * * * polecenie
spowoduje wykonanie polecenie codziennie o 8:00
0,20,40 8-16 * * * polecenie
co dwadzieścia minut, między 8 a 16
crontab - przykłady
10 * 5 * * polecenie
co godzinę każdego piątego dnia miesiąca
20-40 0,8,16 1-30/2 * * polecenie
od 0:20 do 0:40 co minutę, następnie od 8:20 do 8:40 co
minutę (podobnie dla 16), co dwa dni
30 6 10 * 1 polecenie
10. dnia miesiąca o 6:30 oraz w każdy poniedziałek.
(pola dzień miesiąca i tygodnia łączą się)
?
jaki efekt przyniesie podanie 5 gwiazdek w polu czasu?
* * * * * polecenie
Cron z perspektywy administratora
• Klient może być uruchamiany przez użytkownika systemu do edycji
jego własnego pliku.
• Administrator ma możliwość edycji pliku dowolnego użytkownika, w
tym użytkowników systemowych, podając w poleceniu opcję -u.
• Wszystkie pliki crontab znajdują się w jednym katalogu, przeważnie
/var/spool/cron/crontabs.
• Każdemu użytkownikowi, który założył własny crontab odpowiada
plik o takiej nazwie jak nazwa jego konta.
• Po uruchomieniu polecenia crontab, nie edytuje się plików z tego
katalogu, lecz ich kopie. Po sprawdzeniu składni pozbawiona błędów
składniowych nowa wersja crontaba jest kopiowana do właściwego
pliku w katalogu /var/spool/cron/crontabs.
/etc/crontab
• Oprócz plików użytkowników system Cron ma jeden
systemowy plik konfiguracyjny, /etc/crontab, który
może być edytowany bezpośrednio przez administratora.
• Typowy przykład takiego pliku jest pokazany poniżej:
# /etc/crontab: system-wide crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user
command
25 6 * * * root
run-parts --report /etc/cron.daily
47 6 * * 7 root
run-parts --report /etc/cron.weekly
52 6 1 * * root
run-parts --report /etc/cron.monthly
Architektura systemu Cron
Ź
ródło: http://home.agh.edu.pl/~gjn/dydaktyka/papers/GJN-Cron/GJN-Cron.html
At i batch
at i batch czytają ze standardowego wejścia lub
podanego pliku polecenia, które mają zostać
wykonane w terminie późniejszym przy użyciu /bin/sh.
•
at wykonuje polecenia o zadanym czasie.
•
atq pokazuje oczekujące zadania użytkownika; w
przypadku roota wyświetlane są zadania wszystkich
użytkowników.
•
atrm usuwa zadania o zadanych identyfikatorach.
•
batch wykonuje polecenia, gdy pozwala na to
poziom obciążenia systemu.
At - przykłady
at 4pm + 3 days
at 10am Jul 31
at 1am tomorrow
specyfikację czasu można znaleźć w:
/usr/doc/packages/at/timespec
Literatura
•
AEleen Frisch - Unix - administracja systemu (wyd III). Read Me, Warszawa
2003
•
http://home.agh.edu.pl/~gjn/wiki/_media/dydaktyka:unix:gjn-syslog.pdf
•
http://home.agh.edu.pl/~gjn/wiki/_media/dydaktyka:unix:gjn-cron.pdf
•
The Linux System Administrators' Guide - http://www.linuxpl.org/SAG/