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/