1) Charakterystyka systemu
2) Instalacja Linuksa
3) Pierwsze logowanie
4) Szukanie pomocy
5) Struktura katalogów
6) Podstawowe polecenia
7) Polecenie at
8) Polecenie crontab
9) Co to są konsole wirtualne
10) Co to jest powłoka ?
11) Zmienne powłoki
12) Historia poleceń
13) Aliasy
14) Dowiązania stałe i symboliczne
15) Przekierowania wejścia i wyjścia
16) Łączenie poleceń za pomocą potoków
17) Metaznaki
18) Polecenie echo i znaki cytowania
19) Zmiana powłoki logowania
20) Zarządzanie zadaniami
21) Pliki związane z powłoką
22) Skrypty powłoki - wprowadzenie
23) Skrypty powłoki - operacje
arytmetyczne
24) Skrypty powłoki - wyrażenie read
25) Skrypty powłoki -
instrukcje sterujące w skryptach
26) RPM
27) Instalowanie z pakietów RPM
28) Instalowanie pakietów
źródłowych RPM
29) Instalowanie programów źródłowych
30) Uruchamianie programów
31) Co to jest X Window
32) Konfiguracja systemu Xfree86
33) Uruchamianie sesji X-ów
34) Menadżery okien
35) Start systemu i związane z nim procesy
36) Zamykanie systemu
37) syslog i logi
systemowe
38) Urządzenia w systemie Linuks
39) Zmiana praw dostępu do plików i katalogów
40) Domyślne prawa dostępu przy tworzeniu
plików i katalogów
41) suid i sgid
- pożyteczne i niebezpieczne narzędzie
42) sticky bit
43) Konto - co to jest i do czego służy ?
44) Grupy
45) Dodawanie i usuwanie nowych kont
46) Tymczasowe blokowanie konta
47) Pliki i programy związane z kontami
użytkowników
48) Archiwizacja i kopie
bezpieczeństwa
49) Wybór nośnika dla kopii bezpieczeństwa
50) Techniki wykonywania kopii
bezpieczeństwa
51) Programy i skrypty do archiwizacji i tworzenia
kopii bezpieczeństwa
52) Czym jest system plików ?
53) Montowanie i odmontowywanie
systemu plików
54) Konfiguracja systemu plików
55) Narzędzia do sprawdzania i naprawy systemu
plików
56) Tworzenie nowego systemu plików
57) Inne narzędzia i pliki związane z
systemem plików
58) Procesy
59) Zdobywanie źródła nowego jądra
systemu
60) Konfiguracja jądra
61) Kompilacja i instalacja nowego
jądra
62) Moduły jądra
63) Konfiguracja sieci
64) Konfiguracja interfejsów sieciowych
65) Instalacja serwera WWW (APACHE)
66) Uruchamianie i zatrzymywanie
serwera APACHE
67) Konfiguracja serwera APACHE
68) Serwery wirtualne (APACHE)
69) Instalacja serwera FTP (PROFTPD)
70) Uruchamianie i zatrzymywanie
serwera PROFTPD
71) Konfiguracja serwera PROFTPD
72) Instalacja serwera poczty elektronicznej
(POSTFIX)
73) Uruchamianie i zatrzymywanie
serwera POSTFIX
74) Konfiguracja serwera POSTFIX
75) Konfiguracja superserwera inetd
76) Konfiguracja superserwera xinetd
77) Podstawy bezpieczeństwa systemu
78) SSH - bezpieczna powłoka
79) FIREWALL
80) IP - MASQUERADE (maskowanie pakietów)
1) Charakterystyka systemu
Minimalne wymagania sprzętowe potrzebne do uruchomienia Linuksa to:
- Intel 386
- Wolna przestrzeń dyskowa :
- 320 MB jeśli system ma działać w trybie tekstowym
- 450 MB z systemem X-Window
- 16 MB pamięci RAM
- karta grafiki VGA
- stacja dysków 3,5 cala
- napęd CD-ROM, SCSI lub IDE
Co daje nam Linuks :
- pełną wielozadaniowość - w tym samym
czasie wielu użytkowników może wykonywać kilka zadań na tym samym komputerze
- pamięć wirtualną - dzięki czemu
Linuks może używać części dysku twardego jako pamięci wirtualnej co zwiększa
wydajność systemu poprzez umieszczanie aktywnych procesów w pamięci RAM, a tych
rzadziej używanych lub nieaktywnych na dysku
- wbudowaną obsługę sieci - poprzez
modem lub kartę sieciową Linuks może porozumiewać się z innymi komputerami
wykorzystując protokoły TCP/IP, NFS, NIS lub inne
- współużytkowanie bibliotek - programy
w systemie Linuks nie przechowują własnych kopii standardowych bibliotek tylko wspólnie
współużytkują zestaw procedur, do których mogą odwoływać się w trakcie
działania. Dzięki temu otrzymujemy więcej przestrzeni dyskowej
- kompatybilność z normą IEEE.POSIX1 -
dzięki czemu Linuks obsługuje wiele standardów ustalonych dla systemów Unix
- X Window - jest systemem dającym
graficzny interfejs Linuksowi
- niezastrzeżony kod źródłowy -
dzięki czemu możemy aktywnie uczestniczyć w rozwoju systemu
- darmowe oprogramowanie - dostajemy wraz
z systemem na płytach CD, poza tym istnieje wiele stron internetowych, na których
możemy znaleźć ciekawe oprogramowanie.
2) Instalacja Linuksa
Najprostszym sposobem zainstalowania Mandrake jest instalacja z pierwszej płyty CD-ROM
zawierającej dystrybucję Linuksa i będącej płytą bootowalną.
Instalacja rozpocznie się po zrestartowaniu komputera - należy jednak pamiętać, aby
wcześniej ustawić BIOS tak, aby uruchamiał system z napędu CD-ROM.
Jeśli jednak nasz komputer nie posiada takiej możliwości należy przygotować
dyskietkę startową, z której uruchomimy program instalacyjny.
W Windows do tworzenia dyskietki startowej służy program rawwritewin.exe
, znajdujący się w katalogu /dosutils na pierwszej płycie z
Linuksem.
Jako Image File należy wpisać :
X:\images\cdrom.img
gdzie X jest literą oznaczającą nasz napęd CD-ROM.
W polu Floppy Drive zaznaczamy A: i mając w napędzie czystą dyskietkę naciskamy przycisk Write .
Z tak przygotowaną dyskietką postępujemy tak samo, jak w przypadku instalacji z
CD-ROMu, wybierając miejsce, z którego załadowany ma być system, jako dysk A: .
Dalej instalacja systemu polega na zaznaczaniu odpowiednich opcji w odpowiedzi na
zadawane przez komputer pytania.
Kolejne wybory będą dotyczyć następujących pytań :
wybór języka
należy tu wybrać język, którym chcemy posługiwać się podczas instalacji systemu, i
który będzie domyślnym językiem w naszym systemie
akceptacja licencji
jeśli chcemy kontynuować naszą instalacje należy po zapoznaniu się z treścią
licencji wybrać opcję : akceptuj
wybór rodzaju instalacji
tutaj decydujemy o rodzaju instalacji - do wyboru mamy instalacje zalecaną i
zaawansowaną.
Podczas instalacji zaawansowanej komputer zada nam więcej pytań, dzięki czemu będziemy
mieli większy wpływ na przebieg instalacji (wybieramy opcję : instalacja zaawansowana)
wykrywanie dysków
na tym etapie komputer spróbuje wykryć jakie napędy dysków zainstalowane są w naszym
systemie, może pojawić się pytanie o interfejs SCSI. Warto więc zorientować się
przed instalacją jakie urządzenia mamy zainstalowane w naszym komputerze
konfiguracja myszy
z listy wybieramy rodzaj myszki zainstalowanej w naszym komputerze
wybór klawiatury
wybieramy rodzaj i układ naszej klawiatury. Jeśli będziemy pracować w języku polskim
należy jako układ klawiatury wybrać : polski (programisty)
bezpieczeństwo
pytanie to dotyczy stopnia bezpieczeństwa naszego komputera, dostępne są tu cztery
odpowiedzi :
Standardowy - jest to domyślny
poziom zabezpieczeń, będący najlepszym wyborem dla maszyn wykorzystywanych w sieci jako
klient
Wysoki - poziom ten posiada bardziej
zaostrzone prawa dostępu od poprzedniego oraz system powiadamiania administratora o
zmianach w systemie mogących wskazywać na włamanie
Wyższy - na poziomie tym
większość usług sieciowych jest domyślnie wyłączona, a prawa dostępu do plików
są jeszcze bardziej restrykcyjne od tych z poziomu wysokiego
Paranoidalny - na poziomie tym
uruchamiane są wszystkie możliwe systemy bezpieczeństwa, a nasz system jest praktycznie
odcięty
system plików
na tym etapie możemy stworzyć nowe partycje i wskazać miejsce, w którym zostanie
zainstalowany system. Należy pamiętać, że wszystkie zmiany zostaną zapisane dopiero
po akceptacji przyciskiem : Gotowe. Do tej pory możemy swobodnie eksperymentować z
ustawieniami.
Do instalacji Linuksa potrzebne są przynajmniej dwie partycje :
1 - EXT3 - dla dystrybucji Linuksa
2 - SWAP - jako partycja wymiany
Wielkość partycji SWAP określa się jako podwójną ilość pamięci RAM zainstalowanej
w naszym komputerze. Jeśli jednak nasz komputer posiada więcej niż 64 MB, partycja SWAP
nie powinien przekraczać 128 MB.
Istniej również możliwość wydzielenia odrębnych partycji dla katalogów takich jak :
/home, /usr, /usr/local i innych .
O przeznaczeniu i zawartości tych katalogów można przeczytać w dalszej części tego
kursu
formatowanie
zaznaczamy tu, które partycje należy sformatować. Jeśli na dysku posiadamy partycje z
innym systemem lub partycje z cennymi danymi, nie należy ich zaznaczać.
Istniej tu również możliwość zaznaczenia opcji, dzięki której wybrane partycje
zostaną sprawdzone w poszukiwaniu błędów fizycznych
instalacja pakietów
etap ten polega na wybraniu odpowiednich pakietów, które chcemy zainstalować w naszym
systemie. Jeśli jednak nie czujesz się na siłach, aby samodzielnie dokonać wyboru
możesz skorzystać z gotowych propozycji :
- stacja robocza
- serwer
- środowisko graficzne
Należy pamiętać, że po instalacji istnieje zawsze możliwość doinstalowania
brakujących pakietów
hasło root
ustawiamy tutaj hasło dla użytkownika ROOT
użytkownicy
etap ten daje nam możliwość dodania do systemu użytkowników. Należy stworzyć co
najmniej jednego użytkownika
konfiguracja sieci
po wejściu na ten etap system spróbuje automatycznie wykryć urządzenia sieciowe
pracujące w naszym komputerze.
Następnym krokiem jest podjęcie decyzji w jaki sposób będziemy łączyć się z
komputerem :
- poprzez modem
- poprzez ISDN
- poprzez ADSL
- poprzez sieć lokalną
Następne pytania będą uzależnione od naszego wyboru i mogą dotyczyć portu dla
modemu, adresu IP, serwera DNS itp.
różne
na tym etapie instalacji możemy sprawdzić czy wybraliśmy odpowiedni sterownik dla
myszy, klawiatury i ewentualnie dokonać poprawek.
Możemy wybrać tu również strefę czasową, w której się znajdujemy i dodać
drukarkę do naszego systemu.
konfiguracja usług
z listy dostępnych usług możemy wybrać te, które będą uruchamiane podczas startu
systemu
program rozruchowy
jeśli na naszym komputerze chcemy mieć zainstalowany więcej niż jeden system, to do
wyboru który z nich ma zostać załadowany podczas startu komputera służy właśnie
program rozruchowy.
Do wyboru mamy trzy możliwości :
- Grub
- LILO z menu graficzny
- LILO z menu tekstowym
Ja proponuję wybrać LILO z menu graficznym.
Należy wybrać również urządzenie startowe, z którego ładowany jest nasz system.
Najczęściej jest to /dev/hda .
dysk startowy
tutaj system spyta nas czy stworzyć dyskietkę startową. Dyskietka taka może okazać
się niezbędną w razie jakichkolwiek problemów
konfiguracja X
tutaj dokonujemy konfiguracji X serwera (środowiska graficznego) poprzez wybór :
- monitora
- karty grafiki
- rozdzielczości ekranu, w której chcemy uruchamiać X-y
System zapyta nas również czy chcemy, aby X-y uruchamiały się automatycznie podczas
startu systemu.
Więcej o X-ach można dowiedzieć się w dalszej części tego kursu.
aktualizacja systemu
jeśli podczas procesu instalacji poprawnie skonfigurowaliśmy dostęp do internatu,
możemy teraz pobrać z sieci udostępnione poprawki systemu i uaktualnione pakiety
wyjście z instalacji
jest to już ostatni etap instalacji systemu Linuks. Mamy tu możliwość zapisania na
dyskietce listy wybranych pakietów i stworzenia specjalnej dyskietki przydatnej podczas
procesu automatycznej instalacji.
3) Pierwsze logowanie
Po załadowaniu systemu Mandrake w zależności od tego czy wybraliśmy automatyczne
uruchamianie X-ów, czy też nie, system przywita nas graficznym menadżerem logowania lub
konsolą tekstową.
W obu przypadkach system poprosi nas o podanie nazwy użytkownika (login) i jego hasła
(password).
Jeśli podczas instalacji stworzyliśmy dodatkowego użytkownika, dobrym rozwiązaniem
jest zalogowanie się właśnie jako ten użytkownik.
Należy pamiętać, że będąc zalogowanym w systemie, jako
ROOT posiadamy pełne uprawnienia, co oznacza, że możemy wykonać dowolną operację -
nawet przypadkowo skasować cały system.
Będąc zalogowanym, jako zwykły użytkownik w każdej chwili możemy stać się
super-użytkownikiem lub innym użytkownikiem mającym konto na naszym komputerze.
Do zmiany użytkownika służy komenda wydawana z linii poleceń konsoli :
su nazwa_użytkownika
po wydaniu komendy system poprosi nas o podanie hasła dla tego użytkownika.
Aby stać się z powrotem poprzednim użytkownikiem należy wydać polecenie :
exit
4) Szukanie pomocy
Nawet najlepszy administrator w końcu dochodzi do wniosku, że nie wie wszystkiego o
systemie i w pewnych sytuacjach potrzebuje pomocy.
Strony man stanowią pierwszą pomoc w takich sytuacjach. Zawierają one definicje i
objaśnienia poleceń systemu wraz z opisem opcjonalnych parametrów dla specjalnych
funkcji poleceń.
man polecenie
np.:
man ls
pokaże nam opis polecenia ls służącego do listowania
zawartości katalogów.
Innym również skutecznym sposobem szukania pomocy są internetowe grupy dyskusyjne
poświęcone Linuksowi :
pl.comp.os.linux
pl.comp.os.linux.sprzet
pl.comp.os.linux.programowanie
pl.comp.os.linux.sieci
5) Struktura katalogów
Struktura katalogów w dystrybucjach Linuksa jest zorganizowana tak, aby spełniała
wymagania standardu określającego postać Linuksowego systemu plików - FSSTND.
Katalogi zorganizowane są w następujący sposób :
/ -
główny katalog
|_ bin - pliki wykonywalne
|_ boot - pliki ładujące system
|_ dev - pliki urządzeń
|_ etc - pliki konfiguracyjne
|_ lib - biblioteki dzielone i moduły
jądra
|_ mnt - punkt montowania systemów plików
|_ opt - pakiety zainstalowane opcjonalnie
|_ sbin - pliki wykonywalne (dla administratorów)
|_ tmp - pliki tymczasowe
|_ usr - narzędzia i aplikacje
|_ var - zmieniające się dane
Rozszerzony opis zawartości poszczególnych katalogów :
/
Katalog nadrzędny, który rozpoczyna całe drzewo katalogów.
/bin
Katalog ten zawiera programy wykonywalne, dostępne dla zwykłego użytkownika.
/boot
Katalog ten zawiera tylko statyczne pliki dla boot loadera potrzebne podczas procesu
bootowania.
/dev
Tu znajdują się pliki reprezentujące poszczególne urządzenia.
/etc
Zawiera ogólnosystemowe pliki konfiguracyjne dla wielu programów.
Pliki konfiguracyjne dla całego systemu można również umieszczać w /usr/etc.
Niemniej jednak programy powinny zawsze szukać tych plików w /etc
, a ty możesz umieścić linki do nich w /usr/etc.
/etc/X11
Pliki konfiguracyjne dla systemu okienkowego X11.
/etc/skel
Tu znajdują się pliki potrzebne do stworzenia nowego konta użytkownika. Podczas
tworzenia nowego konta pliki z tego katalogu są kopiowane do katalogu domowego
użytkownika.
/home
Tu znajdują się katalogi domowe użytkowników.
/lib
Ten katalog powinien zawierać te biblioteki dynamiczne, które są konieczne do
wystartowania systemu i uruchamiania komend z głównego systemu plików.
/lib/modules
Ładowalne moduły jądra, wymagane do startu systemu i pracy po jego padzie (sterowniki
sieciowe, itd. ).
/mnt
Jest punktem montowania systemów plików montowanych tymczasowo.
/opt
Ten katalog powinien zawierać dodatkowe pakiety, które zawierają statyczne pliki.
/proc
System plików /proc jest całkowicie wirtualny - nie istnieje
na dysku. Jest tworzony i utrzymywany przez jądro w pamięci. Używany jest w celu
dostarczenia informacji o systemie (o działających procesach - stąd nazwa).
/root
Tan katalog jest katalogiem domowym użytkownika root.
/sbin
Tak jak /bin, katalog ten zawiera programy potrzebne do
wystartowania i administracji systemu. Z programów tych mogą korzystać tylko
administratorzy systemu.
/tmp
Ten katalog zawiera pliki tymczasowe, które może usunąć w dowolnym momencie.
/usr
W katalogu tym znajdują się programy zainstalowane podczas instalacji systemu lub te,
które instalowaliśmy ręcznie. Katalog ten można zamontować na oddzielnej partycji,
dzięki czemu po aktualizacji lub zmianie systemu nie musimy ponownie instalować
dodatkowych programów.
/usr/X11R6
Tu znajduje się system X-Window.
/usr/bin
Jest to główny katalog programów wykonywalnych, używanych przez zwykłych
użytkowników, które nie są potrzebne przy starcie lub naprawie systemu, i które nie
są instalowane lokalnie.
/usr/bin/X11
Tradycyjne miejsce na pliki wykonywalne X11.
Często jest to link symboliczny do /usr/X11R6/bin.
/usr/etc
Można tu umieszczać pliki konfiguracyjne dzielone między kilkoma maszynami. Programy
jednak powinny zawsze odwoływać się do tych plików używając katalogu
/etc.
Linki od plików w /etc powinny wskazywać na odpowiednie pliki
w /usr/etc.
/usr/include
Zawiera pliki nagłówkowe dla kompilatora C.
/usr/include/linux
Zawiera informacje, które mogą zmieniać się z jednego wydania systemu na drugie.
/usr/lib
Znajdują się tu biblioteki obiektowe, w tym dynamiczne, plus parę plików
wykonywalnych.
/usr/local
Katalog ten jest przeznaczony dla programów instalowanych lokalnie.
/usr/local/bin
Tu są binaria programów lokalnych.
/usr/local/doc
Lokalna dokumentacja.
/usr/local/etc
Pliki konfiguracyjne skojarzone z lokalnie zainstalowanymi programami.
/usr/local/lib
Pliki skojarzone z lokalnie zainstalowanymi programami.
/usr/local/include
Pliki nagłówkowe lokalnego kompilatora C.
/usr/local/info
Strony info skojarzone z lokalnie zainstalowanymi programami.
/usr/local/man
Strony podręcznika ekranowego skojarzone z lokalnie zainstalowanymi programami.
/usr/local/sbin
Lokalnie instalowane programy do administracji systemem.
/usr/local/share
Dane lokalnych aplikacji, które mogą być dzielone między różnymi architekturami tego
samego systemu operacyjnego.
/usr/local/src
Kody źródłowe programów instalowanych lokalnie.
/usr/sbin
Ten katalog zawiera binaria programów do administracji systemem, które nie są
niezbędne do startu lub naprawy systemu.
/usr/share
Ten katalog zawiera podkatalogi ze specyficznymi danymi aplikacji, które mogą być
dzielone między różnymi architekturami tego samego systemu operacyjnego.
/usr/share/dict
Zawiera pliki z listami słów dla poprawiaczy pisowni.
/usr/share/doc
Dokumentacja zainstalowanych programów.
/usr/share/info
Katalog ze stronami info.
/usr/share/locale
Tutaj znajdują się informacje związane z ustawieniami regionalnymi.
/usr/share/man
Trafiają tu strony podręcznika ekranowego do odpowiednich katalogów według sekcji
podręcznika.
/usr/share/man/locale/man[1-9]
Te katalogi zawierają strony podręcznika w formacie źródłowym.
/usr/share/zoneinfo
Pliki informacji o strefach czasowych.
/usr/src
Pliki źródłowe różnych części systemu, dołączane do niektórych pakietów.
/usr/src/linux
Zawiera źródła jądra samego systemu operacyjnego.
/var
Ten katalog zawiera pliki, które mogą zmieniać wielkość, takie jak logi i spoole.
/var/cache
Zbuforowane dane programów.
/var/catman/cat[1-9] lub /var/cache/man/cat[1-9]
Te katalogi przechowują przeformatowane strony podręcznika ekranowego zgodnie z sekcją
tego podręcznika.
/var/lib
Zmieniające się podczas pracy systemu pliki programów.
/var/local
Zmienne dane dla programów zainstalowanych w /usr/local.
/var/lock
Umieszczane są tu przez programy pliki blokady w celu wskazania na swoje działanie. Inne
programy sprawdzają te pliki i odpowiednio działają (np.: wstrzymują się z
odwołaniem do danego urządzenia).
Konwencja nazw plików lock dla urządzeń to LCK.<urządzenie>
gdzie <urządzenie>, to nazwa urządzenia w systemie
plików.
/var/log
Tu znajdują się logi systemowe i innych programów.
/var/opt
Zmienne dane dla /opt.
/var/mail
Skrzynki pocztowe użytkowników. Zastępuje /var/spool/mail.
/var/run
Pliki zawierające bieżące informacje o systemie, np.: pliki zawierające identyfikatory
procesów (PIDy) i informację o zalogowanych użytkownikach (utmp). Pliki w tym katalogu
są zwykle czyszczone przy starcie systemu.
/var/spool
Kolejkowane pliki różnych programów.
/var/spool/at
Spoolowane zadania dla at
/var/spool/cron
Spoolowane zadania dla crona.
/var/spool/lpd
Spoolowane pliki do drukowania.
/var/spool/mail
Zastąpione przez /var/mail.
/var/spool/mqueue
Zakolejkowana poczta wychodząca.
/var/spool/news
Katalog newsów.
/var/spool/rwho
Spoolowane pliki dla rwho.
/var/spool/smail
Spoolowane pliki dla programu smail.
/var/tmp
Tak jak /tmp, ten katalog zawiera tymczasowe pliki przechowywane na czas nieokreślony.
/var/yp
Pliki bazy danych systemu NIS.
6) Podstawowe polecenia
Dokładny opis każdego poleceń można zobaczyć poprzez wydanie komendy :
man polecenie
Polecenia można podzielić na następujące grupy :
- polecenia związane z plikami i katalogami
- polecenia związane z systemem plików
- polecenia związane z zarządzaniem użytkownikami
- polecenia związane z zarządzaniem modułami jądra
- polecenia związane z procesami
- polecenia związane z siecią
- polecenia związane z wyszukiwaniem
- polecenia związane z szukaniem pomocy
- inne polecenia
Polecenia związane z plikami i katalogami :
cd ścieżka_dostępu
Opis : zmiana bieżącego katalogu
touch [-acm] [MMDDhhmm] lista_plików
Opis : modyfikacja daty i czasu utworzonego pliku, tworzenie nowego pliku
Opcje:
-a - zmienia tylko czas ostatniego dostępu do pliku
-c - jeśli plik nie istnieje nie zostanie utworzony
-m - zmienia czas ostatniej modyfikacji pliku
MMDDhhmm - czas w postaci : miesiąc dzień godzina minuta (np.:
10122122)
rm [-fr] nazwa_pliku
Opis : kasowanie pliku
Opcje :
-f - pomija konieczność potwierdzenia pytania o usuwanie plików
-r - usuwa zawartość katalogu wraz z podkatalogami
cp [-flpRs] plik plik_docelowy_lub_katalog
Opis : kopiowanie plików i katalogów
Opcje :
-f - powoduje, że program nie uprzedza o nadpisaniu pliku
docelowego o tej samej nazwie
-l - tworzy dowiązanie zamiast kopiować plik
-p - opcja ta powoduje, że kopiowane pliki zachowują w miarę
możliwości swoje atrybuty
-R - kopiuje zawartość katalogów i podkatalogów
-s - tworzy dowiązanie symboliczne zamiast kopiować plik
mv [ -fu] plik plik_docelowy_lub_katalog
Opis : zmiana nazwy lub przenoszenie pliku i katalogu
Opcje :
-f - powoduje, że program nie uprzedza o nadpisaniu pliku
docelowego o tej samej nazwie
-u - przenosi pliki tylko wówczas, gdy istniejące pliki docelowe
są starsze
chmod [-R][ugoa][+-=][rwx] plik_lub_katalog
Opis : zmiana atrybutów pliku
Opcje :
-R - zmiana praw dla plików i katalogów wraz z podkatalogami
-u (user) - właściciel pliku lub katalogu
-g (group) - grupa, do której należy dany plik lub katalog
-o (other) - wszyscy pozostali
+ - dodaje prawa
- - odbiera prawa
= - sprawia, że plik lub katalog będzie miał prawa tylko takie,
jakie zostaną podane po tej opcji
-r - prawo czytania danych
-w - prawo zapisu (edycji)
-x - prawo uruchamiania
chown [-Rf] właścicel[:grupa] plik_lub_katalog
Opis : zmiana właściciela pliku lub katalogu
Opcje :
-R - zmiana właściciela i/lub grupy plików i katalogów wraz z
podkatalogami
-f - zmienia właściciela i/lub grupę tylko tym plikom, które
należą do podanego właścicela i/lub grupy
mkdir [-mp] katalog
Opis : tworzenie katalogów
Opcje :
-m=prawa - nadaje tworzonym katalogom podane prawa
-p - nie ostrzega, jeśli katalog o podanej nazwie już istnieje
rmdir [-p] katalog
Opis : kasowanie katalogów
Opcje :
-p - usuwa katalog wraz z katalogami nadrzędnymi
ls [-al] plik_lub_katalog
Opis : wyświetla informacje o plikach i katalogach
Opcje :
-a - wyświetla wszystkie pliki w katalogu, wraz z plikami
ukrytymi
-l - listuje w długim formacie pełną informację o plikach i
katalogach
ln [-dfs] plik_lub-katalog link
Opis : tworzenie dowiązań
Opcje :
-d - tworzy dowiązanie twarde do katalogów
-f - nie informuje o nadpisywaniu istniejącego pliku
-s - tworzy dowiązanie symboliczne
less nazwa_pliku
Opis : podgląd plików tekstowych
cat nazwa_pliku
Opis : przesyła plik na standardowe wejście
Polecenia związane z systemem plików :
df [-aht] urządzenie
Opis : sprawdzenie ilości wolnego miejsca na dysku
Opcje :
-a - wyświetla informacje o każdym systemie plików
-h - wyświetlane informacje są podawane w łatwych do odczytania
jednostkach
-t=typ - wyświetla informacje tylko o systemie danego typu
mkfs [-t] [-c] urządzenie_blokowe
Opis : tworzenie systemu plików
Opcje :
-t - określa typ tworzonego systemu plików, domyślnie ext2
-c - sprawdza uszkodzone bloki urządzenia przed utworzeniem
systemu plików
mount [-t] [-o] urządzenie_lub_katalog
Opis : montowanie systemu plików
Opcje :
-t - typ montowanego systemu plików
-o - po tej opcji następuje podanie oddzielonych przecinkami
wartości :
remount - przemontowanie zamontowanego już systemu
plików
ro - montuje system
plików w tryb tylko do odczytu
rw - montuje system
plików w tryb tylko do odczytu i zapisu
nouser - zabrania zwykłemu
użytkownikowi montowania systemu plików
umount urządzenie_lub_katalog
Opis : odmontowanie systemu plików
e2fsck [-pcf] [-b] urządzenie
Opis : testowanie systemu plików
Opcje :
-p - napraw automatycznie system plików bez żadnych pytań
-c - uruchom program badblocks w celu znalezienia uszkodzonych
bloków
-f - wymuś sprawdzanie, nawet jeśli system plików wydaje się
być czysty
-b superblok - użyj podanego superbloku
fdisk [-lv] [-s] urządzenie
Opis : obsługa partycji
Opcje :
-l - drukuje tablice partycji
-v - drukuje numer wersji fdiska
-s partycja - jest partycją wybranego dysku
urządzenie - jest plikiem z katalogu /dev wskazującym na nasz
dyski (np.: hda)
fdformat [-n] urządzenie
Opis : niskopoziomowy format dyskietki
Opcje :
-n - wyłączenie weryfikacji sformatowanej dyskietki
Polecenia związane z zarządzaniem użytkownikami :
useradd [-d] [-g] [-G] [-s] [-u] nazwa_użytkownika
Opis : dodawanie użytkowników
Opcje :
-d katalog_domowy - wartość ta określa katalog domowy
użytkownika, domyślnie zmienna ta przyjmuje wartość taką samą jak nazwa użytkownika
-g gupa_początkowa - jest nazwą grupy początkowej użytkownika.
Grupa ta musi już istnieć. W przypadku nie podania tej zmiennej system sam utworzy
grupę dla użytkownika o nazwie zgodnej z nazwą użytkownika
-G inne_grupy - lista dodatkowych grup, do których zostanie
przypisany użytkownik
-s powłoka - nazwa powłoki użytkownika
-u uid - numeryczna wartość identyfikatora użytkownika.
Wartość ta musi być niepowtarzalna i większa od 99. W przypadku nie podania tej
zmiennej system sam przydzieli użytkownikowi pierwszy wolny numer.
userdel [-r] nazwa_użytkownika
Opis : usuwanie użytkowników
Opcje :
-r - zostaną usunięte pliki w katalogu domowym użytkownika, sam
katalog domowy i pliki buforowania poczty
groupadd [-g] nazwa_grupy
Opis : dodawanie grup
Opcje :
-g gid - numeryczna wartość identyfikatora grupy. Wartość ta
musi być niepowtarzalna. Wartości od 0-99 są zarezerwowane dla kont systemowych i nie
powinny być używane. W przypadku nie podania gid system sam przydzieli grupie pierwszą
wolną wartość.
groupdel nazwa_grupy
Opis : usuwanie istniejących grup
usermod [-d] [-g] [-G] [-s] [-u] [-l] nazwa_użytkownika
Opis : modyfikowanie danych użytkowników
Opcje :
-l login - nowa nazwa użytkownika
pozostałe opcje mają identyczne znaczenie jak opcje z polecenia useradd
groupmod [-g][-n] grupa
Opis : modyfikowanie danych grup
Opcje :
-g gid - numeryczna wartość identyfikatora grupy
-n grupa - nowa nazwa grupy
passwd [-l][-u][-d][-S] nazwa_użytkownika
Opis : zmiana hasła użytkownika
Opcje :
-l - zablokowanie konta
-u - ponowne udostępnienie konta
-S - wyświetlenie informacji o stanie konta
su nazwa_użytkownika
Opis : chwilowa zmiana aktywnego użytkownika
Polecenia związane z zarządzaniem modułami jądra :
insmod [-fp] [-o] plik_modułu
Opis : instalowanie modułu jądra
Opcje :
-f - usiłuje załadować moduł nawet jeśli wersja uruchomionego
jądra i jądra dla którego moduł został skompilowany nie zgadza się
-p - sprawdza czy moduł może być załadowany bez kłopotów
-o nazwa_modułu - podanie dokładnej nazwy modułu
rmmod [-a] moduł
Opis : usuwanie modułu
Opcje :
-a - usuń wszystkie nieużywane moduły
lsmod
Opis : listowanie aktywnych modułów
depmod moduł
Opis : sprawdzanie zależności między modułami
modprobe moduł
Opis : instalowanie modułu z potrzebnymi opcjami i modułami
modinfo [-adnp] plik_modułu
Opis : informacje o modułach
Opcje :
-a - wypisuje autora modułu
-d - wypisuje opis modułu
-n - wypisuje nazwę pliku modułu
-p - wypisuje parametry wspierane przez moduł
Polecenia związane z procesami :
top [-p]
Opis : listuje procesy o największym obciążeniu procesora i wyświetla ich statystyki w
czasie
rzeczywistym
Opcje :
-p - monitoruje jedynie proces o danym id procesu
pidof nazwa_programu
Opis : wyświetlenie numeru procesu wybranego programu
ps [-auxr][txx]
Opis : listuje aktywne procesy
Opcje :
-a - pokaż procesy innych użytkowników
-u - format użytkownika - podaje nazwę użytkownika i czas
startu
-x - pokaż procesy bez kontrolującego terminala
-r - pokaż tylko pracujące procesy
-txx - pokaż tylko procesy z kontrolującym tty XX
kill [-s] numer_procesu
Opis : zakańcza działanie procesu
Opcje :
-s - rodzaj wysłanego sygnału
jobs
Opis : listuje aktywne programy
fg numer_zadania
Opis : ustawienie procesu na front
bg numer_zadania
Opis : przeniesienie procesu w tło
Polecenia związane z siecią :
ifconfig <if> <IP> <nm> <bc>
Opis : konfigurowanie interfejsu sieciowego
Opcje :
if - rodzaj interfejsu (np.: Eth0)
IP - adres IP interfejsu
nm - maska sieci
bc - adres rozgłoszeniowy
ifconfig interfejs up
Opis : uruchamianie interfejsu sieciowego
ifconfig interfejs down
Opis : zatrzymywanie interfejsu sieciowego
route add|del [-net|-host] gw cel netmask dev
Opis : kontrola trasowania
Opcje :
add - dodanie drogi do tablicy trasowania
del - usunięcie drogi z tablicy trasowania
-net - oznacza, że celem jest sieć
-host - oznacza, że celem jest stacja
gw brama - adres bramy sieciowej
cel - docelowa sieć lub stacja
netmask netmaska - maska sieci
dev interfejs - wymusza związanie trasy z podanym interfejsem
netstat [-riM]
Opis : wyświetla połączenia sieciowe i statystyki połączeń
Opcje :
-r -wyświetl tablice routingu
-i - wyświetla tablice wszystkich działających interfejsów
sieciowych
-M - wyświetl listę wszystkich maskaradowanych sesji
Polecenia związane z wyszukiwaniem :
grep [-civ] wzorzec [plik]
Opis : wyszukiwanie ciągów znaków
Opcje :
-c - podaje liczbę wierszy w których znaleziono pasujący
wzorzec
-i - pomija różnicę w wielkości liter
-v - wyświetla wiersze, w których nie ma podanego wzorca
plik - nazwa pliku, w którym nastepuje przeszukanie
find
Opis : szukanie plików
whereis [-bms] nazwa pliku
Opis : lokalizuje źródła, binaria i dokumentację man
Opcje :
-b - szukaj tylko binariów
-m - szukaj tylko sekcji dokumentacji man
-s - szukaj tylko źródeł
Polecenia związane z szukaniem pomocy :
man polecenie
Opis : manual systemowy
info
Opis : podręcznik GNU
apropos klucz
Opis : przeszukuje bazy z dokumentacją pod kątem słów kluczowych
Inne polecenia :
date [-ds]
Opis : podaje lub ustawia datę systemową i czas
Opcje :
-d DATA - podaje datę i czas, określone podanym wyrażeniem
-s DATA - ustawia podany czas i datę
logout , exit
Opis : zakończenie sesji
clear
Opis : czyszczenie ekranu terminala
shutdown [-akh] czas ostrzeżenie
Opis : restart lub wyłączenie systemu
Opcje :
-a - użyj /etc/shutdown.allow w celu
zabronienia wykonywania tego polecenia
-k - wyślij komunikat o zamknięciu ale nie wykonuj prawdziwego
zamknięcia systemu
-h - zatrzymaj po wyłączeniu systemu
czas - czas po którym system zostanie zamknięty.
Forma czasu :
HH(godzina):MM(minuty) lub +m gdzie m jest liczbą minut do odczekania
halt
Opis : zamknięcie systemu
reboot
Opis : przeładowanie systemu
7) Polecenie at
Składnia polecenia at jest następująca :
at -f {plik z zadaniem} czas_uruchomienia_zadania
lub
at czas_uruchomienia_zadania
Po naciśnięciu klawisza ENTER wpisujemy zadanie do wykonania.
Określanie czasu dla polecenia at.
Czas można określić na wiele sposobów. Domyślnie przyjmowany jest czas 24-godzinny.
Podawanie minut jest opcjonalne. Jeśli dodany zostanie przyrostek am lub pm, czas będzie
traktowany jako czas 12-godzinny.
Przy podawaniu czasu dozwolone jest stosowanie słów mających specjalne znaczenie:
midnight (północ), noon (południe), today
(dziś), tomorrow (jutro) oraz now (teraz).
Po słowie now należy podać czas, po jakim polecenie ma zostać
wykonane.
Oprócz wartości oznaczających godziny można również podawać, w którym miesiącu
zadanie ma się rozpocząć (za pomocą liczb od 1 do 12 lub pierwszych trzech liter
angielskiej nazwy miesiąca). Rok oznaczany jest liczbą czterocyfrową. Dni tygodnia
podaje się za pomocą pierwszych trzech liter nazwy angielskiej.
Odstępy czasu pozwalają na podanie pory rozpoczęcia zadania w odniesieniu do czasu
bieżącego. Do ich określania służy znak +, po którym następuje
liczba i jeden z wyrazów: minute, hour, day,
week lub year (można również używać liczby mnogiej,
na przykład weeks). Słowo next (następny) ma takie
samo znaczenie, jak +1.
Oto kilka przykładów :
at 14:12 January 9
at 2:12am Jan 9
at now + 5 minutes
8) Polecenie crontab
Składnia polecenia crontab :
crontab -l | -r | -e
-e otwiera plik z zadaniami
-l listuje zadania
-r usuwa zadania
Określanie czasu dla polecenia crontab :
Składnia pliku z zadaniami jest następująca :
min godz dzień_miesiąca miesiąc dzień_tygodnia zadanie
Dane podawane są w pięciu kolumnach rozdzielonych przecinkami; myślnik oznacza
zakres, natomiast gwiazdka - wszystkie dostępne wartości.
Oto lista poszczególnych pól i dostępnych w nich wartości :
Minuty 0-59
Godziny 0-23
Dni miesiąca 1-31
Miesiące 1-12
Dni tygodnia 0-6, 0 = niedziela
Oto kilka przykładów :
co pięć minut
*/5 * * * * /zadania/zad1
co godzinę -1 minutę po pełnej godzinie
01 * * * * /zadania/zad1
codziennie 5 minut po północy
05 0 * * * /zadania/zad1
co tydzień w niedziele 10 minut po północy
10 0 * * 0 /zadania/zad1
9) Co to są konsole wirtualne
Linuks domyślnie posiada siedem wirtualnych konsol, do których mamy dostęp za
pomocą kombinacji klawiszy : ALT+F1-F7. Podczas uruchamiania
systemu X Window ręcznie lub automatycznie, zablokowana zostaje konsola, z której
zostały uruchomione X-y, a nasz menadżer wyświetlania dostępny jest na konsoli 7.
Przejście z poziomu X-ów na pozostałe konsole odbywa się za pomocą następującej
kombinacji klawiszy : CTR+ALT+F1-F6
Na każdej z wirtualnych konsol możemy zalogować się, jako inny użytkownik. Takie
rozwiązanie umożliwia nam uruchomienie na każdej z konsol jakiegoś zadania.
Należy jednak pamiętać, że Linuks to prawdziwy system wielozadaniowy, który
umożliwia przeniesienie dowolnego procesu w tło, zwalniając terminal i ponowne
przywrócenie go w dowolnym momencie.
10) Co to jest powłoka ?
Powłoka (shell) jest interpretatorem poleceń przeczytanych z klawiatury lub pliku -
jest czymś w rodzaju command.com w systemach windowsowych.
Każde polecenie wpisane z klawiatury zostaje zamienione przez powłokę na język
zrozumiały dla jądra systemu, które może odpowiednio zareagować na to polecenie.
Linuks posiada kilka powłok : bash, sh, csh, tcsh, ale domyślnym shell'em dla
Mandrake jest bash, dlatego pozostałe opisy będą dotyczyć tej właśnie powłoki.
11) Zmienne powłoki
Zmienne można podzielić na trzy grupy :
- zmienne lokalne
- zmienne globalne
- zmienne specjalne
- zmienne programowe
Zmienne lokalne określają konfigurację
powłoki i są widoczne tylko dla shell'a dla którego zostały zdefiniowane.
Aby zobaczyć ustawienia zmiennych lokalnych możemy wydać polecenie :
set
Ważniejsze zmienne to :
BASH=/bin/bash - nazwa naszej powłoki
BASH_VERSION=1.14.7(1) - wersja naszej powłoki
COLUMNS=80 - liczba kolumn znaków na naszym ekranie
LINES=25 - liczba linii na ekranie
HOME=/home/student - nasz katalog domowy
LOGNAME=student - nasz login
OSTYPE=Linux - typ systemu
PATH=/usr/bin:/sbin:/bin:/usr/sbin - domyślna ścieżka dostępu
PS1=[\u@\h \W]\$ - ustawienie znaku zachęty
PWD=/home/student - nasz aktualny katalog roboczy
SHELL=/bin/bash - nazwa naszej powłoki
USERNAME=student - nazwa użytkownika, który jest aktualnie
zalogowany w systemie
EDITOR=vim - nazwa domyślnego edytora tekstu
HISTFILE=/home/student/.bash_history - plik zawierający historię
poleceń
MAIL=/var/spool/mail/$USER - określa plik, do którego dopisywane
są listy przychodzące na nasze konto
Jeśli chcemy zobaczyć ustawienie pojedynczej zmiennej wydajemy polecenie :
echo $HOME
Do zdefiniowania nowej zmiennej lokalnej służy polecenie export z parametrem -n
powodującym usunięcie atrybutu eksportu dla danej zmiennej :
export -n nazwa_zmiennej=nowa_wartość
np.:
export EDITOR=mcedit
Zmienne globalne są to zmienne widoczne
w każdym podshellu.
Aby ustalić nową zmienną lub przypisać inną wartość starej należy użyć polecenia
:
export EDITOR=mcedit
Zmienne specjalne są definiowane przez
system i w przeciwieństwie do innych zmiennych nie można zmieniać ich wartości.
Najczęściej zmienne te wykorzystywane w skryptach do sterowania programem.
Przykładowe zmienne specjalne to :
$# - liczba parametrów przekazanych do programu
#? - kod zakończenia polecenia lub programu wywołanego z
programu powłoki
$0 - pod zmienna tą kryje się nazwa uruchomionego programu
$1,$2 - kolejne parametry programu
Zmienne programowe to zmienne definiowane
przez użytkownika w skryptach powłoki.
Definicja zmiennej programowej wygląda następująco :
nazwa_zmiennej=wartość
np.:
x=123
imie="Darek"
Pod zmienna programową można podstawić również wynik dowolnego polecenia , np.:
sciezka=`pwd`
Do zmiennej odwołujemy się poprzez podanie jej nazwy poprzedzonej znakiem $ , np.:
echo $imie
12) Historia poleceń
Powłoka bash posiada zdolność przywoływania wcześniej wydawanych poleceń przez
użycie klawiszy kursora. Bash rejestruje je w pliku .bash_history
, który znajduje się w katalogu domowym użytkownika.
Historię poleceń określają dwa parametry :
HISTFILE - wskazuje na plik zawierający wywołane wcześniej
polecenia
HISTSIZE - określa ile ostatnio wydanych poleceń ma być
przechowywanych w pliku historii
Aby obejrzeć listę ostatnio wydawanych poleceń bez otwierania powyższego pliku
należy skorzystać z polecenia history z parametrem określającym liczbę wierszy,
które mają być wyświetlone :
history 10
pokaże 10 ostatnio użytych poleceń.
Aby powtórzyć wcześniej wydane polecenie można użyć następującej komendy :
!3
gdzie 3 jest trzecią komendą z listy wyświetlonej poleceniem history .
13) Aliasy
Bash daje nam ciekawy mechanizm aliasów umożliwiających zastępowanie złożonych
poleceń krótszymi, łatwiejszymi do zapamiętania nazwami.
Aliasy tworzymy korzystając z polecenia alias , którego
składnia jest następująca :
alias 'nasza_definicja'='polecenie'
np.:
alias 'p'='ps -aux'
Teraz poprzez wydanie polecenia p
otrzymamy listę wszystkich procesów.
Zdefiniowane aliasy możemy zlikwidować poleceniem unalias
:
unalias p
14) Dowiązania stałe i symboliczne
Mechanizm dowiązań (linków) ułatwia dostęp do plików ukrytych głęboko w
strukturze katalogów lub umożliwia zgromadzenie potrzebnych plików w jednym katalogu.
Linki dzielimy na stałe i symboliczne.
Dowiązania stałe charakteryzują się
tym, że posiadają ten sam i-węzeł co wskazywany plik. W praktyce oznacza to, że
dowiązanie takie zawiera pełną informację o pliku i w razie skasowania oryginalnego
pliku dowiązanie nadal będzie zawierać informacje o tym pliku (jego zawartość).
Dowiązanie stałe tworzymy poleceniem :
ln plik_lub_katalog link
Dowiązania symboliczne służą jedynie
do wskazywania na jakiś plik. Umożliwiają one prace na danym pliku poprzez jego
dowiązanie. W przypadku skasowania pliku, do którego prowadzi link symboliczny
niemożliwe staje się korzystanie z tego dowiązania (nie zawiera on wówczas żadnych
informacji).
Dowiązania symboliczne tworzymy poleceniem :
ln -s plik_lub_katalog link
15) Przekierowania wejścia i wyjścia
Przekierowania zazwyczaj wykorzystywane są do odczytania danych z jakiegoś
urządzenia lub pliku albo do wysłania danych na urządzenie lub plik.
Do przekierowań danych służą specjalne znaki :
< dane na wejście
> dane z wyjścia
Najprostszym przykładem przekierowania może być wyświetlenie zawartości jakiegoś
pliku poleceniem :
cat < plik.txt
Aby utworzyć nowy plik i wpisać do niego dowolny tekst możemy użyć przekierowania
danych z wyjścia :
cat > plik.txt
Polecenie to utworzy nam plik : plik.txt i umieści w nim tekst
wpisany z klawiatury.
Jeśli będziemy chcieli ponownie dodać jakiś tekst do tego pliku należy użyć
polecenia :
cat >> plik.txt
Spowoduje to dodanie następnych wierszy z informacją do pliku.
Innym przykładem przekierowań może być zapisanie do pliku zawartości jakiegoś
katalogu :
ls -al > plik.txt
16) Łączenie poleceń za pomocą potoków
Połączenie poleceń za pomocą potoków oznacza wysłanie wyniku z jednego polecenia
na wejście drugiego polecenia. Potoki są bardzo często wykorzystywane podczas pisania
wszelakich skryptów.
Polecenie :
ls -al | less
łączy ze sobą dwa polecenia :
ls -al - listuje zawartość katalogu
less - umożliwia przeglądanie dużych plików za pomocą
klawiszy kursora.
Wynikiem tego połączenia jest możliwość obejrzenia zawartości dużego katalogu za
pomocą klawiszy kursora.
17) Metaznaki
Meta-znaki to pewien zbiór znaków pełniący specjalne funkcje w powłoce Linuksa.
Znaczenia meta-znaków :
* - oznacza dowolną sekwencję, dowolną ilość znaków
? - oznacza dowolny pojedynczy znak
[qwA1] - oznacza dowolny pojedynczy znak, wymieniony w nawiasach
[a-z] - oznacza dowolną małą literę
[A-G] - oznacza dowolną dużą literę od A do G
[a-zA-Z0-9] - oznacza dowolną małą lub dużą literę i
dowolną cyfrę
Meta-znaki najczęściej wykorzystywane są do listowania zawartości katalogów :
ls *
wyświetla wszystkie pliki w katalogu z wyjątkiem zaczynających się od '.' kropki (są to pliki ukryte)
ls *.*
wyświetla wszystkie pliki zawierające w nazwie '.'
ls [A-B]*
wyświetla wszystkie pliki zaczynające się od A lub B
ls ??1
wyświetla pliki, których nazwa składa się z dwóch dowolnych liter i jedynki na
końcu.
18) Polecenie echo i znaki cytowania
Do wyświetlenia tekstu lub wartości zmiennych na ekranie służy polecenie echo.
Polecenie to może być stosowane z kilkoma opcjami :
-n - nie wyświetlaj nic i przejdź do następnej linii
-e - włącz interpretację następujących komend występujących
po \ :
\a - dzwonek
\b - kasuj ostatni znak
\c - przechodź do następnej linii
\n - nowa linia
\t - tabulator
\\ - znak \
Powłoka Bash odróżnia i inaczej interpretuje trzy rodzaje znaków cytowania :
- cudzysłów " " - umożliwia wyświetlenie tekstu, zmiennej
($), zacytowanie polecenia (``) lub użycie znaków specjalnych występujących po \
- apostrof ' ' - wszystko to co zawarte jest między apostrofami
interpretowane jest jako zwykły tekst
- odwrotny apostrof ` ` - przydaje się w sytuacji gdy chcemy podstawić
lub zacytować jakieś polecenie
19) Zmiana powłoki logowania
Powłokę, którą system przydziela nam po zalogowaniu ustawia administrator podczas
procesu tworzenia nowego użytkownika.
Jako zwykły użytkownik mamy jednak możliwość zmiany przydzielonej nam powłoki
dzięki poleceniu:
chsh nowa_powłoka
Należy jednak pamiętać, że powłoka, którą chcemy wybrać
musi być wyszczególniona w pliku /etc/shells
20) Zarządzanie zadaniami
Każdy program uruchomiony z konsoli może zostać przeniesiony w tło co oznacza że
będzie on widoczny jedynie jako działający proces zwalniając wiersz poleceń i
umożliwiając dalszą pracę na konsoli.
Aby uruchomić jakiś program lub polecenie w tle należy skorzystać ze znaku & i umieścić go na końcu nazwy programy lub polecenia :
ps -aux > procesy &
Istnieje również możliwość przeniesienia w tło już uruchomionego zadania,
poprzez zatrzymanie go :
[Ctrl]+[z]
i przeniesienie w tło poleceniem :
bg numer_zadania
gdzie
numer_zadania to liczba pojawiająca się w nawiasie kwadratowym
przy nazwie zatrzymanego programu.
Aby wyświetlić listę z uruchomionymi lub zatrzymanymi zadaniami należy użyć
polecenia :
jobs
Każde zadanie przeniesione w tło możemy z powrotem umieścić na pierwszym planie
używając polecenia :
fg numer_zadania
21) Pliki związane z powłoką
Przed uruchomieniem powłoki system sprawdza pliki konfiguracyjne shell'a z katalogu
/etc/ i z katalogu macierzystego użytkownika.
Główne pliki konfiguracyjne z katalogu /etc/ :
bashrc , profile - podstawowe ustawienia powłoki
inputrc - konfiguracja edytora poleceń basha
Pliki konfiguracyjne z katalogu użytkownika :
.bash_profile , .bashrc - wykonywane podczas uruchamiania
powłoki
.bash_logout - wykonywane podczas zamykania powłoki
22) Skrypty powłoki - wprowadzenie
Skrypty powłoki są programami składającymi się z poleceń powłoki i poleceń
sterujących programem, takich jak : IF, FOR, REPEAT, WHILE itp.
Skrypty umożliwiają pobranie danych od użytkownika lub z pliku, przetworzenie ich i
wyświetlenie wyniku na ekranie monitora lub zapisanie go na dowolnym urządzeniu.
Aby nasz skrypt mógł zostać uruchomiony należy nadać mu prawo do uruchamiania
poleceniem :
chmod +x nazwa_skryptu
Każdy skrypt powinien rozpoczynać się linijką :
#!/bin/bash
Zapis ten oznacza to, że do przetworzenie skryptu zostanie użyta powłoka bash.
Przykładowy skrypt może wyglądać następująco :
#!/bin/bash
# to jest tylko komentarz
echo 'skrypt wyswietla aktualny katalog roboczy'
echo -e "biezacy katalog :\n\a`pwd`"
#!/bin/bash
echo "informacje o uruchomionym skrypcie"
echo "nazwa skryptu : $0"
echo "ilosc parametrow : $#"
echo "pierwszy parametr to : $1"
echo "drugi parametr to : $2"
echo -e "zestawienie wszytkich parametrow :\n$*"
23) Skrypty powłoki - operacje arytmetyczne
Do wykonywania operacji arytmetycznych służy wyrażenie expr .
Przykłady działań arytmetycznych :
dodawanie |
expr 1 + 3 |
odejmowanie |
expr 4 - 1 |
dzielenie
|
expr 8 / 2 |
reszta z dzielenia |
expr 20 % 3 |
mnożenie |
expr 1 \* 3 |
24) Skrypty powłoki - wyrażenie read
Wyrażenie read używane jest do pobierania danych z klawiatury
i zapisywania ich w zmiennych.
Składnia wyrażenia read jest następująca:
read zmienna1,zmienna2,..zmiennaN
Przykładowy skrypt :
#!/bin/bash
echo "Podaj swoje imię:"
read imie
echo "Cześć $imie !"
25) Skrypty powłoki - instrukcje
sterujące w skryptach
Bash umożliwia wykorzystanie w skryptach instrukcji sterujących wykonywanym skryptem
takich jak :
- instrukcje warunkowe : if
- pętle : for , while , until
- wyrażenie : case
Instrukcja warunkowa if
if warunek
then
wykonuje wszystkie polecenia jeśli warunek jest równy zero (true)
elif warunek 2
then
wykonuje wszystkie polecenia jeśli warunek 2 jest równy zero (true)
else
wykonuje wszystkie polecenia jeśli żaren z powyższych warunków nie jest spełniony
fi
Warunek musi mieć następującą postać :
[ wyrażenie1 operator wyrażenie2 ]
Między nawiasami a treścią warunku muszą być postawione spacje.
Operatory wykorzystywane w warunkach :
-eq jest równe (= =)
-ne jest różne (!=)
-lt jest mniejsze (<)
-le jest mniejsze lub równe (<=)
-gt jest większe (>)
-ge jest większe lub równe (>=)
Przykładowy skrypt :
#!/bin/sh
if [ $1 -gt 0 ]
then
echo "liczba $1 jest dodatnia"
elif [ $1 -lt 0 ]
then
echo "liczba $1 jest ujemna"
elif [ $1 -eq 0 ]
then
echo "liczba $1 jest zerem"
else
echo "$1 nie jest liczba"
fi
Petla for
Podczas wykonywania pętli for , zmiennej zostaje przypisana
każda wartość z listy, wykonując jednocześnie instrukcje
zawarte miedzy operatorami : do done w kolejnych etapach przypisania.
for { nazwa zmiennej } in { lista }
do
instrukcje wykonywane są tyle razy ile jest elementów listy
done
Przykładowy skrypt :
#!/bin/bash
for i in 1 2 3
do
echo $i
done
Pętla while i pętla until
Pętla while wykonywana jest tak długo jak długo podany
warunek jest prawdziwy.
Pętla until wykonywana jest tak długo jak długo podany warunek
jest nie prawdziwy.
Obie pętle mają taką samą budowę.
while [ warunek ]
do
polecenie1
polecenie2
.......
done
Przykładowy skrypt :
#!/bin/bash
x=1;
while [ $x -le 10 ]; do
echo $x
x=$[x + 1] x= expr x + 1
done
Wyrażenie case
Wyrażenie case pozwala na dokonanie wyboru z pośród kilku
wzorców.
case zmienna in
"wzorzec1") polecenie1 ;;
"wzorzec2") polecenie2 ;;
"wzorzec3") polecenie3 ;;
*) polecenie_domylne
esac
Przykładowy skrypt :
#!/bin/bash
echo "Wybierz liczbę od 1-4 i zobacz co wygrałeś :"
read liczba
case "$liczbad" in
"1") echo "samochód" ;;
"2") echo "dom" ;;
"3") echo "10000 zł" ;;
"4") echo "przykro mi ale nic nie wygrywasz" ;;
*) echo "aby wziąć udział w losowaniu należy wybrać liczbę z przedziału
1-4"
esac
26) RPM
RPM jest menadżerem pakietów służącym do instalowania, usuwania i tworzenia nowych
pakietów oraz pobierania informacji o nich.
Pakiety RPM to archiwa plików wchodzących w skład danego programu, biblioteki czy
zbioru dokumentów. Pakiety te zawierają skompresowane pliki oraz kilka dodatkowych
plików z informacjami, takimi jak : nazwa pakietu, wersja i krótki opis.
Aby zachować orientację w pakietach nadaje się im nazwy konstruowane według
konkretnych zasad. Nazwa pakietu składa się z czterech części :
- nazwy właściwej
- numeru wersji i podwersji (np.:
3.0.5-9.6x)
- oznaczenia typu (np.: źródło -
src, nazwa architektury, dla której skompilowano pakiet - i386, brak zależności od
architektury - noarch)
- identyfikatora - rpm
Przykładowy pakiet RPM może wyglądać tak :
Narzedzia-3.0.5-9.6x.i586.rpm
Korzystanie z pakietów RPM daje dodatkowe korzyści w porównaniu ze zwykłą
instalacją.
Pakiety RPM możemy :
uaktualniać - nowe wersje oprogramowania
mogą być instalowane bez nadpisywania plików
konfiguracyjnych
usuwać - pakiety oprogramowania są bez
problemu usuwane w całości ze wszystkich
zajmowanych katalogów
weryfikować - po zainstalowaniu pakietu
możemy sprawdzić czy pliki wchodzące w jego skład
nie zostały uszkodzone
pytać - możemy uzyskać informacje o
pakiecie, do którego należy określony plik
Większość plików systemu RPM znajduje się w katalogu /var/lib/rpm/ .
Największy z tych plików to packages.rpm , zawierający bazę danych o zainstalowanym
oprogramowaniu.
Pakiety RPM mogą zawierać również źródła programu. Wówczas pakiet taki należy
najpierw skompilować i dopiero później zainstalować.
Największą trudność początkującemu użytkownikowi sprawia instalacja
oprogramowania źródłowego. Spowodowane jest to częstym występowaniem komunikatów o
błędzie wynikającym z braku odpowiednich bibliotek w systemie, dlatego należy
szczególnie uważnie czytać dokumentację dostarczaną wraz z programem.
27) Instalowanie z pakietów RPM
Gotowy pakiet RPM instalujemy poleceniem :
rpm -i [opcje] nazwa.pakietu
Uaktualnianie pakietów RPM
rpm -U [opcje] nazwa.pakietu
Usuwanie pakietów RPM
rpm -e [opcje] nazwa.pakietu
najważniejsze opcje to:
-v - wyświetla dodatkowe informacje o działaniach programu
RPM
-h - wyświetla semigraficznie informacje o postępie instalacji
--percent - wyświetla procentowy wskaźnik zaawansowania
instalacji
--test - przeprowadzenie procesu instalacji bez instalowania
żadnych plików - przydatne do sprawdzenia czy podczas instalacji nie wystąpi jakiś
konflikt
--force - wymusza instalację pakietu
28) Instalowanie pakietów źródłowych RPM
Instalacja pakietów źródłowych przebiega w następujących krokach :
- należy skopiować pakiet :
nazwa.pakietu.src.rpm
do katalogu
/usr/src/redhat/SOURCE/
- w katalogu tym wydajemy polecenie :
rpm -rebuild nazwa.pakietu.src.rpm
Jeśli wszystko przebiegło bez problemów gotowy pakiet RPM można znaleźć w
katalogu :
usr/src/redhat/RPMS/i386/ lub usr/src/redhat/RPMS/noarch/
w zależności od architektury komputera.
Instalacja gotowego pakietu RPM została pokazana w pk. 1)
Niektóre pakiety można spróbować przekompilować pod kątem wydajności swojego
komputera.
Dla procesora Pentium II kompilację przeprowadzamy poleceniem :
rpm -rebuild nazwa.pakietu.src.rpm -target=i686
29) Instalowanie programów źródłowych
Instalacja programów ze źródeł obejmuje trzy proste kroki :
KROK 1 : rozpakowanie pliku:
W zależności od użytego archiwizatora używamy poleceń :
dekompresja *.tar
tar -xvf nazwa_pakietu.tar
dekompresja *.tar.gz
tar -zxvf nazwa_pakietu.tar.gz
dekompresja *.gz
gzip -d nazwa_pakietu.gz
dekompresja *.bz2
bzip2 -d nazwa_pakietu.bz2
KROK 2 : konfiguracja źródeł :
W katalogu ze źródłami wydajemy polecenie :
./configure
Aby dostosować program do własnych potrzeb możemy w wywołaniu tym podać dodatkowe
parametry określone w pliku INSTALL.
Możemy na przykład określić miejsce, w które program będzie przekopiowany po
instalacji :
./configure -prefix=katalog
Typową lokalizacją dla programów kompilowanych samodzielnie jest :
/usr/local/nazwa.instalowanego.programu/
KROK 3 : kompilacja programu i właściwa
instalacja
Program kompilujemy poprzez wydanie polecenia :
make
jeśli program nie zwrócił błędu to przechodzimy do instalacji wydając polecenie :
make install
30) Uruchamianie programów
Jeśli chcemy uruchomić jakiś program wystarczy podać nazwę tego programu :
startgame
Jeśli nasza zmienna systemowa PATH nie zawiera ścieżki do
miejsca, w którym znajduje się ten program, należy podać nazwę programu wraz z
pełną ścieżką dostępu :
/usr/loca/bin/startgame
Jeśli znajdujemy się już w katalogu z naszym programem możemy podać tylko nazwę
tego programu, wstawiając przed jego nazwą ./ :
./startgame
31) Co to jest X Window
System X Window jest podstawą graficznego interfejsu Linuksa. Udostępnia on
podstawowy zestaw protokołów komunikacyjnych oraz funkcji służących do tworzenia
interfejsów okienkowych. X Window od początku rozwijany był jako system o budowie
modularnej z przeznaczeniem do zastosowań sieciowych.
Programy lub aplikacje pracujące w środowisku X-ów są nazywane klientami. Programy te
nie wpływają bezpośrednio na obraz wyświetlany na monitorze tylko komunikują się z
serwerem X-ów, który zarządza tym obrazem.
Program uruchamiający serwer X-ów to :
/usr/X11R6/bin/X
System X Window używany w większości dystrybucji Linuksa jest zbiorem programów
dostarczanych przez Xfree86 Project.
32) Konfiguracja systemu Xfree86
Najważniejszym plikiem konfiguracyjnym systemu X Window jest XF86Config
znajdujący się w katalogu /etc/X11/. Plik ten jest tworzony
automatycznie podczas procesu instalacji.
XF86Config podzielony jest na kilka sekcji zawierających
dane konfiguracyjne :
Files - informuje serwer X-ów, gdzie znajdują się czcionki,
kolory lub konkretne moduły programowe
Module - zawiera informacje, które moduły powinny zostać
załadowane
Server Flags - sekcja ta zawiera listę konkretnych czynności,
których wykonywania możemy zabronić lub zezwolić poprzez specjalne znaczniki - flagi
Keyboard - zawiera informacje o używanej klawiaturze
Pointer - zawiera informacje o urządzeniu wskazującym
Input - specjalna sekcja dla urządzeń, takich jak tablet lub
piórko świetlne
Monitor - zawiera szczegółowe ustawienia monitora
Device - znajdują się tu szczegółowe informacje na temat
układu graficznego
Screen - informuje serwer X-ów jakiej głębi kolorów, rozmiaru
ekranu i rozmiaru wirtualnego ekranu ma używać
Istnieje kilka narzędzi do konfiguracji X serwera. Najpopularniejsze z nich
uruchamiane z wiersza poleceń konsoli, jako root to :
Xconfigurator , xf86config lub XF86Setup.
Poza tym środowiska graficzne, takie jak GNOME czy KDE posiadają własne programy
konfiguracyjne.
33) Uruchamianie sesji X-ów
Istnieją dwa sposoby uruchamiania sesji X-ów :
- uruchamianie automatyczne podczas startu systemu
- uruchamianie ręczne w trybie tekstowym komendą startx
Uruchamianie automatyczne podczas startu systemu
Aby X-y uruchamiały nam się automatycznie podczas startu systemu, należy wybrać
piąty poziom pracy systemu. Poziom ten można ustawić edytując plik :
/etc/inittab/
i ustawiając odpowiednią wartość w linijce zawierającej wpis :
id:poziom_pracy:initdefault
id:5:initdefault
Automatyczny start X Window odbywa się poprzez program xdm,
którego konfiguracja znajduje się w pliku /etc/X11/xdm/xdm-config.
Logowanie do systemu następuje w trybie graficznym poprzez menadżer logowania, który
umożliwia wybranie jednego z kilku zainstalowanych menadżerów wyświetlania.
Uruchamianie ręczne w trybie tekstowym komendą
startx
Podczas uruchamiania X Window komendą startx system wykonuje
następujące kroki :
- sprawdza zawartość katalogu użytkownika w poszukiwaniu skryptu .xinitrc
uruchamiającego wybrany menadżer wyświetlania
- jeśli skrypt taki nie istnieje w katalogu użytkownika to uruchomienie domyślnego
menadżera następuje poprzez uruchomienie skryptu /etc/X11/xinit/xinitrc.
Przykładowa zawartość pliku .xinitrc uruchamiającego
IceWM może wyglądać następująco :
exec icewm
Należy pamiętać o ustawieniu prawa do uruchamiania dla tego skryptu.
34) Menadżery okien
Istnieje spora grupa menadżerów okien dla Linuksa. Każdy z nich różni się oprawą
graficzną, funkcjonalnością, wymaganiami systemowymi i objętością. Ja spróbuję
tylko w kilku słowach opisać najbardziej popularne, a wybór tego, którego najlepiej
używać zostawię wam.
Stronę z menadżerami wyświetlania znajdziecie w dziale Linki.
KDE - bardzo ładny i dobrze spolszczony
interfejs (podobny do Windows). Duża funkcjonalność i konfiguralność. Duże wymagania
sprzętowe. Nie do końca stabilny.
GNOME - podobnie jak KDE - ładny i
spolszczony interfejs. Duża funkcjonalność. Spore wymagania sprzętowe. Stabilny.
WINDOWMAKER - menadżer ten obsługuje
technologię drag&drob. Umożliwia zmianę wyglądu biurka dzięki mechanizmowi
tematów. Posiada rozbudowane możliwości i jest stosunkowo szybki.
IceWM - niskie wymagania sprzętowe.
Pulpit podobny do tego z Windows 95. Konfiguracja tylko poprzez ręczną edycję plików
konfiguracyjnych. Szybki.
Enlightenment - w menadżerze tym duży
nacisk położono na wygląd. Funkcjonalność dość dobra. Nie duże wymagania
systemowe.
TWM - bardzo niskie wymagania systemowe.
Maksymalnie uproszczony interfejs. Brak obsługi wirtualnych desktopów, ikon, pasków
zadań. Konfiguracja poprzez edycję plików konfiguracyjnych.
35) Start systemu i związane z nim procesy
Jądro systemu po wszelkich czynnościach związanych z własną inicjacją uruchamia
program init. Init to proces macierzysty wszystkich procesów.
Jego rola polega na tworzeniu procesów opisanych w pliku konfiguracyjnym /etc/inittab
oraz inicjacji i konfiguracji systemu.
Jednym z najważniejszych skryptów uruchamianych przez init jest rc.sysinit
Dzięki sysinit zostają wykonane następujące czynności :
- ustawienie początkowej wartości zmiennej środowiskowej $PATH
- konfiguracja sieci
- inicjacja partycji wymiany dla pamięci wirtualnej
- ustawienie nazwy hosta
- sprawdzenie głównej partycji
- zmian trybu dla głównej partycji pozwalając na zapis
- sprawdzenie ograniczenia zużycia przestrzeni dyskowej przez użytkownika (quota)
- czyszczenie tablicy zamontowanych systemów plików /etc/mtab
- wprowadzenie informacji o partycjach do mtab
- montowanie partycji z pliku /etc/fstab
- sprawdzanie zależności wśród modułów
- ładowanie modułów
- usunięcie starych plików PID
- włączenie partycji wymiany
- inicjacja portów szeregowych
Po uruchomieniu rc.sysinit następnym uruchamianym skryptem
jest rc.local.
Jego zadanie polega na pobraniu nazwy systemu operacyjnego oraz informacji o architekturze
komputera i umieszczeniu ich w pliku /etc/issue.
Kolejnym zadaniem procesu init jest uruchomienie skryptów z
katalogu odpowiadającemu danemu poziomowi pracy :
Poziom pracy 0 - /etc/rc.d/rc0
przejście na ten poziom pracy powoduje :
- zatrzymanie wszystkich procesów
- wyłączenie pamięci wirtualnej
- odmontowanie partycji wymiany i systemów plików
- zatrzymanie pracy systemu
Poziom pracy 1 - /etc/rc.d/rc1.d
Jest to tak zwany tryb jednoużytkownikowy i jest on wykorzystywany do prac
konserwacyjnych.
W trybie tym nikt poza użytkownikiem root nie może być zalogowany.
Sieć jest niedostępna i tylko najważniejsze systemy plików są zamontowane.
Poziom pracy 2 - /etc/rc.d/rc2.d
Tryb wieloużytkownikowy z wyłączoną usługą NFS.
Poziom pracy 3 - /etc/rc.d/rc3.d
Tryb wieloużytkownikowy z włączoną usługą NFS.
Poziom pracy 4 - /etc/rc.d/rc4.d
Ten poziom pracy jest pusty co pozwala na zdefiniowanie własnego poziomu pracy.
Poziom pracy 5 - /etc/rc.d/rc5.d
Na poziomie tym zostaje uruchomiony graficzny interfejs X11 i większość usług
sieciowych.
Poziom pracy 6 - /etc/rc.d/rc6.d
Poziom ten odpowiada za restart systemu.
Wszystkie skrypty znajdujące się w katalogach /etc/rc*.d/
są sztywnymi linkami do plików z katalogu /etc/rc.d/init.d.
Skrypty z tych katalogów posiadają nazwy tworzone według schematu :
<S/K><numer>nazwa
gdzie :
<S/K> - oznacza start lub zatrzymanie danego programu
<numer> - określa kolejność wykonywania (uruchamiania lub
zatrzymywania)
nazwa - nazwa uruchamianego skryptu
Wybór domyślnego poziomu pracy, w który system wchodzi zaraz po uruchomieniu
określamy w pliku /etc/inittab.
Plik ten zawiera również wskazania na skrypty, które uruchamiane są w zależności od
poziomu pracy systemu.
Wybór domyślnego poziomu pracy następuje poprzez modyfikację linii :
id:poziomu_pracy:initdefault
Pozostałe linie mają następującą postać :
id:poziom_pracy:akcja:proces
gdzie :
id - jest identyfikatorem linii
poziom_pracy - określa poziom lub poziomy pracy, na których
powinna zostać wykonana zawartość linii (np.: 5 lub 35)
akcja - określa w jaki sposób ma uruchomić program :
respawn - proces należy uruchomić od nowa po
każdym jego zakończeniu
wait - proces należy uruchomić raz na właściwym
poziomie pracy i czekać na jego zakończenie
once - proces będzie wywoływany raz po wejściu we
właściwy poziom pracy
boot - proces zostanie uruchomiony podczas bootowania
systemu
proces - nazwa programu
przykład :
1:2345:respawn:/sbin/getty 9600 tty1
powoduje uruchomienie getty po wejściu na poziomy 2 3 4 5 i ponowny jego restart po zakończeniu działania.
Linuks umożliwia uruchomienie systemu w trybie jednoużytkownikowym, umożliwiając
wprowadzenie poprawek do systemu lub naprawę systemu.
Uruchomienie systemu w trybie single daje bezpośredni dostęp do systemu z prawami
użytkownika root bez podawania hasła dla tego użytkownika.
Aby uruchomić system w tym trybie należy w momencie pojawienia się znaku zachęty
LILO: wpisać
single .
W przypadku używamy LILO z graficznym menu, aby uzyskać dostęp do znaku zachęty
należy po pojawieniu się ekranu wyboru nacisnąć klawisz Esc.
Należy pamiętać, że możliwość taka zmniejsza
bezpieczeństwo naszego systemu umożliwiając dostęp do konta administratora każdemu
użytkownikowi mającemu dostęp do naszego komputera.
Dobrym rozwiązanie jest takie skonfigurowanie programu LILO, aby wymuszało wpisanie
hasła przed wyświetleniem znaku zachęty.
36) Zamykanie systemu
Ważną rzeczą jest, aby system Linuks był odpowiednio
zamknięty przed wyłączeniem zasilania. Każde wyłączenie komputera przed zamknięciem
systemu może doprowadzić do uszkodzenia systemu plików i utraty cennych danych.
Podczas zamykania systemu przechodzi on na 0-wy poziom pracy i uruchamia skrypty
mające na celu zatrzymanie pracy usług, wszystkich aktywnych procesów, zaktualizowanie
struktury wszystkich plików i na koniec uruchamiany jest skrypt halt z katalogu init.d
powodujący zatrzymanie pracy systemu.
System Linuks posiada kilka skryptów powodujących jego zamknięcie :
halt - natychmiastowe zamknięcie systemu
reboot - zrestartowanie systemu
shutdown - program ten posiada najwięcej opcji i może służyć
zarówno do zatrzymania pracy systemu, restartu, jak i do ostrzegania o zamknięciu
systemu. Użytkownik root może zabronić wykonywania tego polecenia innym użytkownikom
poprzez umieszczenie ich w pliku /etc/shutdown.allow .
Więcej informacji na każdy z tych skryptów można uzyskać wydając polecenie :
man nazwa_skryptu
37) syslog i logi systemowe
syslogd - jest programem odpowiedzialnym za zbieranie
informacji (logów) o systemie.
Miejscem przeznaczonym na zapisywanie logów systemowych jest katalog /var/log
.
Tu w odpowiednich katalogach i plikach można znaleźć interesujące nas dane.
Plikiem konfiguracyjny tego demona jest /etc/syslog.conf .
Każda informacja zawarta w pliku składa się z trzech pól :
źródło_komunikatu.rodzaj_komunikatu wyjście
np.:
authpriv.* /var/log/securr
Jeśli kilka rodzaji komunikatów ma te same wyjście to należy oddzielić je
średnikiem, np.:
cron.=debug;cron.=info;cron.=notice var/log/cron/info
Źródła komunikatów mogące wystąpić w tym pliku to :
auth - dane związane z autoryzacją
authpriv - inne komunikaty związane z autoryzacją
cron - komunikaty crona
daemon - inne demony
ftp - komunikaty z serwera ftp
kern - komunikaty jądra systemu
local0-local7 - komunikaty lokalne
lpr - system obsługi drukarki
mail - komunikaty związane z pocztą
mark - w regularnych odstępach czasu wysyła datę i czas
news - system wiadomości
syslog - komunikaty demona syslog
user - procesy użytkowników
uucp - komunikaty protokołu uucp
Rodzaje komunikatów to :
alert - wymagające natychmiastowego działania
crit - krytyczne
debug - uruchomieniowe
emerg - sytuacje zagrożenia
err - błędy
info - informacyjne
notice - wymagające zwrócenia szczególnej uwagi
none - po prostu nic
warning - ostrzeżenia
Znaki mogące wystąpić przed rodzajem komunikatów :
* - wszystkie z wyjątkiem mark
! - za wyjątkiem
np.:
mail.*;mail.!=info /var/log/maillog
mail.info /var/log/info
oznacza, że wszystkie rodzaje komunikatów dotyczące usługi mail zostaną zapisane
do pliku /var/log/maillog za wyjątkiem komunikatów
informacyjnych, które zapisane zostaną do /var/log/info .
38) Urządzenia w systemie Linuks
W systemie Linuks wszystkie urządzenia są reprezentowane przez odpowiednie pliki
znajdujące się w katalogu /dev.
Urządzenia te dzielą się na blokowe i znakowe.
Urządzenia blokowe służą do
przechowywania danych i pozwalają na swobodny dostęp do nich.
Urządzeniami tego typu są na przykład dyski twarde lub stacje dyskietek.
Urządzenia te zachowują się podobnie jak pliki z tym, że długość plików określona
jest przez ilość zapisanych w nich danych, a długość urządzenia blokowego przez jego
pojemność.
Wadą takiego rozwiązania jest to, że jeśli zapiszemy plik o rozmiarze 10MB do
urządzenia blokowego o pojemności 100MB , to po odczytaniu tego urządzenia otrzymamy
10MB naszych danych i 90MB danych zapisanych wcześniej. Wadę tę można ominąć
kodując informację o długości pliku w nim samym.
Urządzenia znakowe służą do odczytu
lub zapisu sekwencji znaków.
Charakterystyczną cechą tych urządzeń jest to, że danych z nich nie można
odczytywać w dowolnej kolejności tylko w kolejności takiej, w jakiej docierają one do
komputera.
Dobrym przykładem takiego urządzenia jest łącze szeregowe.
Oznaczenia niektórych urządzeń z katalogu /dev/ :
hda - pierwszy dysk twardy (IDE/EIDE)
hda1 - pierwsza partycja na pierwszym dysku twardym
hdb - drugi dysk twardy lub CD-ROM
sda - pierwszy dysk twardy (SCASI)
sda1 - pierwsza partycja na pierwszym dysku twardym
sdb - drugi dysk twardy (SCASI)
fd0 - pierwsza stacja dysków elastycznych
fd1 - druga stacja dysków elastycznych
cua0 - COM1
cua1 - COM2
lp0 - LPT1
lp1- LPT2
tty1 - terminal 1
tty2 - terminal 2
null - urządzenie puste
kmem - pamięć operacyjna
39) Zmiana praw dostępu do plików i katalogów
Prawa dostępu do plików i katalogów są jednymi z najważniejszych mechanizmów
bezpieczeństwa systemu. Uniemożliwiają one innym użytkownikom przeglądanie naszych
zasobów. Prawa dostępu podzielone są na trzy sekcje :
- właściciel pliku lub katalogu
- grupa związana z plikiem lub katalogiem
- wszyscy inni użytkownicy systemu
Polecenie ls -l wyświetla szczegółową listę plików i
katalogów wraz z ich prawami dostępu :
ls- l
drwxr-x--- 7 student users 512 Jul 11 22:47 katalog1
wyjaśnienie tego zapisu jest następujące :
identyfikator typu :
- zwykły plik
b specjalny plik blokowy
c specjalny plik znakowy
d katalog
l link symboliczny
p potok
s gniazdo
prawa dostępu :
prawo |
plik |
katalog |
R |
czytania zawartości |
przeszukania zawartości |
W |
zmiany zawartości |
zmiany zawartości |
X |
uruchomienia |
przejścia do tego katalogu |
Prawa przypisywane plikom lub katalogom mogą być podawane na dwa sposoby :
- systemem kodów numerycznych : 4 2 1
- systemem kodów znakowych : r w x
Oto kilka przykładów na porównanie tych systemów :
prawa
dostępu |
zapis
numeryczny |
zapis
znakowy |
Tylko do czytania |
4 |
r-- |
Tylko do pisania |
2 |
-w- |
Tylko do uruchamiania |
1 |
--x |
Do czytania i pisania |
6 |
rw- |
Do czytania i uruchamiania |
5 |
r-x |
Czytania, pisania i uruchamianie |
7 |
rwx |
Polecenie służące do zmian praw dostępu to chmod .
Przykłady :
Prawo do czytania dla właściciela pliku
chmod 400 nazwa_pliku
chmod u+r nazwa_pliku
Wszystkie prawa dla właściciela pliku i prawo do czytania dla grupy
chmod 740 nazwa_pliku
chmod u+rwx,g+r nazwa_pliku
40) Domyślne prawa dostępu przy tworzeniu plików
i katalogów
Domyślne prawa dostępu dla plików i katalogów nadawane są podczas ich tworzenia.
Zmianę tych praw uzyskujemy poleceniem umask.
Jeśli chcielibyśmy, aby tworzone pliki miały domyślne prawa 644,
które zezwalają właścicielowi na czytanie i pisanie, a reszcie tylko na czytanie to od
wartości 777 należy odjąć 644 , a wynik będzie
wartością dla umask
777
-644
-------
133
umask 133
41) suid i sgid
- pożyteczne i niebezpieczne narzędzie
Zadaniem tego potężnego, a zarazem niebezpiecznego narzędzia jest uruchamianie
programu (nie skryptu) z prawami właściciela lub grupy przypisanej temu programowi, a
nie z prawami użytkownika, który ten program uruchamia.
Zagrożenie z używania tych flag może wynikać z
możliwości przejęcia kontroli nad systemem.
Jeśli zwykłemu użytkownikowi uda się tak zawiesić program (którego właścicielem
jest użytkownik root i który ma ustawioną flagę suid lub sgid), aby dostać się do
powłoki to otrzyma on prawa właściciela programu (czyli w tym przypadku użytkownika
root) co stanowi ogromne zagrożenie dla systemu.
Dlatego należy z dużym rozsądkiem używać tych flag.
Nadawanie plikom suid-a lub sgid-a wygląda następująco :
suid :
chmod u+s nazwa_plku
chmod 2*** nazwa_pliku
sgid :
chmod g+s nazwa_pliku
chmod 4*** nazwa_pliku
suid i sgid :
chmod 6*** nazwa_pliku
*** - tu wstawiamy dowolne prawa dla właściciela, grupy i innych
użytkowników.
Flaga suid w listingach plików reprezentowana jest przez literkę s w prawach dla właściciela pliku :
- rws r-x r-x
Flaga sgid w listingach plików reprezentowana jest przez literkę s w prawach dla grupy :
- rwx r-s r-x
42) sticky bit
Dla pliku ustawienie sticky bitu oznacza, że program, który on przechowuje będzie po
jego zakończeniu nadal przechowywany w pamięci komputera.
Dla katalogów sticky bit oznacza, że tylko właściciel może go usunąć mimo
ustawienia praw na przykład na 777.
Ustawienie sticky bitu dla plików wygląda następująco :
chmod 1*** nazwa_pliku_katalogu
chmod +t nazwa_pliku_katalogu
*** - tu wstawiamy dowolne prawa dla właściciela, grupy i innych
użytkowników.
Reprezentantem tego bitu w listingach katalogów jest literka t
w sekcji dotyczącej reszty użytkowników :
- rwx r-x r-t
43) Konto - co to jest i do czego służy ?
W kilku słowach konto użytkownika można określić, jako wszystkie zasoby, pliki i
informacje o tym użytkowniku. Każde konto charakteryzują dwie podstawowe cechy - hasło
i login. Dzięki loginowi komputer wie, z którym użytkownikiem aktualnie pracuje, a
hasło służy do zabezpieczenia zasobów tego użytkownika.
Konta wykorzystywane są również przez programy, które na każdym z tych kont mogą
posiadać własne pliki konfiguracyjne, dostosowujące program do potrzeb danego
użytkownika.
44) Grupy
Grupy umożliwiają dostęp do zasobów systemowych wybranym użytkownikom. Istnieją
dwie możliwości zarządzania grupami :
- tworzenie nowej grupy dla każdego nowo utworzonego użytkownika
- dodawanie użytkowników do istniejących już grup
Każda z tych metod ma swoje zalety i wady. Tworzenie osobnych grup dla nowych
użytkowników zwiększa bezpieczeństwo ich danych.
Załóżmy jednak, że nasz system pracuje w firmie, gdzie zatrudnionych jest pięciu
księgowych i dziesięciu pracowników biurowych. Wszyscy ci pracownicy korzystają z
zasobów naszego systemu. Księgowi posiadają wspólne bazy danych i pracownicy biurowi
wspólne zasoby. Zasoby księgowych nie mogą być dostępne dla pracowników biurowych i
odwrotnie.
W takim przypadku dobrym rozwiązaniem jest stworzenie dwóch grup :
Każdej z tych grup należy przydzielić odpowiednich pracowników i ustawić
odpowiednie prawa dostępu dla nich i innych użytkowników, zabraniając tym ostatnim
prawa dostępu.
Takie rozwiązanie daje możliwość dzielenia się zasobami wśród danej grupy nie
udostępniając ich innej.
Do tworzenia nowej grupy służy polecenie :
groupadd -g gid nazwa_grupy
lub
groupadd nazwa grupy
gdzie :
gid - numeryczna wartość identyfikatora grupy. Wartość ta
musi być niepowtarzalna.
Wartości od 0-99 są zarezerwowane
dla kont systemowych i nie powinny być używane.
W przypadku nie podania gid system
sam przydzieli grupie pierwszą wolną wartość.
Aby skasować daną grupę należy wydać polecenie :
groupdel nazwa_grupy
Podczas dodawania grup system modyfikuje następujące pliki :
/etc/group
zawiera on wszystkie informacje o grupach.
Każdy wpis zajmuje jedną linię, mającą następujący format :
nazwa_grupy:hasło:GID:lista_użytkowników
/etc/gshadow
zawiera bezpieczne informacje o kontach grup.
45) Dodawanie i usuwanie nowych kont
Linuks posiada dwa sposoby tworzenia nowych kont :
- poprzez specjalne programy
- ręcznie - poprzez edycję odpowiednich plików
Podstawowym programem do dodawania nowych użytkowników jest useradd
o następującej składni :
useradd -d katalog_domowy -g grupa_początkowa -G inne_grupy -s powłoka
-u UID login
gdzie :
katalog_domowy - wartość ta określa nazwę nowo utworzonego
użytkownika. Domyślnie zmienna ta przyjmuje wartość taką samą jak login
gupa_początkowa - jest nazwą grupy początkowej użytkownika.
Grupa ta musi już istnieć. W przypadku nie podania tej zmiennej system sam utworzy
grupę dla użytkownika o nazwie zgodnej z nazwą loginu
inne_grupy - lista dodatkowych grup, do których również należy
użytkownik powłoka - nazwa powłoki użytkownika
UID - numeryczna wartość identyfikatora użytkownika. Wartość
ta musi być niepowtarzalna i większa od 99. W przypadku nie podania tej zmiennej system
sam przydzieli użytkownikowi pierwszy wolny numer.
Domyślne wartości dla zmiennych są podawane z pliku /etc/default/useradd
Dodanie użytkownika o nazwie uczen do systemu może wyglądać
następująco :
groupadd uczen
useradd -d /home/uczen -g uczen -s /bin/bash uczen
lub
useradd uczen
Ręczne tworzenie konta wymaga więcej czasu od administratora systemu, ale za to
pomoże w zrozumieniu mechanizmu tworzenia kont.
Aby ręcznie utworzyć nowe konto dla użytkownika uczen należy wykonać następujące
czynności :
a) dodać wpis do pliku /etc/passwd i w przypadku
maskowania haseł do /etc/shadow
/etc/passwd
uczen::504:504::/home/uczen:/bin/bash
/etc/shadow
uczen::0:99999:7:::
Składnia pliku passwd jest następująca :
nazwa_użytkownika:hasło:UID:GID:komentarz:katalog_domowy:polecenie_logowania
gdzie :
nazwa_użytkownika - jest polem zawierającym jednoznacznie
identyfikującą nazwę użytkownika
hasło - jest zakodowanym hasłem użytkownika. Jeśli w systemie
użyto maskowania haseł to w miejscu tym znajduje się x. Brak
jakiejkolwiek wartości oznacza brak hasła na tym koncie
UID - unikalny numer reprezentujący użytkownika w systemie
GID - unikalny numer wskazujący na domyślną grupę, do której
należy użytkownik komentarz - zawiera informacje o użytkowniku dostępną dla innych
użytkowników po wydaniu polecenia finger
katalog_domowy - określa miejsce katalogu domowego użytkownika
polecenie_logowania - polecenie, które zostaje uruchomione w
trakcie logowania do systemu. Często jest to wpis wskazujący na powłokę.
Składnia pliku /etc/shadow jest następująca :
nazwa_użytkownika:hasło:data_zmiany_hasła:min:max:przypomnienie:ważność_konta:
inne
gdzie :
nazwa_użytkownika - jest polem zawierającym jednoznacznie
identyfikującą nazwę użytkownika
hasło - zaszyfrowane hasło
data_zmiany_hasła - data ostatniej zmiany hasła
min - minimalny okres pomiędzy zmianami hasła
max - maksymalny okres pomiędzy zmianami hasła
przypomnienie - wartość ta określa na ile dni przed upływem
terminu przypominać o zmianie hasła
ważność_konta - termin ważności konta
inne - miejsce zarezerwowane na przyszłe zmienne
b) dodać wpis do /etc/group i /etc/gshadow
/etc/gropu :
uczen:x:504:
/etc/gshadow :
uczen:x::
c) skopiować pliki z /etc/skel do
utworzonego katalogu /home/uczen
d) ustawić właściciela i prawa dostępu dla nowego użytkownika :
cd /home/
chown -R uczen:uczen uczen
cd /home/uczen
chmod -R go=u,go-w .
chmod go= .
e) ustawić hasło dla konta :
passwd uczen
46) Tymczasowe blokowanie konta
Administrator systemu czasami z różnych przyczyn jest zmuszony do tymczasowego
zablokowania konta bez jego kasowania.
Istnieją dwa sposoby blokowani kont :
- w pliku /etc/passwd na pozycji hasło należy wstawić przed x znak '!' .
Teraz podczas próby logowania system odmówi dostępu użytkownikowi :
uczen : !x : 504 : 504 : : /home/uczen : /bin/bash
- drugi sposób polega na wykorzystaniu polecenia passwd :
blokowanie konta :
passwd -l
nazwa_użytkownika
ponowne udostępnienie konta :
passwd -u
nazwa_użytkownika
47) Pliki i programy związane z kontami
użytkowników
Najważniejsze polecenia zmieniające właściwości konta to :
chfn - zmienia informacje o koncie dla programu finger
chsh - służy do zmiany powłoki logowania
passwd - zmienia hasło konta
Zwykły użytkownik tymi poleceniami może zmienić właściwości tylko swojego konta.
Super-użytkownik - root - może wykorzystać te polecenia do zmiany dowolnego konta.
Ciekawymi plikami związanym z kontem użytkownika są :
.bashrc - zawartość tego pliku wykonywana jest podczas
logowania na dane konto
.bash_logout - zawartość tego pliku wykonywana jest podczas
wylogowywania się z konta
48) Archiwizacja i kopie
bezpieczeństwa
Jak cenne są dane gromadzone czasami przez kilka miesięcy nie trzeba nikomu
przypominać kto choć raz je utracił. Jeśli stracone dane były tylko naszą
własnością to nikt oprócz nas nie poniesie straty, jeśli jednak utraciliśmy dane z
serwera firmy, którego jesteśmy administratorem to może to być już duży problem.
Aby uniknąć podobnych problemów w domu czy firmie należy archiwizować swoje dane.
Różnica pomiędzy kopią bezpieczeństwa, a archiwizacją jest dość znaczna.
Wykonywanie kopii bezpieczeństwa obejmuje operacje na plikach zawierających dane,
których zawartość zmienia się w regularnych odstępach czasu.
Pojęcie archiwizacja obejmuje operacje
na plikach zawierających wszelkie dane, te zmieniające się często, jak i te
zmieniające się rzadko.
49) Wybór nośnika dla kopii bezpieczeństwa
Przy wyborze nośnika należy rozważyć :
koszt, pewność, prędkość, dostępność i użyteczność.
Najbardziej popularnymi nośnikami są :
- dyski twarde
- CD-ROM-y
- Flash ROM-y
- taśmy
Każdy z tych nośników ma swoje zalety i wady, dlatego to, który najlepiej nadaje
się to archiwizacji jest sprawą indywidualną.
50) Techniki wykonywania kopii
bezpieczeństwa
Najprostszą metodą wykonania kopii bezpieczeństwa jest skopiowanie każdego pliku
wchodzącego w skład naszego systemu. Technika ta nazywa się pełną archiwizacją i
może być dość czasochłonna.
Pełną archiwizację stosuje się w małych systemach, gdzie odzyskanie pojedynczego
pliku nie będzie zbyt czasochłonne.
W dużych systemach stosuje się technikę rosnących kopii bezpieczeństwa. Kopie takie
wykonuje się częściej niż pełną archiwizację.
Technika rosnących kopii bezpieczeństwa polega na zapisie tylko tych plików, które
zmieniły się od czasu ostatniej archiwizacji.
51) Programy i skrypty do archiwizacji i tworzenia kopii
bezpieczeństwa
Podstawowymi narzędziami do wykonywania kopii bezpieczeństwa są tar
i cpio.
Programy te potrafią obsłużyć każde medium zainstalowane w naszym systemie.
Pełną kopię bezpieczeństwa można utworzyć poleceniem :
tar -cf urządzenie_lub_plik /
find / * -print | cpio -o > plik_lib_urządzenie
Wykonanie kopii bezpieczeństwa plików zmodyfikowanych bieżącego dnia wygląda
następująco :
find / -mtime -1 | cpio -o > plik_lub_urządzenie
Odzyskanie plików z archiwum wygląda następująco :
tar -xpf plik_archiwum_lub_urządzenie
cpio -im < plik_archiwum_lub_urządzenie
52) Czym jest system plików ?
System plików to metody i struktury danych używane przez system operacyjny w celu
zapisania i zorganizowania plików na danym urządzeniu.
System Linuks obsługuje wiele różnych systemów plików, ale podstawowym systemem
jest ext2, ponieważ został on stworzony specjalnie dla Linuksa i jest
bardzo wydajny.
Cechami charakterystycznymi dla tego systemu są : superblok, i-węzeł, blok danych,
blok katalogu oraz blok pośredni . Superblok zawiera informacje o systemie jako
całości, np. rozmiar. I-węzeł zawiera wszelkie informacje o pliku za wyjątkiem jego
nazwy. Nazwa przechowywana jest w katalogu razem z numerem i-węzła. Wpis katalogu
zawiera nazwę i liczbę i-węzłów plików. I-węzeł zawiera numery kilku bloków
danych, które używane są do przechowywania pliku. Automatycznie allokowane miejsce
pozwala przechowywać tylko kilka numerów, jednak w razie potrzeby zostaje dynamicznie
allokowana dodatkowa przestrzeń. Bloki allokowane dynamicznie nazywają się
bezpośrednimi - nazwa wskazuje, że w celu znalezienia numeru bloku danych należy
znaleźć pierwszy blok pośredni.
53) Montowanie i odmontowywanie
systemu plików
Aby móc używać system plików należy go wcześniej zamontować.
Do montowania systemu plików służy polecenie mount o składni :
mount -t typ urządzenie punkt_montowania
gdzie :
typ - rodzaj systemu plików, np.: ext2, msdos
urządzenie- musi być urządzeniem blokowym
punkt_montowania - nazwa pliku pod którym będzie zainstalowany
dany system
Aby zamontować dyskietkę wydajemy polecenie :
mount -t msdos /dev/fd0 /mnt/floppy
Do odmontowania systemu plików służy polecenie umount :
umount /mnt/floppy
54) Konfiguracja systemu plików
Informacje o systemach plików, które mają lub mogą być zamontowane i o ich
konfiguracji zawiera plik /etc/fstab .
Każdy system plików opisany jest przez osobne linie, a pola w każdej linii oddzielone
są znakami spacji lub tabulatora.
Przykładowy plik fstab może wyglądać następująco :
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults 1 2
/dev/hdb /mnt/cdrom iso9660 user,noauto,ro 0 0
/dev/fd1 /mnt/floppy msdos user,noauto 0 0
/dev/hda2 none swap sw
Pole pierwsze opisuje specjalne
urządzenie blokowe lub zdalny system plików przeznaczony do zamontowania.
Pole drugie wskazuje na miejsce, w
którym ma być dany system plików zamontowany.
Dla partycji wymiany pole to powinno zawierać wartość none.
Pole trzecie opisuje typ systemu plików.
Najczęściej używane systemy plików to :
ext2 - standardowy system plików dla Linuksa
msdos - system plików dla partycji MS-DOS
iso9660 - system plików używany przez stacje CD-ROM
nfs - system plików służący do montowania partycji z systemów
zdalnych
swap - partycja dysku używana jako przestrzeń wymiany
Pole czwarte zawiera opcje montowania
danego systemu plików. Opcje podaje się jako listę oddzieloną przecinkami.
Najważniejsze opcje to :
auto - oznacza, że polecenie mount -a powinno zamontować dany system
plików
noauto - zabrania montowania systemu, gdy wydano opcję : mount -a
user - opcja ta pozwala użytkownikowi na montowanie danego systemu
plików
dev - pozwala na używanie plików urządzeń zapisanych w systemie
plików
exec - zwykle wykorzystywany w systemach NFS. Opcja ta zezwala na
uruchamianie plików zapisanych w danym systemie
noexec - przeciwieństwo opcji exec
ro - montuje system plików w trybie tylko do odczytu
rw - montuje system plików w trybie do odczytu i zapisu
sync - wszystkie operacje zapisu będą oczekiwać na potwierdzenie ich
zakończenia przez sprzęt. Tryb ten jest wolniejszy, ale za to bezpieczniejszy
async - przeciwieństwo opcji sync
suid - pozwala na korzystanie z flag suid
nosuid - przeciwieństwo suid
defaults - włącza opcje rw,exec, auto, nouser, async, suid
Pole piąte jest używane przez program dump do wykrycia, który system plików musi być odłączony. Wartość
0 oznacza, że dany system nie musi być odłączony.
Pole szóste jest używane przez program e2fsck do określenia kolejności sprawdzania systemu plików podczas
ładowania systemu.
Główny system plików powinien mieć wartość 1 zaś inne systemy
plików wartość 2.
Wartość 0 oznacza, że dany system nie będzie sprawdzany.
55) Narzędzia do sprawdzania i naprawy systemu plików
Podstawowym narzędziem dla administratora do sprawdzania i naprawy uszkodzonych
systemów plików jest program e2fsck.
Program ten jest uruchamiany automatycznie przez system po nieprawidłowym jego
zamknięciu.
Przed sprawdzeniem systemu plików programem e2fsck,
należy system ten odmontować. Wyjątek stanowi tylko główny system plików, który
przed sprawdzeniem należy przemontować w tryb : tylko do odczytu.
Sprawdzenie lub naprawa przykładowego systemu plików może wyglądać następująco :
odmontowanie systemu plików :
umount /dev/hda2
sprawdzenie :
e2fsck -y /dev/hda2
ponowne montowanie :
mount -t ext2 /dev/hda2/ /usr
Jeśli nie powiodła się próba naprawienia systemu plików, można skorzystać z
opcji nakazującej korzystania z zapasowej kopii superbloku :
e2fsck -t ext2 -b 8193 /dev/hda2
8193 to numer bloku zawierającego pierwszą kopię zapasową superbloku.
Kopie superbloków są zapisywane co 8192 bloki, czyli druga kopia
będzie miała numer 16385.
56) Tworzenie nowego systemu plików
Do tworzenia nowych systemów plików możemy wykorzystać program mkfs o
następującej składni :
mkfs [-t] [-c] urządzenie_blokowe
gdzie :
-t - określa typ tworzonego systemu plików, domyślnie ext2
-c - sprawdza uszkodzone bloki urządzenia przed utworzeniem
systemu plików
Aby utworzyć system plików ext2 na dyskietce należy wydać następujące polecenie :
mkfs -t ext2 /dev/fd0
57) Inne narzędzia i pliki związane z
systemem plików
Ciekawym narzędziem dającym sporo informacji o systemie plików jest program dumpe2fs.
Większość informacji podawanych przez ten program pochodzi z superbloku.
Pożytecznym plikiem związanym z systemem plików jest plik etc/mtab.
Plik ten zawiera informacje o aktualnie zamontowanych systemach plików.
58) Procesy
Każda uruchomiona aplikacja tworzy w systemie odrębny proces, który zarządza
pamięcią, procesorem i zasobami wejścia i wyjścia, tak aby możliwe było wykonanie
tej aplikacji.
System Linuks daje złudzenie równoczesnego wykonywania wielu zadań. W rzeczywistości
jeden procesor może obsłużyć tylko jeden proces. Złudzenie takie jest osiągane
dzięki podziałowi czasu, co oznacza, że system operacyjny przełącza wykonywanie
poszczególnych procesów w określonych, bardzo krótkich odstępach czasu.
Do wyświetlania listy procesów pracujących w systemie służy polecenie ps.
Aby wyświetlić listę wszystkich bieżących procesów należy użyć parametru -A :
ps -A
Do wyświetlenia wszystkich procesów uruchomionych w systemie służą parametry -aux :
ps -aux
Na ekranie system w postaci kolumn wyświetli informacje o wszystkich procesach.
Objaśnienie poszczególnych kolumn jest następujące :
wartość |
znaczenie |
USER |
Identyfikator użytkownika będącego
właścicielem procesu |
PID |
Identyfikator procesu |
%CPU |
Procentowe zużycie czasu procesora przez proces |
%MEM |
Procentowe zużycie pamięci przez proces |
VSZ |
Rzeczywisty rozmiar procesu, w kilobajtach |
RSS |
Ilość fizycznej pamięci używanej przez proces |
TTY |
Terminal związany z procesem |
STAT |
Status procesu; oto niektóre z możliwych
wartości: R - działający (Runnable)
D - oczekujący na dostęp do dysku (Disk wait)
I - nieaktywny przez mniej niż 20 sekund
S - nieaktywny przez więcej niż 20 sekund
T - wstrzymany
Z - Zombie, czyli proces porzucony, który powinien zostać zamknięty
przez inny proces
W - proces przeniesiony czasowo do pliku wymiany
N - wartość parametru Nice, oznaczającego priorytet procesu |
START |
Czas uruchomienia procesu |
TIME |
Zużyty czas procesora |
COMMAND |
Polecenie (wraz z parametrami), które
spowodowało uruchomienie procesu |
Każdy proces w systemie Linuks może zostać zabity (zamknięty). Jako zwykły
użytkownik możesz zabić tylko te procesy, które są twoja własnością. Wyjątkiem
jest super-użytkownik, który może zabić dowolny proces.
Do zamykania procesów służy polecenie kill lub killall :
kill 123
zabije proces o numerze PID 123
killall -v mozilla
zabije procesy o nazwie mozilla
Do zabijania procesów pod X Window służy polecenie xkill , wydawane w oknie
X-terminala.
Po wydaniu tego polecenia kursor myszy zmienia swój kształt i wówczas można
przemieścić go nad okno programu, który chcemy zabić i nacisnąć lewy przycisk myszy.
Wykorzystując polecenie kill możemy do danego procesu wysłać
jeden z możliwych sygnałów.
Polecenie kill 123 jest równoważne z poleceniem
kill -s SIGKILL 123.
Możliwe sygnały to :
NAZWA |
NUMER |
AKCJA |
KOMENTARZ |
SIGHUP |
1 |
A |
Wyłączenie terminala kontrolnego albo śmierć procesu
kontrolującego |
SIGINT |
2 |
A |
Przerwanie z klawiatury (CTRL+C) |
SIGQUIT |
3 |
C |
Wyjście z klawiatury |
SIGILL |
4 |
C |
Niepoprawna instrukcja |
SIGTRAP |
5 |
C |
Pułapka śledzenia procesu |
SIGABRT |
6 |
C |
Sygnał zakończenia z funkcji abort |
SIGBUS |
7 |
C |
Błąd magistrali (zły dostęp do pamięci) |
SIGFPE |
8 |
C |
Błąd zmiennoprzecinkowy |
SIGKILL |
9 |
C |
Sygnał natychmiastowego zabicia procesu |
SIGUSR1 |
10 |
AEF |
Sygnał użytkownika 1 |
SIGSEGV |
11 |
A |
Niewłaściwe wskazanie do pamięci |
SIGUSR2 |
12 |
C |
Sygnał użytkownika 2 |
SIGPIPE |
13 |
A |
Zerwany potok |
SIGALRM |
14 |
A |
Sygnał alarmowy z funkcji alarm |
SIGTERM |
15 |
A |
Sygnał przerwania działania procesu |
SIGSTKFLT |
16 |
A |
Błąd stosu w koprocesorze |
SIGCHLD |
17 |
A |
Proces potomny zatrzymany lub wyłączony |
SIGCONT |
18 |
B |
Kontynuacja przy zatrzymaniu |
SIGSTOP |
19 |
DEF |
Zatrzymanie procesu |
SIGTSTP |
20 |
D |
Stop wpisany na terminalu |
SIGTTIN |
21 |
D |
Proces w tle potrzebuje wejścia z terminala |
SIGTTOU |
22 |
D |
Proces w tle wyprowadza dane na terminal |
SIGURG 23 |
23 |
B |
Ważne zdarzenie w gnieździe |
Domyślna akcja to:
A Zakończenie procesu
B Ignorowanie sygnału
C Zakończenie procesu i zrzucenie rdzenia
D Przerwanie procesu
F Sygnał nie może być złapany
F Sygnał nie może być ignorowany
Niektóre działania związane z procesami możemy wywołać korzystając ze skrótów
klawiszowych.
I tak na przykład zatrzymanie bieżącego procesu możemy dokonać kombinacją klawiszy :
[Ctrl]+[z], natomiast przerwanie
bieżącego procesu kombinacją :[Ctrl]+[c].
Zabicie procesu taką kombinacją klawiszy spowoduje
nieuchronne zakończenie działania programu i utratę wszelkich nie zapisanych danych
związanych z tym programem.
Częstym objawem zawieszenia programu lub zabicia jego procesu jest utworzenie pliku core w bieżącym katalogu. Pliki core to obrazy pamięci tworzone z myślą o
debagerach.
Pliki core mają czasami duże rozmiary,
dlatego jeśli nie zajmujemy się ich analizą, dobrym rozwiązaniem jest usunięcie ich z
systemu i zablokowanie możliwości ich tworzenia poleceniem :
ulimit -c 0
Jeśli jednak chciałbyś dowiedzieć się z jakiego powodu dany program padł,
skorzystaj z polecenia :
gdb -c core
które uruchomi debugger analizujący pliki core .
59) Zdobywanie źródła nowego jądra systemu
Jądro (kernel) w systemie Linuks pełni rolę pośrednika między uruchamianymi
programami, a sprzętem komputerowym. Głównym zadaniem jądra jest zarządzanie
pamięcią, partycją wymiany i procesorem tak, aby wszystkie uruchomione procesy dostały
równą ilość czasu procesora.
Istnieją dwa rodzaje wersji jądra : stabilna i rozwojowa.
Wersja stabilna nie zawiera większych błędów i przeznaczona jest dla systemów, w
których ważną rolę odgrywa stabilność i bezpieczeństwo.
Wersja rozwojowa zawiera zazwyczaj nowe rozwiązania będące w fazie testów i
przeznaczona jest dla ludzi zajmujących się rozwojem kernela.
Wersje stabilną od wersji rozwojowej można poznać po
jej numerze.
Wersje stabilne mają środkową liczbę parzystą : 2.4.14 , a wersje rozwojowe
nieparzystą : 2.5.69 .
Najlepszym miejsce do ściągnięcia najnowszego jądra jest serwer :
ftp://ftp.kernel.org:/pub/linux/kernel
Na serwerze tym można znaleźć starsze, jak i te najnowsze jądra systemu, zarówno
te stabilne, jak i rozwojowe. Na serwerze znajdują się również path-e do kerneli.
Nowe jądro należy przekopiować do katalogu /usr/src i tam
rozpakować.
W katalogu tym zostanie utworzony nowy katalog zawierający jądro systemu.
60) Konfiguracja jądra
Istnieją trzy polecenia służące do konfigurowania jądra systemu :
make config - konfiguracja odbywa się w trybie tekstowym i
polega na odpowiadaniu na zadawane pytania
make menuconfig - konfiguracja przebiega w oparciu o graficzne
menu, a cały proces konfiguracji opiera się na używaniu klawiszy : [enter] i [spacja] ,
prosty w obsłudze
make xconfig - konfigurator pracuje w systemie X Window, posiada
przyjazny interfejs, a wszelkie wybory dokonuje się myszą
Polecenia te należy wydać w katalogu z nowym jądrem systemu .
Należy wspomnieć, że podczas konfiguracji sterowniki mogą być wkompilowane w
jądro '*' , skompilowane jako moduł 'M' lub nie
kompilowane wcale - okienko puste.
Najważniejsze opcje konfiguracyjne jądra wraz z przykładową konfiguracją to :
1. Code maturity level options
[ * ] Prompt for development and/or incomplete code/drivers
Opcja ta umożliwia nam korzystanie z nowych, będących w trakcie testów sterowników
2. Processor type and features
(PPro/6x86MX) Processor family
W tej opcji wybieramy typ posiadanego procesora
(1GB/2GB) Maximum Physical Memory
Podajemy największy rozmiar pamięci fizycznej
[ ] Math emulation
Włącza emulację koprocesora matematycznego
[ * ] MTRR (Memory type range register)
Należy włączyć tą opcję przy procesorach Pentium Pro i wzwyż
[ ] Symetric multi-processing support
Opcja ta przeznaczona jest dla komputerów wieloprocesorowych
3. Loadable module support
[ * ] Enable module support
Opcja pozwalająca na kompilowanie fragmentów kodu kernela jako modułów, które mogą
być ładowane w razie potrzeby
[ ] Set version information on all symbols for modules
Umożliwia korzystanie z modułów skompilowanych przy instalacji poprzedniego jądra
[ * ] Kernel module loader
Opcja to umożliwia automatyczne ładowanie modułów
4. General setup
[ * ] Networking support
Obsługa sieci. Należy zaznaczyć tą opcję nawet jeśli nie będziemy podłączeni do
sieci
[ * ] PCI Support
Jest to wsparcie dla urządzeń pracujących na magistrali PCI
[ * ] PCI quirks
Zaznaczenie tej opcji powoduje automatyczne ustawienie szyny PCI z pominięciem BIOS-u
(BIOS/Direct/Any) PCI access mode
Sposób dostępu do szyny PCI - z użyciem BIOS-u, lub bezpośredni
[ * ] System V IPC
Opcja ta włącza komunikację międzyprocesorową. Przydatne przy uruchamianiu wszelakich
emulatorów systemów.
[ * ] Sysctl support
Pozwala na dynamiczne zmienianie parametrów jądra
[ M ] Kernel support for a.out binaries
[ * ] Kernel support for ELF binaries
[ M ] Kernel support for MISC binaries
Wsparcie dla podstawowych formatów plików wykonywalnych
[ * ] Parallel port support
Wsparcie dla urządzeń podłączonych do portu równoległego
[ * ] PC-style hardware
Opcja dla posiadaczy portu równoległego PC-style
[ * ] Advanced Power Management BIOS support
Zaawansowane oszczędzanie energii oparte na BIOS-się komputera
5. Plug and Play support
[ * ] Plug and Play support
Opcja ta daje wsparcie dla urządzeń typu p-n-p
<*> Auto-probe for parallel device
Automatyczne rozpoznawanie urządzeń podłączonych do portu równoległego
6. Block devices
[ M ] Normal PC floppy disk support
Opcja potrzebna w przypadku korzystania ze stacji dyskietek
[ * ] Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
Wsparcie dla standardu IDE/MFM/RLL
[ * ] Include IDE/ATA-2 DISK support
[ * ] Include IDE/ATAPI CDROM support
Opcje te włączają wydatniejszą obsługę dysków i cd-romów
[ * ] CMD640 chipset bugfix/support
[ * ] CMD640 enchanced support
[ * ] RZ1000 chipset bugfix/support
Włączenie tych opcji powoduje poprawienie błędów w układach scalonych
[ * ] Generic PCI IDE chipset support
Wsparcie dla PCI systemu z obsługą dysków IDE
[ * ] Generic PCI bus-master DMA support
Wsparcie dla dysków z obsługą DMA
[ * ] Use DMA by default when available
Wsparcie dla urządzeń korzystających z DMA
[] Other IDE chipset support
Wsparcie dla niestandardowych urządzeń IDE
[ ] Loopback Device Support
Sterownik umożliwiający zamontować plik, który jest obrazem dysku
[ ] Multiple devices driver support
Sterownik pozwalający zamontować wiele partycji fizycznych w jedną logiczną
[ ] RAM disk dupport
Umożliwia stworzenie dysk wirtualny w pamięci RAM
7. Networking options
[ M ] Packet socket
Opcja dołączająca protokół wykorzystywany prze aplikacje do komunikacji w sieci
[ *] Kernel/User netlink socket
[ *] Network firewalls
Opcje umożliwiające stworzenie firewalla do ochrony naszej sieci
[ * ] TCP/IP Networking
Obsługi protokołu TCP/IP mającego zastosowanie zarówno w internecie jak i w lokalnych
sieciach
[ ] The IPX protocol
Opcja do obsługi protokołu sieciowego IPX w Novellu
<> Appletalk DDP
Służy do konwersacji z komputerami Apple
8. SCSI support
[ ] SCSI support
Opcja do obsługi urządzeń SCSI
[ ] SCSI disk support
[ ] SCSI tape support
[ ] SCSI CD-ROM support
[ ] SCSI generic support
Wsparcie dla poszczególnych urządzeń SCSI
SCSI low-level drivers ŕ
Tutaj wybieramy typ naszego kontrolera SCSI
9. Network device support
[ * ] Network device support
Zaznaczamy tą opcję, jeżeli chcemy używać sieci
[ M ] Dummy net driver support
Zaznaczamy przy używaniu protokołów PPP lub SLIP
<> EQL (serial line load balancing) support
Jeśli chcemy używać jednocześnie dwóch połączeń do tego samego komputera (wymaga 2
modemów i 2 linii telefonicznych)
Ethernet (10 or 100Mbit)
Opcja potrzebna do utworzenia lokalnej sieci z użyciem kart sieciowych.Należy wybrać
model karty
[] FDDI driver support
Wsparcie dla kart FDDI
[ M ] PLIP (paraller port) support
Potrzebne do połączenia dwóch komputerów za pomocą portu równoległego
[ M ] PPP (point-to-point) support
Potrzebne w przypadku korzystania z internetu poprzez modem
<> SLIP (serial line) support
starszy brat PPP wykorzystywany do łączenia się z internetem, poprzez linię
telefoniczną
<> CSLIP compressed headers
SLIP z włączoną kompresją nagłówków TCP/IP
[] Keepalive and linefill
dodatkowe możliwości dla SLIP przy łaczach słabej jakości
10. IrDA subsystem support
Obsługa urządzeń na podczerwień
11. ISDN subsystem
Obsługa urządzeń ISDN
12. Old CD-ROM drivers (not SCSI, not IDE)
Obsługa CD-ROMów starego typu
13. Character devices
[ * ] Virtual terminal
Opcja pozwala na uruchamianie kilku wirtualnych terminali i przełączanie się między
nimi za pomocą klawiszy ALT+Fx.
[ * ] Support for console on virtual terminal
Dzięki tej opcji można ustawić wirtualny terminal na konsoli
[ M ] Standard/generic (dumb) serial support
Obsługa urządzeń podłączonych do portu szeregowego
[] Support for console on serial port
Dzięki tej opcji można ustawić konsolę na porcie szeregowym, czyli komunikaty od
jądra będą wysyłane na ten port, użyteczne w przypadku podłączania terminali lub
profesjonalnych drukarek
[] Extended dumb serial driver options
Opcja wymagana jeśli chcemy używać HUB6 bądź więcej niż 4 porty szeregowe oraz
dzielić linię szeregową
[] Non-standard serial port support
Pozwala na ustawienie niestandardowych portów, wykorzystywana w systemach gdzie konieczna
jest praca wielu portów np. serwer z podłączonymi terminalami
[ * ] Unix98 PTY support
Wsparcie dla pseudo-terminali, które pozwalają na pracę takich urządzeń jak : telnet,
xterm
(256) Maximum number of Unix98 PTY in use (0-2048)
Maksymalna liczba pseudo-terminali dla przeciętnych komputerów liczba 256 jest
wystarczająca
[ * ] Parallel printer support
Zaznaczamy jeżeli mamy podłączoną drukarkę do portu równoległego.
[ * ] Mouse Support (not serial mice) Mice
Obsługa myszki podłączonej do portu PS/2. Przy zwykłych myszkach nie zaznaczamy.
[ * ] Enhanced Real Time Clock Support
Włączenie dostępu do zegara czasu rzeczywistego.
Video For Linux ->
Potrzebne jeżeli posiadamy kartę TV lub radiową. Należy wybrać model karty
Joystick support ->
Obsługi joysticka. Należy wybrać model urządzenia
14. Filesystem
[* ] Quota support
Włączenie tej opcji pozwoli na ustawienie limitów dyskowych dla użytkowników
[ ] Kernel automonter support
Włączenie tej opcji pozwoli nam na zamontowanie odległego systemu plikowego
[ * ] DOS FAT fs support
Pozwala na korzystanie z partycji dosowych
[ * ] MSDOS fs support
Dostęp do partycji MSDOS
[ ] UMSDOS: Unix-like filesystem on top of standard MSDOS filesystem
Pozwala na uruchomienie Linuksa bezpośrednio z partycji DOS
[ * ] VFAT (Windows-95) fs support
Dostęp do partycji FAT z długimi nazwami plików
[ * ] ISO 9660 CDROM filesystem support
Zaznaczamy jeżeli chcemy korzystać z CD-ROMu
[ * ] Microsoft Joliet CDROM extisions
Rozszerzenie standardu ISO 9660, pozwalające na korzystanie z długich nazw w formacie
unicode
[ ] NTFS filesystem support (read-only)
Opcja pozwala na odczyt z partycji Windows NT
[ * ] /proc filesystem support
Utworzenie wirtualnego systemu plików w katalogu /proc, do którego jądro zapisuje
informacje o działalności systemu
[ * ] /dev/pts filesystem for UNIX98 PTYs
Zaznaczamy tę opcję jeśli zaznaczyliśmy UNIX98 PTY support
[ * ] Second extended fs support
Obsługa standardowego systemu plików Linuksa ext-2
Network File System ->
Menu z opcjami do obsługi sieciowych systemów plikowych.
Native Language Support ->
Menu do ustawienia obsługi języka i kodowania znaków
15. Console drivers
[ * ] VGA text console
Umożliwia korzystanie z Linuksa w trybie tekstowym
[ ] Video mode selection support
Opcję zaznaczamy gdy posiadamy kartę, która pozwala na ustawienie niestandardowych
rozdzielczości ekranu
16. Sound
[ M ] Sound card support
Zaznaczamy jeżeli mamy kartę dźwiękową
Additional low level sound drivers ->
W poszczególnych opcjach ustawiamy rodzaj karty i jej konfigurację
17. Kernel hacking
[ ] Magic SysRq key
Opcja dla ludzi zajmujących się rozwojem i testowaniem jądra.
Daje więcej kontroli nad systemem podczas jego zawieszenia lub debuggowania
Po skonfigurowaniu jądra systemu należy zapisać naszą konfigurację, co spowoduje
utworzenie pliku .config z odpowiednimi opcjami.
61) Kompilacja i instalacja nowego jądra
Kompilacja nowego jądra ogranicza się do wydania trzech poleceń :
make dep - sprawdza pewne zależności
make clean - usuwa niepotrzebne pliki ze źródeł
make bzImage lub make bzlilo lub make zImage lub make zlilo
bzImage - kompiluje nasze jądro tworząc jego skompresowany
obraz. Skompresowane jądro odkompresowuje się automatycznie w czasie wykonywania
bzlilo - kompiluje i instaluje nasze jądro automatycznie
zImage - zwykła kompilacja jądra (już raczej nie stosowana)
zlilo - kompiluje i instaluje nasze jądro automatycznie
Skompilowane jądro możemy znaleźć w katalogu :
/usr/src/linux/arch/i386/boot/zImage
lub
/usr/src/linux/arch/i386/boot/bzImage
Następnym krokiem jest kompilacja i instalacja modułów, którą wykonujemy
poleceniami :
make modules
make modules_install
Skompilowane moduły zostaną skopiowane do katalogu :
/lib/modules/numer_wersji
Jeśli kompilowane jądro posiada numer wersji identyczny z
numerem jądra skompilowanego już wcześniej, należy przed instalacją modułów
usunąć z tego katalogu całą jego zawartość.
Instalacja nowego jądra polega na skopiowaniu obrazu jądra do odpowiedniego katalogu
i skonfigurowaniu programu ładującego system.
Obraz naszego jądra kopiujemy z katalogu :
/usr/src/linux/arch/i386/boot/bzImage lub /usr/src/linux/arch/i386/boot/zImage
do katalogu :
/boot/wersja_jądra/
i zmieniamy nazwę na :
vmlinuz.numer_nowej_wersji
Następnym krokiem, który musimy wykonać jest skopiowanie pliku wskazującego na
jądro :
/usr/src/linux/System.map
do katalogu z obrazem naszego jądra :
/boot/wersja_jądra/
W przypadku takich samych numerów jądra, stare jądro nie
powinno zostać nadpisane, gdyż nowe jądro nie zawsze może działać tak, jak tego
sobie życzymy.
Domyślnym programem ładującym system jest program LILO.
Plikiem konfiguracyjnym tego programu jest plik : /etc/lilo.conf
, a przykładowa konfiguracja umożliwiająca wybór jednego z dwóch jąder może
wyglądać następująco :
boot=/dev/hda
map=/boot/map
vga=normal
default=windows
keytable=/boot/pl.klt
prompt
nowarn
timeout=100
message=/boot/message
menu-scheme=wb:bw:wb:bw
ignore-table
image=/boot/2.4.19/vmlinuz
label=linux-2.4.19
root=/dev/hda1
initrd=/boot/2.4.19/initrd.img
append="devfs=mount hdc=ide-scsi"
read-only
image=/boot/2.5.69/vmlinuz
label=linux-2.5.69
root=/dev/hda1
append="devfs=mount hdc=ide-scsi"
read-only
other=/dev/fd0
label=floppy
unsafe
stniej możliwość automatycznego skompilowania i zainstalowania nowego jądra
systemu poprzez polecenie :
make bzlilo
lub
make zlilo
Najwygodniejszym sposobem kompilacji i instalacji nowego jądra jest wydanie komendy :
make dep clean bzlilo modules modules_install
polecenie to spowoduje wykonanie następujących czynności :
- wygenerowanie plików zależności
- usunięcie zbędnych plików
- utworzenie skompilowanej wersji jądra
- zmianę nazwy pliku /vmlinuz na /vmlinuz.old i skopiowanie nowego jądra do pliku
/vmlinuz
- uruchomienie programu lilo i instalacja nowego obrazu jądra
- kompilację wszystkich modułów i instalację ich w odpowiednim katalogu
62) Moduły jądra
Moduły jądra doskonale odchudzają naszą pamięć dzięki temu, że mogą one być
załadowane tylko w razie potrzeby i usunięte, gdy nie są już potrzebne.
Na przykład :
jeśli obsługę interfejsu PPP mamy skompilowaną, jako ładowalny moduł jądra systemu,
to tylko podczas zestawiania połączenia internetowego ładowane są do pamięci
wszystkie potrzebne sterowniki. Po zamknięciu połączenia jądro usuwa z pamięci dany
moduł.
Dzięki modułom możemy także dodać obsługę nowego sprzętu bez rekompilacji
całego jądra.
Wszystkie moduły, które możemy w każdej chwili wykorzystać znajdują się w
katalogu :
/lib/modules/
Modułami możemy swobodnie operować za pomocą następujących poleceń :
lsmod - wyświetla listę załadowanych modułów
insmod - ładuje moduły do uruchomionego jądra
rmmod - usuwa załadowany moduł
depmod - sprawdza wszystkie zależności pomiędzy modułami
modprobe - ładuje wszystkie moduły, od których zależny jest
dany moduł
63) Konfiguracja sieci
W systemie Linuks sieć jest w podstawowym zakresie konfigurowana już podczas
instalacji. Wszystkie dane konfiguracyjne są przechowywane w katalogu /etc/
i jego podkatalogach.
Dużą dogodnością jest fakt, że Linuks, podobnie jak inne systemy Unixowe może być
konfigurowany w czasie pracy, bez konieczności restartowania systemu, co znacznie
upraszcza eksperymentowanie i poprawianie problemów konfiguracyjnych.
Najważniejsze pliki konfiguracyjne odpowiadające za działanie sieci to :
- /etc/sysconfig/network
- /etc/HOSTNAME
- /etc/hosts
- /etc/services
- /etc/host.conf
- /etc/resolv.conf
/etc/sysconfig/network
Plik network zawiera podstawowe informacje o konfiguracji sieci, takie jak :
NETWORKING
HOSTNAME
DOMAINNAME
GATEWAY
GATEWAYDEV
|
<YES> jeśli nasz host pracuje w sieci lub <NO> jeśli nie
<nazwa hosta>
<nazwa domeny>
<adres bramy sieciowej>
<nazwa urządzenia, które obsługuje bramę sieciową> |
/etc/HOSTNAME/
Plik ten powinien zawierać tylko jeden wpis, określający główną nazwę naszego
hosta .
/etc/hosts
Plik hosts zawiera odwzorowania adresów IP na nazwy komputerów, jak również aliasy
tych nazw.
W praktyce plik ten wykorzystywany jest tylko wtedy, gdy nasza sieć nie posiada własnego
serwera nazw (DNS).
Każdy wiersz tego pliku powinien składać się z następujących rekordów :
IP nazwa_hosta
np.:
192.168.1.12 stacja1
/etc/services
Plik services zawiera odwzorowania nazw usług sieciowych na numery portów
wykorzystywanych przez komputer do obsługi danej usługi. Plik ten składa się z
wierszy, z których każdy jest jednym rekordem informacji.
Każdy rekord składa się z trzech pól :
nazwa port/protokół aliasy # komentarz
np.:
www 80/tcp http
# WWW
gdzie :
nazwa - oznacza słowo reprezentujące opisywaną usługę
port - jest numerem określający numer portu, pod którym będzie
dostępna dana usługa
protokół - nazwa protokołu TCP lub UDP
aliasy - określają inne nazwy, pod którymi będzie dostępna
usługa
/etc/host.conf
Plik host.conf zawiera dane o kolejności, w jakiej system powinien odpytywać różne
systemy tłumaczeń nazw (DNS, NIS) przy rozwiązywaniu nazwy sieciowej.
Plik ten może składać się z następujących dyrektyw :
order - określa kolejność przepytywania systemów
tłumaczeń nazw i może składać się z następujących opcji :
bind (DNS), hosts ( /etc/hosts), nis (NIS)
multi - określa, czy zapytanie kierowane do systemu
rozwiązywania nazw zwraca tylko jeden wynik - off, czy może
zwrócić ich kilka - on
/etc/resolv.conf
Plik resolv.conf jest plikiem konfiguracyjnym klienta DNS.
Określa on kolejność przeszukiwania domen i zawiera adresy serwerów nazw.
Najczęściej przy konfiguracji tego pliku stosuje się trzy słowa kluczowe :
nameserver - określa adres serwera DNS
domain - określa nazwę domeny, do której należy komputer
search - określa kolejność przeszukiwania domen
64) Konfiguracja interfejsów sieciowych
Aby komputery mogły porozumiewać się poprzez sieć muszą mieć skonfigurowane
interfejsy sieciowe. Konfiguracja interfejsu polega na przypisaniu karcie sieciowej
(interfejsowi) odpowiedniego adresu IP, włącznie z adresem i maską sieci, w której ta
karta będzie pracować.
W systemie Linuks wszystkie interfejsy sieciowe mają nazwy składające się z jednego
z członów:
eth - Ethernet
tr - Token Ring
ppp - Point-to-Point Protocol
i są numerowane przez jądro systemu w kolejności ich konfigurowania, zaczynając od
zera.
Do konfiguracji interfejsów sieciowych możemy użyć plecenia ifconfig
o składni :
ifconfig interfejs adres_ip netmask <maska sieci> broadcast
<adres_rozgłoszeniowy>
ifconfig eth0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255
Interfejs może zostać czasowo wyłączony i ponownie uaktywniony bez konieczności
ponownej konfiguracji.
Do wyłączenia i włączenia interfejsów służą polecenia :
ifconfig interfejs down - wyłącznie interfejsu
ifconfig interfejs up - uruchomienie interfejsu
65) Instalacja serwera WWW (APACHE)
Serwer Apache możemy zainstalować na dwa sposoby :
- poprzez pakiet RPM
- kompilując źródło z kodem serwera (metoda dla bardziej
zaawansowanych użytkowników)
Instalacja z RPM
Pakiet RPM z serwerem można znaleźć na jednej z płyt CD, z których instalowany
był system.
Instalację można przeprowadzić programem rpm :
rpm -ivh apache.rpm
Pliki z pakietu RPM są instalowane w następujących katalogach :
/etc/httpd/conf - katalog ten zawiera wszystkie pliki
konfiguracyjne
/etc/rc.d - RPM instaluje tutaj wszystkie potrzebne skrypty do
automatycznego lub ręcznego uruchamiania serwera
/home/httpd - w tym katalogu instalowane są wszystkie ikony,
skrypty CGI i pliki HTML używane przez serwer
/usr/bin - tu znajdują się pliki wykonywalne serwera wraz z
wieloma narzędziami służącymi do obsługi serwera
/var/log/http - w tym katalogu znajdują się pliki z
dziennikami zdarzeń
Kompilacja źródeł
W pierwszej kolejności należy uruchomić skrypt ./configure
wraz z opcją --prefix, dzięki której można przekazywać do skryptu
różne parametry, np. położenie wraz z nazwą katalogu, w którym zostanie
zainstalowany Apache :
./configure -prefix=/katalog/instalacyjny
Uruchomienie tego skryptu spowoduje powstanie w katalogu /src/
plików Configuration i Makefile.
Teraz wydajemy polecenia make, makeinstall
i nasze pliki serwera zostaną skompilowane i zainstalowane.
66) Uruchamianie i zatrzymywanie
serwera APACHE
Proces uruchamiania serwera httpd może być wykonywany
ręcznie lub automatycznie. Uruchamianie Apacha z linii poleceń pozwala na zmianę
domyślnie ustawionych parametrów, takich jak położenie plików konfiguracyjnych.
Składnia polecenia httpd jest następująca :
httpd [-d katalog] [-f pliki] [-C dyrektywa] [-v] [-V] [-h] [-l] [-L]
[-S] [-t]
gdzie :
-d - określa położenie katalogu ServerRoot (położenie
głównego katalogu z zainstalowanym serwerem)
-f - określa położenie głównego pliku konfiguracyjnego,
httpd.conf . Serwer podczas uruchamiania czyta i wykonuje dyrektywy, znajdujące się
właśnie w tym pliku
-v - parametr ten powoduje wyświetlenie wersji Apache, nie
uruchamiając serwera
-V - parametr ten powoduje wyświetlenie wszystkich ustawień
obowiązujących w chwili kompilacji serwera
-h - wyświetla informacje o sposobie użycia polecenia httpd
-l - wyświetla listę modułów włączonych do kodu serwera w
trakcie kompilacji
-L - wyświetla listę dyrektyw konfiguracyjnych wraz z
informacją, z którego modułu pochodzi dana dyrektywa
-s - opcja ta powoduje wyświetlenie ustawień serwerów
wirtualnych pobranych z pliku konfiguracyjnego
-t - opcja ta powoduje przeanalizowanie wszystkich plików
konfiguracyjnych serwera bez uruchamiania Apacha
Jeśli chcemy, aby nasz serwer uruchamiał się automatycznie podczas startu systemu
należy umieścić specjalny skrypt httpd w katalogu /etc/rc.d/init.d/
.
Dzięki opcjom tego skryptu można kontrolować działanie serwera :
start - system używa tej opcji do uruchomienia usługi podczas start
systemu.Opcja ta jest również dostępna dla użytkownika ROOT
stop - opcja ta jest wykorzystywana do bezpiecznego zamknięcia usługi -
powinno się jej używać zamiast polecenia kill
reload - opcja ta powoduje ponowne odczytanie pliku konfiguracyjnego bez
zamknięcia serwera
restart - rezultat wywołania skryptu z tą opcją jest taki, jak
uruchomienie skryptu z opcją stop a następnie z opcją start
status - rezultatem wywołania tej opcji jest wyświetlenie
identyfikatora PID serwera i wszystkich jego procesów potomnych
67) Konfiguracja serwera APACHE
Konfiguracja pracy serwera polega na uaktywnianiu pewnych dyrektyw, które w zasadzie
są poleceniami ustawiającymi konkretną opcję.
Dyrektywy konfiguracyjne mają zazwyczaj taką samą składnię :
dyrektywa opcja opcja ...
W jednej linii można umieścić tylko jedną dyrektywę.
Dzięki dyrektywom można określać złożone opcje lub ustawić tylko konkretną
wartość.
Niektóre dyrektywy zwane sekcjami mają budowę typu :
<dyrektywa opcja>
dyrektywa opcja opcja
dyrektywa opcja opcja
</dyrektywa>
Głównym i najważniejszym plikiem konfiguracyjnym serwera jest plik httpd.conf.
W pliku tym możemy umieścić wszystkie dyrektywy potrzebne do prawidłowego działania
serwera.
Najważniejsze dyrektywy konfiguracyjne to :
ResourceConfig /dev/null
AccessConfig /dev/null
W pierwszych wersjach serwera dyrektywy konfiguracyjne były umieszczane dodatkowo w
dwóch plikach : srm.conf i acces.conf
. Dyrektywy te nakazują serwerowi zignorowanie tych plików, gdyż cała konfiguracja
serwera zawarta jest w jednym pliku : httpd.conf .
ServerType
Dzięki tej dyrektywie można ustawić dwa typy pracy naszego serwera : standalone,
inetd .
Ustawienie typu serwera na standalone spowoduje, że nasz serwer będzie
utrzymywany przez system przez cały czas w gotowości do obsłużenia każdej prośby.
Opcja inetd spowoduje, że w reakcji na pojawiającą się prośbę
zostanie uruchomiony oddzielny serwer i po jej obsłużeniu zostanie wyłączony.
ServerRoot
Dyrektywa ta określa najwyższy katalog drzewa katalogów, względem którego
określane będą lokalizacje plików konfiguracyjnych i dzienników.
Port
Wskazujemy port, na którym nasz serwer będzie prowadził nasłuchiwania.
Domyślnie przyjmowanym portem jest port 80.
Listen
Możemy dokonać powiązania z określonym portem (lub adresem IP), na którym serwer
będzie prowadził nasłuchiwanie.
User
Group
Dyrektywa ta wskazuje na użytkownika i grupę, których własnością będzie proces httpd
.
Przed ustawieniem tych opcji należy upewnić się, że podany użytkownik i grupa
posiadają wpisy w plikach passwd i group.
Należy być świadomym tego, że nasz serwer będzie pracował z prawami podanego
użytkownika i grupy co oznacza, że w przypadku włamania do systemu poprzez serwer lub
jeden z programów CGI włamywacze dostaną właśnie te prawa.
ServerAdmin
Opcja ta powinna wskazywać na adres internetowy administratora serwera.
ServerName
Opcją tą ustalamy nazwę serwera zwracaną klientowi, jeśli rożni się ona od nazwy
podanej w zadaniu . Nazwa ta musi być zgodna z nazwą podaną na serwerze DNS.
StartServers
Dyrektywą tą określamy liczbę serwerów uruchamianych podczas startu Apache.
MaxClients
Jest to maksymalna liczba klientów, którzy mogą być obsłużeni w tym samym czasie.
Jeśli limit ten zostanie przekroczony, to obsługa nadmiarowych klientów będzie
wstrzymana, co umożliwia ochronę systemu przed załamaniem w wyniku przeciążenia
serwera.
MinSpareServers
MaxSpareServers
Dyrektywy te regulują liczbę zapasowych procesów potomnych serwera - aby serwer
mógł dynamicznie dostosować się do obciążenia.
Oznacza to, że serwer utrzymuje potrzebną liczbę procesów do obsłużenia połączeń
i kilka dodatkowych do obsługi gwałtownego wzrostu obciążenia.
Osiąga się to przez okresowe sprawdzanie liczby serwerów, oczekujących na wywołanie,
i jeśli liczba ta jest mniejsza niż MinSpareServers, to dodaje
zapasowe, a jeśli wolnych serwerów jest więcej niż MaxSpareServers,
to część z nich jest likwidowana.
Timeout
Opcją tą określamy limit czasu przeznaczony na obsługę pojedyńczego żądania.
KeepAlive
Dyrektywą tą możemy zezwolić na obsługę wielu zadań w ramach jednego
połączenia.
MaxKeepAliveRequests
Określamy maksymalną liczbę zadań w ramach jednego połączenia.
KeepAliveTimeout
Określamy czas oczekiwania na kolejne zadanie w ramach tego samego połączenia.
MaxRequestsPerChild
Dyrektywą tą możemy określić maksymalna liczbę żądań obsługiwanych w cyklu
życia procesu potomnego.
UseCanonicalName
Włączenie tej opcji nakazuje serwerowi, by w przypadku odwołań wskazujących na
siebie tworzył adres URL na podstawie wartości z ServerName i Port.
Jeśli opcja ta jest wyłączona, adresy URL tworzone są na podstawie nazwy hosta i
numeru portu pobranego z żądania.
DocumentRoot
Dyrektywa ta powinna zawierać ścieżkę do katalogu zawierającego katalog główny
serwisu WWW, skąd będą pobierane dokumenty do wysłania klientowi.
Zawartość tego katalogu używana jest domyślnie do obsługi wszelkich zadań.
UserDir
Dyrektywa ta określa podkatalog katalogu macierzystego użytkownika w przypadku
odwołania do adresu zawierającego ciąg ~użytkownik, w którym może
on umieszczać publiczne dokumenty HTML .
DirectoryIndex
W dyrektywie tej znajdują się nazwa pliku lub plików zawierających indeks katalogu,
czyli pliki, które zostaną wysłane użytkownikowi w odpowiedzi na żądanie dostępu do
adresu.
IndexIgnore
Umożliwia określenie nazwy plików, które będą ignorowane podczas indeksowania
katalogu.
FancyIndexing
Dyrektywa ta umożliwia włączenie dodatkowych opcji indeksowania katalogów.
AddIconByType
AddIcon
Opcją tą informujemy serwer, które ikony będą reprezentowały pliki o określonych
typach lub rozszerzeniach.
Ikony wyświetlane są gdy włączymy - FancyIndexind.
DefaultIcon
Opcja ta określa domyślną ikonę dla plików, którym nie przypisano jej jawnie
poprzez ustawieni opcji w AddIconByType i AddIcon.
LoadModule
AddModule
Aby móc używać modułów skompilowanych jako DSO, należy je załadować, a
następnie dodać do serwera. Kolejność ładowania modułów jest istotna.
Najważniejsze moduły to :
core - zawiera podstawowe funkcje zawsze dostępne w dystrybucji
(kontrolują również inne moduły)
mod_access - kontrola dostępu do plików w zależności od adresu IP
lub nazwy komputera klienta. Użycie tego modułu pozwala na dokładną kontrolę
użytkowników np.:administrator może zezwolić na wykonywanie skryptów CGI tylko
pracownikom firmy
mod_actions - odpowiada za wykonywanie skryptów CGI w zależności od
typu danych lub sposobu pobrania
mod_alias - pozwala mapować (udostępniać) część systemu plików
w katalogu głównym Apache-a, umożliwia też przekierowywanie adresów URL. Część
plików może znajdować się poza katalogiem lub nawet na innym komputerze w sieci
mod_asis - deklaracja plików, które mogą być wysyłane bez
nagłówków HTTP (pliki *.asis)
mod_auth - moduł odpowiedzialny za uwierzytelnianie użytkowników na
podstawie zdefiniowanych plików tekstowych
mod_auth_anon - pozwala anonimowym użytkownikom na dostęp do danych,
podlegających weryfikacji dostępu
mod_auth_db - uwierzytelnianie za pomocą plików DB
mod_auth_dbm - uwierzytelnianie za pomocą plików DBM
mod_autoindex - automatyczne tworzenie indeksów dla katalogów,
które nie mają
standardowych plików index.*htm*
mod_cern_meta - emulacja plików CERN HTTPD pozwala dodawać dodatkowe
nagłówki do wszystkich plików
mod_cgi - prawdopodobnie najpopularniejszy moduł. Pozwala wykonywać
skrypty CGI po stronie serwera i zwracać wyniki klientowi
mod_digest - uwierzytelnianie za pomocą algorytmu MD5
mod_dir - podstawowe operacje na katalogach. Zwykle używany do
uzupełniania adresu np.: http://serwer.pl/plik zostanie zastąpiony poprawnym wywołaniem
http://serwer.pl/plik/
mod_env - moduł odpowiedzialny za przekazywanie zmiennych
środowiskowych do skryptów CGI/SSI
mod_example - demonstracja możliwości interfejsu programowego -
Apache API
mod_expires - dodaje znacznik Expires (strona wygasa, traci
ważność) do stron WWW przesyłanych klientowi - ważne dla często zmienianych
serwisów, które powinny być zawsze aktualne
mod_headers - pozwala na dowolną modyfikację nagłówków HTTP
mod_imap - wsparcie dla map plików graficznych (.map) używane po
stronie serwera WWW
mod_include - pozwala włączyć zawartość plików lub wyniki
działania skryptu do zwykłych plików HTML i zwracać ich zawartość klientowi
mod_info - odpowiedzialny za informację o ustawieniach serwera Apache
mod_log_agent - zapisywanie w logach nazw i wersji przeglądarek
internetowych klientów
mod_log_config - konfigurowalne logowanie zdarzeń - pliki log
zapisywane są w formacie Common Logfile Format
mod_log_referer - logowanie odwołań do plików umieszczonych na
serwerze
mod_mime - określenie typu pliku na podstawie rozszerzenia
mod_mime_magic - określenie typu pliku na podstawie kilku bajtów
jego zawartości
mod_mmap_static - pozwala określić pewne niezmienne pliki, które
zostaną umieszczone w pamięci serwera Apache w celu szybszego dostępu
mod_negotiation - odpowiedzialny za uzgadnianie najlepszej
reprezentacji danych w przeglądarce klienta. Wprowadzony ze względu na zgodność z
HTTP/1.1
mod_proxy - Apache staje się serwerem proxy dla stron WWW,
przyspiesza dostęp do często używanych danych, gdy serwer WWW jest wykorzystywany do
zapamiętywania danych
mod_rewrite - moduł o ogromnych możliwościach. Pozwala modyfikować
adresy URL w "locie" za pomocą wyrażeń regularnych
mod_setenvif - pozwala modyfikować zmienne środowiskowe na podstawie
wywołania
mod_so - moduł eksperymentalny. Powoduje ładowanie dodatkowych
modułów podczas działania serwera
mod_speling - moduł odpowiedzialny za poprawianie błędów w
adresach URL
mod_status - wyświetla bieżący stan serwera Apache
mod_userdir - ustawienia dotyczące katalogów domowych użytkowników
mod_unique_id - generuje unikalny identyfikator dla każdego żądania
mod_usertrack - śledzenie zachowań użytkowników za pomocą Cookies
(tzw. ciasteczka), szczególnie przydatne dla np. stałych klientów w sklepach
internetowych lub do określania preferencji użytkownika
mod_vhost_alias - moduł wykorzystywany przy konfiguracji serwerów
wirtualnych
ReadmeName
HeaderName
Dyrektywy te określają nazwy plików zawierających stopkę i nagłówek dołączony
na końcu i początku indeksu katalogu.
ScriptAlias
Opcja ta określa, w którym katalogu będą znajdować się skrypty serwera
(zawartość katalogu traktowana jest, jako aplikacje).
AddHandler cgi-script .cgi
Opcja zezwalająca na używanie skryptów CGI.
AddHandler server-parsed .shtml
Opcja zezwalająca na używanie poleceń SSI w dokumentach HTML.
AddHandler send-as-is asis
Zezwalamy serwerowi na przesyłanie dokumentów w postaci niezmodyfikowanej.
AddHandler imap-file map
Zezwalamy na używanie map graficznych, interpretowanych po stronie serwera.
AddHandler type-map var
Zezwalamy na wykorzystywanie map typów.
TypesConfig
Dyrektywa ta służy do wskazywania lokalizacji plików: mime types.
DefaultType
Wskazujemy domyślny typ MIME używany w przypadku niemożności jego określenia.
Jeśli serwer przechowuje głównie dokumenty tekstowe HTML, to najlepiej użyć wartości
"text/plain", jeśli natomiast udostępniane pliki są w większości binarne,
to lepiej użyć "aplication/octet-stream", co pozwoli zabezpieczyć
przeglądarki przed próbami wyświetlania zawartości plików binarnych w postaci
tekstowej.
AddType
Pozwala na dodanie nowego typy MIME bez konieczności modyfikowania pliku mime types.
AddLanguage
Dyrektywa ta pozwala na obsługę wielu wersji językowych dokumentów, co pozwoli na
dostarczenie przeglądarce dokumentu w żądanym przez nią języku.
LanguagePriority
Określa priorytet wersji językowej w przypadku braku rozstrzygnięcia podczas
negocjacji zawartości. Lista powinna zawierać kody języków w kolejności malejących
priorytetów.
AddEncoding
Dyrektywa ta daje możliwość przeglądarkom na rozpakowywanie danych w locie.
AccessFileName
Opcją tą wskazujemy na plik odpowiedzialny za ustawienie kontroli dostępu do
katalogu.
ProxyRequests
Dyrektywą tą ustawiamy nasz serwer, jako serwer pośredniczący.
Alias /alias/ "/prawdziwa nazwa/"
Dyrektywa ta umożliwia nam zdefiniowanie dowolnej liczby aliasów dla katalogów.
Zawartość katalogu określonego za pomocą tej dyrektywy traktowana jest, jak dokument,
a nie aplikacja.
ErrorLog
Określenie położenia pliku dziennika błędów.
LogLevel
Dyrektywa ta ustala ilość informacji rejestrowanych w pliku error_log.
Możliwe opcje tej dyrektywy to : debug, info, notice, warn, error,
critic, alert, emerq.
CustomLog
Określamy położenie pliku dziennika transakcji : rejestrowanie informacji o typie
przeglądarki i adresie źródłowym odwołania.
LogFormat
Dzięki tej opcji możemy ustalić wzorce formatów dla dyrektywy CustomLog.
HostnameLookups
Dzięki tej dyrektywie możemy nakazać serwerowi, aby rejestrował nazwy klientów (on)
lub tylko ich adresy (off).
PidFile
Dyrektywa ta zawiera nazwę pliku, do którego serwer podczas startu zapisze swój PID.
ScoreBoardFile
Określa plik do zapisywania wewnętrznych informacji o procesach potomnych serwera.
ErrorDocument
Ta dyrektyw może zawierać komunikaty o błędach serwera. Jako opcja może być
również podany adres strony, która wyświetli informacje o błędzie.
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response
Opcje te ustawiają blokadę podtrzymywania połączenia w przypadku komunikacji z
przeglądarką Netscape 2.x (implementacja ta zawiera błędy).
Druga dyrektywa przeznaczona jest dla programu Internet Explorer 4.0b2, który posiada
błędy w obsłudze podtrzymywania połączenia po otrzymaniu odpowiedzi 301,302.
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
Powyższe dyrektywy wymuszają wysyłanie odpowiedzi w protokole HTTP/1.1 opatrzonych
nagłówkiem HTTP/1.0 na użytek przeglądarek niewłaściwie interpretujących dane w tym
protokole.
Dla każdego katalogu i jego podgatalogów, do którego Apache ma dostęp można
określić zestaw dostępnych w nim praw, usług i funkcji. Służy do tego sekcja :
<Directory /
katalog_do_którego_będą_odnosić_się_ustawienia>
dyrektywy
</Directory>
składająca się z następujących dyrektyw :
Options - dyrektywa ta może przyjmować następujące opcjie:
None - żadna z dostępnych opcji nie zostanie włączona w tym
katalogu
All - wszystkie dostępne opcje (poza MultiViews) są włączone w
tym katalogu
Indexes - w przypadku braku pliku podanego dyrektywą
DirectoryIndex zostanie wyświetlona lista plików w tym katalogu (w postaci strony HTML)
FollowSymLinks - pozwala na dostęp do katalogu poprzez
dowiązania symboliczne
ExecCgi - daje możliwość wykonywania w tym katalogu skryptów
CGI, nawet jeśli nie jest to katalog określony dyrektywą ScriptAlias,
MultiView - kiedy na serwerze nie ma pliku, o który prosi klient,
serwer próbuje zgadnąć, który dokument najbardziej pasuje do prośby klient
AllowOverride - dyrektywa ta określa, które parametry
konfiguracji głównej można zmieniać dla podkatalogów za pomocą plików .htaccess.
Dyrektywa AllowOverride składa się z następujących opcji :
Options - plik .htaccess może
zmieniać opcje nie wymienione w dyrektywie Options dla danego
katalogu
FileInfo - plik .htaccess może
zawierać dyrektywy modyfikujące typ informacji dokumentu
AutoConfig - plik .htaccess może
zawierać dyrektywy odpowiedzialne za autoryzację dostępu
Indexes - plik .htaccess może zawierać
dyrektywy sterujące indeksowaniem katalogów
Limit - plik .htaccess może zawierać
dyrektywy allow, deny i order,
order - określa, jakie prawa
dostępu można nadać katalogowi
allow - dostęp do katalogu jest
możliwy
deny - dostęp do katalogu jest
zabroniony
allow from all lub deny from all -
określa, kogo obowiązują dane prawa.
Przykładowy plik konfiguracyjny : httpd.conf
68) Serwery wirtualne (APACHE)
Serwery wirtualne są jedną z bardziej popularnych usług dostarczanych przez serwer
Apache. Dzięki odpowiedniej konfiguracji kilku dyrektyw można stworzyć praktycznie
nieograniczoną liczbę serwerów WWW, znajdujących się na tym samym fizycznym serwerze,
posiadających własne unikalne nazwy i przechowujących swoje dane w odrębnych
katalogach .
Serwer Apache dostarcza dwóch sposobów tworzenia hostów wirtualnych.
Możemy posiadać tylko jeden adres IP z wieloma rekordami CNAME
umieszczonymi na serwerze DNS, które będą wskazywały właśnie na ten adres lub druga
możliwość, to stworzenie tylu serwerów, ile mamy dostępnych adresów (jeden serwer
przyporządkowany jednemu interfejsowi).
Serwery wirtualne identyfikowane nazwami domenowymi
Konfiguracja serwera identyfikowanego nazwami domenowymi umożliwia uruchomienie wielu
hostów wirtualnych na tym samym fizycznym serwerze, któremu przyporządkowany jest tylko
jeden adres IP (jeden adres IP wiele serwerów WWW).
Aby było to możliwe należy umieścić na serwerze DNS dodatkowe nazwy dla naszego
serwera za pomocą rekordu CNAME. Wówczas gdy klient HTTP wyśle żądanie skierowane do
serwera, wysyła wraz z nim zmienną określającą nazwę serwera, do którego żądanie
jest adresowane. To właśnie w oparciu o tę zmienną serwer określa, do którego
wirtualnego hosta ma przekazać żądanie.
Przed głównymi blokami konfigurującymi hosty wirtualne należy dodać dyrektywę :
NameVirtualHost IP_naszego_serwera
dzięki której określimy, który adres IP ma być skojarzony z więcej niż jedną
nazwą.
Dla każdej nazwy obsługiwanej przez ten serwer należy stworzyć osobny blok dyrektyw w
postaci :
<VirtualHost IP_naszego_serwera >
ServerName nazwa_hosta_1.nasza_domena
SerwerAlias alias1, alias2
DocumentRoot /ścieżka_do_katalogu_hosta_1/
TransferLog /ścieżka_do_katalogu_hosta_1/logs/acces_log
ErrorLog / ścieżka_do_katalogu_hosta_1/logs/error_log
</VirtualHost>
<VirtualHost IP_naszego_serwera >
ServerName nazwa_hosta_2.nasza_domena
SerwerAlias alias1, alias2
DocumentRoot /ścieżka_do_katalogu_hosta_2/
TransferLog /ścieżka_do_katalogu_hosta_2/logs/acces_log
ErrorLog / ścieżka_do_katalogu_hosta_2/logs/error_log
</VirtualHost>
W blokach konfiguracyjnych pojawia się dyrektywa SerwerAlias .
Dyrektywą tą możemy określić aliasy dla nazwy naszego serwera wirtualnego, dzięki
czemu użytkownicy będą mogli używać skróconej nazwy hosta, np.:
zamiast
http://nazwa_hosta_1.nasza_domena/
można użyć nazwy
http://alias1/
Wewnątrz bloku <VirtualHost> </VirtualHost>
możemy podawać dowolne dyrektywy konfiguracyjne, które zostały omówione w poprzednich
rozdziałach oprócz dyrektyw :
ServerType, StartServers, MaxSpareServers, MinSpareServers,
MaxRequestsPerChild, BindAddress, Listen, PidFile, TypesConfig, ServerRoot .
Jeśli planujemy uruchomienie na naszym serwerze większej ilości hostów wirtualnych,
dobrym rozwiązaniem jest umieszczenie wszystkich komunikatów w jednym pliku dziennika
błędów, zamiast w osobnych plikach. Dzięki temu rozwiązaniu unikniemy wyczerpania
się systemowego limitu liczby deskryptorów plików (zwykle 64 dla jednego procesu), co
mogłoby spowodować brak wpisów w dziennikach lub długi czas oczekiwania na odpowiedź
serwera po pojawieniu się żądania HTTP.
Serwery wirtualne identyfikowane adresami IP
Konfiguracja tego typu serwerów jest dobrym rozwiązaniem, jeśli posiadamy dużą
pulę adresów publicznych. Wówczas każdemu interfejsowi w naszym systemie możemy
przypisać jeden adres IP.
Konfiguracja tego typu serwerów jest adekwatna do konfiguracji serwerów
identyfikowanych nazwami domenowymi, z wyjątkiem braku dyrektywy NameVirtualHost.
Jeśli skonfigurowaliśmy poprawnie interfejsy sieciowe, to uruchomienie hostów
wirtualnych ogranicza się do dodania w pliku httpd.conf kilku
prostych dyrektyw w postaci :
<VirtualHost adres_IP_dla pierwszego_hosta_1 >
ServerName www.nazwa_hosta_1.nasza.domena
DocumentRoot /ścieżka_do_katalogu_hosta_1/
TransferLog /ścieżka_do_katalogu_hosta_1/logs/acces_log
ErrorLog / ścieżka_do_katalogu_hosta_1/logs/error_log
</VirtualHost>
Podobne bloki należy dodać dla każdego uruchamianego serwera, nie zapominając o
zmianie ścieżek dostępu do ich katalogów.
69) Instalacja serwera FTP (PROFTPD)
Najnowsza wersja serwera ProFTPd znajduje się pod adresem : ftp://ftp.proftpd.org/distrib/
Mamy tu możliwość ściągnięcia źródeł lub gotowych paczek zawierających serwer
ftp.
Należy pamiętać, że kompilacja źródeł daje większe możliwości dostosowania
serwera do naszych potrzeb.
W katalogu, który powstanie po rozpakowaniu źródeł programu wydajemy polecenie :
./configure [opcje]
Najważniejsze opcje konfiguracyjne to :
--prefix=/ścieżka - miejsce, w które zostanie zainstalowny
nasz serwer ftp
--with-modules=mod_moduł1:mod_moduł2:... - dodanie modułów
:
mod_pam - obsługa PAM (umożliwia
obsługę użytkowników nie tylko jako anonymous)
mod_ratio - włączenie ratio
mod_readme - pozwala na obsługę plków
README itp.
mod_ldap - obsługa LDAP
mod_sql - obsługa Sql
--sysconfdir=/ścieżka - położenie pliku konfiguracyjnego
(standardowo /usr/local/etc )
--localstatedir=/ścieżka - położenie plików dziennika
zdarzeń (standardowo /usr/local/var)
--enable-shadow - umożliwia korzystanie z pliku shadow
zawierającego hasła użytkowników
Przykładowo polecenie to może wyglądać następująco :
./configure --prefix=/usr/local/proftpd --enable-shadow
--with-modules=mod_pam
Kompilację i instalację dokonujemy poprzez polecenia :
make
make install
Jeśli serwer został skompilowany z modułem pam, należy skopiować
plik /contrib/ftpd.pamd na /etc/pam.d/ftp
Następnym krokiem jest stworzenie katalogu ftp :
mkdir /home/ftp
i nadanie mu odpowiednich praw :
chmod 755 /home/ftp
70) Uruchamianie i zatrzymywanie
serwera PROFTPD
Serwer ftp możemy uruchamiać na dwa sposoby :
- jako standalone - uruchamiany podczas startu systemu i
działający w nim przez cały czas
- jako intetd - uruchamiany przez specjalnego demona (inetd
lub xinetd) tylko do obsłużenia rządania
Jeśli chcemy aby serwer uruchamiał się jako standalone
należy na końcu pliku /etc/rc.d/rc.local umieścić linię ze ścieżką do naszego
serwera : /usr/local/sbin/proftpd.
Należy pamietać o wstawieniu znaku # przed linią odpowiadającą za
uruchamianie serwera w pliku inetd.conf lub wstawić dyrektywę disable = yes
w pliku z konfiguracją dla xinetd.
Aby serwer uruchamiany był tylko do obsługi przychodzących rządań (inetd) należy dodać odpowiednie wpisy do pliku
superserwera (inetd lub xinetd).
/etc/inetd.conf
ftp stream tcp nowait root /usr/sbin/proftpd proftpd
/etc/xinetd.conf
service ftp
{
flags = REUSE
socket_type = stream
instances = 50
wait = no
user = root
server = /usr/sbin/proftpd
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
71) Konfiguracja serwera PROFTPD
Konfiguracja serwera ProFTPd polega podbnie jak konfiguracja APACHA na ustawianiu
odpowiednich dyrektyw.
Plikie konfiguracyjny serwera jest plik : /usr/local/etc/proftpd.conf
Najważniesze dyrektywy konfiguracyjne to :
ServerType
typ serwera : standalone , inetd
ServerAdmin adres_administratora
Zawiera adres e-mailowy administratora.
ServerName "nazwa serwera"
Wyświetlana podczas logowania nazwa serwer.
User nazwa_użytkownika
Określa właściciela uruchomionego serwera.
Group nazwa_grupy
Określa grupę właściciela uruchomionego serwera.
MaxClients liczba_połączeń
Określa maksymalną liczbę obsługiwanych jednocześnie połączeń ftp.
TransferLog /ścieżka/plik
Okeśla miejsce zapisywania logów serwera dotyczących transferu plików.
Domyślnie : /var/log/xferlog
DefaultRoot /ścieżka/katalog
Określa katalog główny serwera.
Domyślnie : /
AuthUserFile /ścieżka/plik
Określa alternatywny plik passwd o identycznym formacie jak
systemowy plik /etc/passwd.
Dyrektywa ta umożliwia stworzenie osobnych kont ftp dla użytkowników nie posiadających
konta na serwerze.
Jeśli dyrektywa została podana to plik będzie używany do identyfikacji użytkowników.
Umask maska
Ustawia maskę z uprawnieniami dla nowo tworzonych plików i katalogów.
Wszystkie argumenty tej dyrektywy muszą być podane jako liczba ósemkowa, w formacie
0xxx. Opcjonalnie drugi argument może podawć maskę, która będzie używana w czasie
tworzenia katalogów. Gdy nie jest on podany to katalogi będą tworzone według maski
podanej dla plików.
Ósemkowy zapis praw dostępu :
Wartość
ósemkowa |
Znaczenie
|
0000 |
Nikt nie ma żadnych praw |
0001 |
Prawo właściciela do wykonywania pliku |
0002 |
Prawo właściciela do modyfikacji pliku |
0004 |
Prawo właściciela do czytania pliku |
0010 |
Prawo członków grupy do wykonywania pliku |
0020 |
Prawo członków grupy do modyfikacji pliku |
0040 |
Prawo członków grupy do czytania pliku |
0100 |
Prawo innych użytkowników do wykonywania pliku |
0200 |
Prawo innych użytkowników do modyfikacji pliku |
0400 |
Prawo innych użytkowników do czytania pliku |
1000 |
Ustawienie sticky bitu |
2000 |
Ustawienie bitu SGID |
4000 |
Ustawienie bitu SUID |
<Anonymous root-directory> </Anonymous>
Blok konfiguracyjny używany do udostępniania serwera ftp użytkownikom nie
posiadającym konta na serwerze - tzw. użytkownikom anonimowym.
Parametr root-directory określa katalog główny poza który nie wolno wyjść danym
użytkownikom.
<Directory /ścieżka/katalog> </Directory>
Blok konfiguracyjny umożliwiający zmianę ustawień danego katalogu.
<Limit komenda grupa_komend> </Limit>
Blok konfiguracyjny używany do określania szczegółowych restrykcji dotyczących
wykonywania komend ftp wysyłanych przez klienta.
Komendy :
CWD , CDUP - zmiana katalogu
MKD - tworzenie nowego katalogu
RNFR , RNTO - zmiena położenia pliku
między katalogami
DELE - kasowanie pliku
RMD - kasowanie katalogu
RETR - transfer pliku z serwera do klienta
STOR - transfer pliku od klienta do serwera
Grupa komendy :
READ - wszystkie komendy ftp wiążące
się z czytaniem pliku, np.: RETR, STAT
WRITE - wszystkie komendy ftp wiążące
się z zapisem, tworzeniem, kasowaniem, np.: MKD, RMD
DIRS - wszystkie komendy ftp wiążące się
z wyświetleniem zawartości katalogu, np.: LIST, NLST
ALL - wszystkie komendy ftp
Allow from [all , network , host , domain]
Dyrektywa ta jest używana wewnątrz bloku <Limit> i określa dla kogo będą
udostępnione odpowiednie komendy.
Domyślnie: allow all
Deny from [all , network , host , domain]
Dyrektywa ta jest używana wewnątrz bloku <Limit> i określa dla kogo będą
zabronione odpowiednie komendy.
AllowAll
Dyrektywa używana wewnątrz bloku <Limit> do udostępnienia wszystkim danej
komendy lub grupy komend.
DenyAll
Dyrektywa używana wewnątrz bloku <Limit> do zabronienia wszystkim danej komendy
lub grupy komend.
<VirtualHost adres> </VirtualHost>
Blok konfiguracyjny używany do tworzenia wydzielonych konfiguracji, które będą
stosowane w stosunku do różnych nazw hostów lub adresów IP (na tym samym komputerze).
Przykładowy plik konfiguracyjny : proftpd.conf
72) Instalacja serwera poczty elektronicznej
(POSTFIX)
Najnowszą wersję serwera możemy znaleźć na stronie : http://postfix.org
Instalacji Postfixa możemy dokonać poprzez kompilację źródeł :
make
make install
lub instalując go z pakiery RPM :
rpm -ivh postfix-2.0.12.rpm
73) Uruchamianie i zatrzymywanie
serwera POSTFIX
Aby Postfix uruchamiał się nam po uruchomieniu systemu, należy umieścić odpowiedni
wpis w skrypcie : /etc/init.d/rc.local lub stworzyć odpowiednie
dowiązanie symboliczne w katalogu, z którego uruchamiane są skrypty po wejściu systemu
na odpowiedni poziom pracy.
Uruchomienie serwera następuje po wydaniu komendy :
postfix start
Zatrzymanie serwera :
postfix stop
Zrestartowanie serwera :
postfix reload
74) Konfiguracja serwera POSTFIX
Najważniejszym plikiem konfiguracyjnym serwera jest plik main.cf,
który znajduje się w katalogu /etc/postfix .
Składnia poleceń konfiguracyjnych jest następująca :
parametr1 = wartość
Przy konfiguracji możliwe jest też użycie wcześniej zdefiniowanych zmiennych :
parametr2 = $parametr1
Do najważniejszych dyrektyw konfiguracyjnych należą :
mail_owner
Dyrektywa ta określa właściciela procesu Postfix.
myhostname
Dyrektywa ta powinna zawierać pełną nazwę naszego hosta.
mydomain
W dyrektywie tej powinna znajdować się nazwa naszej domeny.
myorigin
Dyrektywa ta odpowiada za część domenową adresów pocztowych pojawiających się w
wysyłanej poczcie i może przyjmować następujące opcje : $mydomain ,
$myhostname lub inne przypisane wprost.
mydestination
Określa zestaw domen obsługiwanych przez dany serwer.
relayhost
Dyrektywa ta wskazuje na host przez który poczta będzie wysyłana.
relay_domains
Dzięki tej dyrektywie możemy wskazać domeny adresowe, dla których będzie
przyjmowana poczta.
networks
Dyrektywa ta powinna zawierać adresy sieci, z których możemy relayować pocztę.
queue_directory
Jest ścieżką do katalogu zawierającego kolejki serwera.
command_directory
Jest ścieżką do katalogu z plikami binarnymi serwera.
daemon_directory
Wskazuje na katalog z demonem serwera.
canonical_maps
Wskazuje na plik zawierający tabelę odwzorowań adresów.
Opcja ta jest użyteczna przy przekształcaniu zarówno adresów nadawców jak i
odbiorców :
login@domena - Imie.Nazwisko@domena
Po wprowadzeniu zmian do pliku z odwzorowaniami należy zaktualizować bazę danych i
przeładować serwer :
postmap /etc/postfix/canonical_maps
postfix reload
alias_maps
Wskazuje na plik zawierający tabelę aliasów nazw. Pełni podobną funkcję do
dyrektywy canonical_maps.
W celu zaktualizowania bazy aliasów należy użyć polecenia postalias
.
alias_database
Wskazuje na plik, który powstaje po przetworzeniu pliku z aliasami nazw poprzez
program postalias.
relocated_maps
Wskazuje na plik zawierający informacje o nie istniejącym użytkowniku, która jest
wysyłana do nadawcy listu.
W celu zaktualizowania bazy należy użyć polecenia postmap .
header_size_limit
Dyrektywą tą możemy określić maksymalny rozmiar nagłówka listu.
extract_recipient_limit
Określa maksymalną listę odbiorców listu określonych w nagłówku.
message_size_limit
Dyrektywa określająca maksymalny rozmiar listu.
qmgr_message_active_limit
Określamy maksymalną liczbę listów obsługiwanych jednocześnie w kolejce active.
default_destination_concurrency_limit
Liczba równoczesnych sesji z tym samym serwerem.
header_checks
Wskazuje tablicę zawierającą wyrażenia regularne, opisujące nagłówki listów,
które mają być odrzucane.
Przykładowy plik konfiguracyjny : main.cf
75) Konfiguracja superserwera inetd
Plikiem konfiguracyjnym serwera inetd jest plik : /etc/inetd.conf
Każdy wiersz tego pliku ma następujący format :
usługa typ-gniazdka protokół wait/nowait[.max] użytkownik[.grupa]
program-serwera argumenty-serwera
gdzie :
usługa - to nazwa usługi odpowiadająca wpisom z pliku /etc/services,
na podstawie której serwer określa numer portu, na którym należy oczekiwać
połączenia
typ-gniazdka - przyjmuje wartość stream dla
usług o charakterze połączeniowym (tcp) lub datagram dla usług
bezpołączeniowych (udp)
protokół - określa protokół wykorzystywany do obsługi
połączenia (musi być on zdefiniowany w pliku /etc/protocols)
wait/nowait[.max] - w przypadku serwerów wielowątkowych
należy podać parametr nowait, a wprzypadku jednowątkowych - wait.
Opcjonalne pole max określa maksymalną liczbę procesów, które
można utworzyć w ciągu 60 sekund (tylko dla parametru nowait)
user[.group] - określa użytkownika i grupę, do której
będzie należał uruchomiony proces
program-serwera - zawiera ścieżkę do programu
obsługującego połączenie
argumenty-serwera - jest listą argumentów przekazywanych do
programu serwera przy jego uruchomieniu
Przykład :
ftp stream tcp nowait root /usr/sbin/proftpd proftpd
76) Konfiguracja superserwera xinetd
Xinetd jest nowszą wersją superserwera inetd. Posiada on rozszeżone dyrektywy
konfiguracyjne umożliwiające dokładniejsze dostosowanie konfiguracji do własnych
potrzeb lub zasobów systemowych.
Ciekawymi parametrami dla polecenia configure podczas
instalowania serwera są :
--with-libwrap - parametr nakazujący w pierwszej kolejności
sprawdzenie praw dostępu w plikach /etc/hosts.allow i /etc/hosts.deny
--with-loadavg - parametr pozwalający zarządzać opcją
konfiguracji max_load (wyłączenie części serwisów podczas
przeciążenia maszyny)
--with-inet6 - parametr ten pozwala na obsługę IPv6
Głównym plikie konfiguracyjnym superserwera xinetd jest plik : /etc/xinetd.conf
Plik konfiguracyjny składa się z dwóch sekcji :
- default - definiuje ogólną konfiguracje
serwera, a każdy atrybut zdefiniowany w tej sekcji zachowuje swoją wartość dla
wszystkich ustawień w sekcji service
(chyba, że zostanie jawnie zmieniony w danej sekcji)
- service - odpowiedzialna jest za
konfigurację odpowiednich usług
Sekcja default ma następującą budowę :
default
{
atrybut operator wartość
........
}
Sekcja service wygląda identycznie jak sekcja default :
service nazwa_sewisu
{
atrybut operator wartość
....................
}
Dozwolone operatory to :
= przypisuje atrybutowi daną wartość
+= dodaje wartość do listy wartości atrybutów
-= usuwa wartość z listy wartości atrybutów
Najważniejsze atrybuty i ich wartości to :
bind lub interface
pozwala na powiązanie serwisu z danym adresem IP (przydatne jeśli nasz serwer posiada
kilka kart sieciowych)
disabled
dotyczy sekcji default - wartościami są nazwy usług, które chcemy wyłączyć
disable
dotyczy sekcji service, a możliwe wartości to :
YES - wyłączenie danej usługi
NO - włączenie danej usługi
flags
może przyjmować następujące wartości :
IDONLY - akceptuje tylko połączenia od klientów posiadających serwer
identyfikacyjny
NAMEINARGS - oznacza, że w polu server definiuje
się pomocniczy program potrzebny do prawidłowego działania serwera, a dopiero w polu serwer_args definiuje się właściwy serwer
NOLIBWRAP - powoduje, że pliki host.acces i host.deny
nie są sprawdzane
NORETRY - zabezpiecza nowy proces przed ponownym rozdzieleniem w
przypadku błędu
id
umozliwia nadanie dodatkowej nazwy danej usłudze
log_type
określa sposób logowania zdarzeń związanych z dostępem do poszczególnych usług :
SYSLOG funkcja [poziom]
mozliwe funkcje to : daemon | auth | authpriv | user | local0-7
mozliwe poziomy to : emerg | alert | crit | err | warning | notice | info | debug
FILE nazwa_pliku [max1[max2]]
nazwa_pliku - wskazuje na pliku, do którego trafiać będą logi
max1 - określa rozmiar pliku po przekroczeniu którego wysyłane jest
ostrzeżenie do sysloga
max2 - określa rozmiar po przekroczeniu którego syslog przestaje
logować
log_on_success
określa, które dane mają zostać zalogowane w przypadku udanego połączenia i
skorzystania z usługi :
HOST - loguj IP klienta
PID - loguj PID procesu, który obsłużył klienta
DURATION - loguj długość trwania połączenia
USERID - loguj identyfikator zdalnego użytkownika
EXIT - loguj status serwera po obsłużeniu klient
log_on_failure
określa, które dane mają zostać zalogowane w przypadku nieudanego połączenia i
skorzystania z usługi :ATTEMPT - loguj fakt próby połączenia
HOST - loguj IP klienta
USERID - loguj identyfikator zdalnego użytkownika
RECORD - loguj wszelkie dostępne dane o kliencie
nice
określa priorytet uruchamianej usługi (wysoki priorytet -10 , niski -20)
no_access
zawiera listę klientów, którzy nie mogą korzystać z danej usługi serwisu
only_from
zawiera listę klientów, którzy mogą korzystać z usługi serwisu
port
wskazuje na numer portu skojarzony z daną usługą
protocol
określa protokół wykorzystywany do obsługi połączenia (musi być on zdefiniowany
w pliku /etc/protocols)
redirect
przekierowanie rządania na inną maszynę
server
zawiera ścieżkę do programu uruchamiającego dany serwer
server_args
jest listą argumentów przekazywanych do programu serwera przy jego uruchomieniu
socket_type
przyjmuje wartość stream dla usług o charakterze połączeniowym
(tcp) lub datagram dla usług bezpołączeniowych (udp)
type
określa typ serwisu :
INTERNAL - serwisy zarządzne bezpośrednio przez xinetd bez udziału
konkretnych serwerów
(echo, time, daytime, chargen, discard)
RPC - serwisy wymienione w pliku /etc/rpc
UNLISTED - dla serwisów nie wymienionych w plikach : /etc/rpc
/etc/services
wait
dotyczy srwisów jedno lub wielowątkowych :
NO[.max] - dotyczy serwerów wielowątkowych, opcjonalne pole max
określa maksymalną liczbę procesów, które mozna utworzyć w ciągu 60 sek
YES - w przypadku serwerów jednowątkowych
cps
limituje ilość przychodzących połączeń :
wartość_1 - określa ilość maksymalnych połączeń do danego serwisu
po przekroczeniu którego serwis zostaje deaktywowany
wartość_2 - wyrażona w sekundach określa czas deaktywowania serwisu
instances
określa maksymalną liczbę serwerów tego samego typu pracujących w tym samym czasie
max_load
określa maksymalne obciążenie procesora po przekroczeniu, którego połączenia na
ten serwer są odrzucane
per_source
określa limit połączeń dla serwera z tego samego adresu źródłowego :
dowolna_liczba - liczba określająca limit połączeń
UNLIMITED - nieograniczona liczba połączeń
W pliku xinetd.conf znajduje się zazwyczaj tylko główna
konfiguracja serwera i wpis dołączający pliki z katalogu /etc/xinetd/
zawierające konfiguracje poszczególnych usług.
Przykład :
defaults
{
instances = 50
per_source = 5
log_type = FILE /var/log/xinetd.log 500K 600K
log_on_success = HOST PID DURATION
log_on_failure = HOST RECORD
no_access = 192.168.1.3
disabled = telnet
}
service ftp
{
flags = REUSE
socket_type = stream
instances = 50
wait = no
user = root
server = /usr/sbin/proftpd
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
77) Podstawy bezpieczeństwa systemu
Dobrze skonfigurowany system jest podstawowym elementem bezpieczeństwa danych, całej
sieci, jak i uruchamianych w jego środowisku serwerów.
Szczególny nacisk na bezpieczeństwo systemów kładzie się w dużych firmach, gdzie na
komputerach lub ogólnodostępnych serwerach przechowuje się inforamcje takie jak : dane
firmy , dane klientów , numery kart kredytowych , konta bankowe.
Bezpieczeństwo naszych danych zależy głównie od dwóch rodzajów zabezpieczeń :
Zabezpieczenia fizyczne dotyczą wszystkiego co związane jest nie z samym systemem
lecz środowiskiem, w którym ten system będzi działał, np.:
- odpowiednio przygotowane szafy serwerowe
- opdowiednio przygotowane i zabezpieczone pomieszczenia, w kótrych pracują serwery
- specjalistyczna instalacja logiczna sieci uniemożliwiającymi podsłuchiwanie sieci
Drugi rodzaj zabezpieczeń dotyczy samej konfiguracji systemu i uruchamianych na nim
programów lub serwerów.
Podstawowe czynności, które należy wykonać po zainstalowaniu systemu, aby zapewnić
minimum bezpieczeństwa to :
- konfiguracja BIOSU zabezpieczona hasłem i uniemożliwiająca odczytanie systemu z
innych nośników niż dysk twardy
- zabezpieczenie programu ładującego system (LILO) uniemożliwjając skorzystanie z
opcji : single dającej dostęp do systemu z prawami superużytkownika
bez podawania hasła
- wyłączenie wszystkich niepotrzebnych i niebezpiecznych usług uruchamianych przez
program inetd (wstawienie # przed nazwą usługi) lub xinetd (usunięcie wpisu
dotyczącego usługi lub wstawienie w sekcji services dyrektywy disable=YES)
Najbardzej niebezpieczne usługi to te umożliwające zdalne logowanie na serwerze :
rsh, rexec, rcp, rlogin , telnet
Najlepszym rozwiązanie jest zastąpienie ich usługą SSH.
Inne usługi, które warto wyłączyć to :
finger (udostępnia informacje o użytkownikach systemu)
tftp (umożliwia pobieranie plików bez autoryzacji)
smpt (zdalne zarządzanie serwerem)
systat, netstat (podają informacje o systemie i sieci)
echo, daytime, discard, chargen, talk, ntalk, printer (inne
niebezpieczne narzędzia)
Inne reguły, które warto przestrzegać to :
- ograniczenie możliwość uruchamiania skryptów CGI na serwerze (szczególnie na
serwerach WWW)
- ostrożne używanie ustawień SUID , SGID
- należy jeśli to tylko możliwe korzystać z protokołu SSL, który jest protokołem
bezpiecznej komunikacji i stanowi doskonałą alternatywę dla połączeń http
- należy stworzyć podstawowe reguły filtrowania pakietów (firewall), co może
stanowić doskonałą ochronę dla naszego systemu i całej sieci lokalnej
- należy często aktualizować oprogramowanie na nowsze i bezpieczne wersje
78) SSH - bezpieczna powłoka
SSH jest programem umożliwiającym logowanie na serwerze zdalnym i w przeciwieństwie
do programu telnet posiada mechanizm silnego uwierzytelniania oraz szyfrowania sesji na
podstawie specjalnych kluczy.
Źródło programu zawierające serwer, klienta i dodatkowe oprogramowanie możemy
znaleźć na stronie domowej programu SSH : http://www.ssh.com/
Po udanej instalacji w katalogu /etc/ssh zostaną utworzone
następujące pliki :
sshd_config - jest plikiem konfiguracyjnym serwera SSH
ssh_config - jest plikiem konfiguracyjnym klienta SSH
ssh_host_key - zawiera klucz prywatny serwera SSH
ssh_host_key.pub - zawiera klucz publiczny serwera SSH
W katalogu /etc/local/bin/ możemy znaleźć następujące
programy :
ssh-askpass - jest prostym programem dla X-Window służącym
do wczytywania haseł
scp - bezpieczny zamiennik dla komendy rcp
ssh-add - program służący do wprowadzania kluczy publicznych do
agenta autentyfikacji
ssh-agent - agent autentyfikacji
ssh-keygen - generator klucza prywatnego i publicznego
ssh - bezpieczny zamiennik dla rsh
Katalog /etc/local/sbin zawiera następujące programy :
sshd - jest serwerem SSH
Serwer SSH możemy uruchamiać zaraz po starcie systemu lub za pomocą superserwera
inetd lub xinetd.
Najważniejsze dyrektywy konfiguracyjne serwera SSH :
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
wybór metody autentyfikacji
Port
numer poru wykorzystywanego przez ssh
ListenAdress
parametr ten określa adres IP interfejsu, który będzie obsługiwany przez SSH
PermitRootLogin
określa, czy ssh umożliwi logowanie na konto administratora
HostKey /etc/ssh/ssh_host_key
RandomSeed /etc/ssh/ssh_random_seed
położenie pliku z kluczem i parametrem losowym
ServerKeyBits
dyrektywa określająca długość klucza
KeyRegenerationInterval
czas po jakim następuje odnowienie klucza (wartość w sekundach)
IgnoreRhosts
IgnoreRootRhosts
określa czy należy ignorować pliki : .rhosts, które
wskazuje na zaufane hosty, z których można się zalogować bez podawania hasła
RhostsAuthentication
RhostsRSAAuthentication
określa możliwość autentyfikacji za pomocą mechanizmu rhost
X11Forwarding
umożliwia szyfrowanie połączenia graficznego - X Window
XAuthLocation
określa program za pomocą którego należy dokonywać autentyfikacji użytkownika w
środowisku graficznym X Window
PrintMotd
określa możliwość wypisywania komunikatu powitalnego (/etc/motd)
Przykładowy plik konfiguracyjny : sshd_config
SSH umożliwia również bezpieczne logowanie na zdalnej maszynie bez podawania hasła.
Aby skorzystać z tej możliwości należy wykonać następujące czynności :
- zalogować się do systemu lokalnego, z którego będziemy łączyć się za pomocą
klienta ssh
- uruchomić program ssh-keygen , który wygeneruje klucz
publiczny (katalog_domowy/.ssh/identity) i klucz prywatny (/katalog_domowy/.ssh.identity.pub)
(w pytaniu o hasło należy pozostawić hasło puste)
- skopiować plik identity.pub do katalogu /tmp
komputera zdalnego
scp $HOME/.ssh/identity.pub serwer_zdalny:/tmp
- zalogować się do systemu zdalnego
ssg serwer_zdalny
- dołączyć plik /tmp/identity.pub do pliku .ssh/authorized_keys
w katalogu domowym na serwerze zdalnym
cat /tmp/identity.pub >> .ssh/authorized_keys
- wylogować sie i ponownie zalogować przez ssh bez podawania hasła
79) FIREWALL
Firewall - "ściana ognia" jest terminem zaczerpniętym z konstrukcji
samochodu, gdzie firewall fizycznie oddziela silnik samochodu od pasażera.
Komputerowe firewalle są urządzeniami, które chronią sieci prywatne od części
publicznej, jaką jest Internet.
Komputer będący ,,ścianą ognia'' może być obecny tak w sieci chronionej, jak i w
Internecie. Chroniona sieć nie może być osiągalna z Internetu, podobnie jak Internet
nie może być osiągalny z chronionej sieci.
Typy firewalli
Istnieją dwa typy firewalli:
- firewalle filtrujące IP - działające na
poziomie pakietów, przepuszczające tylko te pakiety, które spełniają ustalone warunki
filtrowania
- serwery proxy - serwery pośredniczące,
dziłające na pozimie aplikacji, wykonujące połączenie sieciowe za nasz komputer
Filtujące firwalle
Firewalle filtrujące działają na poziomie pakietów IP. Są zaprojektowane do
kontroli przepływu, bazując na adresie źródłowym, docelowym, porcie i typie pakietu
(zawartych w każdym z pakietów).
Ten typ firewalli z odpowiednio ustawionymi regułami filtrowania jest bardzo bezpieczny.
Serwery proxy
Serwery proxy pozwalają na niebezpośredni dostęp do Internetu przez firewall.
Podczas łączenia się z proxy serwerem za pomocą specjalnego oprogramowania klienckiego
startuje on swojego klienta i dostarcza rządanych danych.
Ponieważ serwery proxy podwajają każde połączenie, możliwe jest zapisywanie każdego
z nich.
Wady firewalli
Wadą filtrujących firewalli jest to, że ograniczają dostęp do twojej sieci z
Internetu. Tylko usługi na filtrowanie, których zezwolisz będą dostępne.
Na serwerach proxy użytkownicy mogą autoryzować się na firewallu i dopiero wtedy mają
(z systemu wewnątrz sieci prywatnej) dostęp do Internetu.
Poza tym nowe typy klientów sieciowych i serwerów przybywają prawie codziennie. Musimy
wtedy wynaleźć nowy sposób zezwolenia na kontrolowany ich dostęp do twojej sieci,
zanim będą użyte.
Kompilacja jądra dla obsługi firawalla.
Aby nasz firewall działał, należy uaktywnić podczas kompilacji jądra następujące
opcje :
* Turn Networking Support ON
* Turn Network firewalls ON
* Turn TCP/IP Networking ON
* Turn IP Firewalling ON
* Turn IP firewall packet loggin ON
* Turn IP: accounting ON
Konfiguracja zasad filtrowania adresów IP
Aby poprawnie zaprojektować nasz firewall należy zrozumieć jaką drogę pokonuje
datagram IP w czsie przechodzenia przez naszą zaporę.
Najpierw sprawdzana jest suma kontrolna datagramów checksum,
następnie testowane są one pod kątem deformacji sanity.
Później pakiety przechodzą przez łańcuch wejściowy input
chain i jeśli trzeba podlegają procesowi NAT
- demasquerade, czyli adres rutera usuwany
jest z pola "adres docelowy" i zastępowany jest adresem IP komputera w sieci
prywatnej. Dalej na podstawie tablicy rutingu routing
decision lub protokołu rutującego podejmowana jest decyzja o dalszym
losie pakietu. Procesy lokalne local process
mogą odbierać pakiety po etapie rutowania i wysyłać pakiety poprzez etap rutowania i
łańcuch wyjściowy output chain. Jeśli
pakiety nie są utworzone poprzez procesy loklne, są sprawdzane w łańcuchu
przejściowym forward chain. Jeśli pakiety
od procesów lokalnych są przekazywane do lokalnego komputera localhosta przechodzą
przez łańcuch wyjściowy do interfejsu lo - loopback.
Wszystkie pakiety wydostające się z komputera muszą przejść przez łańcuch
wyjściowy output chain.
Konfigurowanie naszego firewalla należy zacząć od stworzenia skryptu rc.firewall w
katalogu /etc/rc.d/, w którym umieścimy reguły filtrowania
naszych pakietów.
W pliku /etc/rc.d/rc.local dodajemy następujący wpis
/etc/rc.d/rc.firewall
który spowoduje uruchomienie podczas startu systemu naszego skryptu .
Do konfiguracji reguł filtrowania posłużymy się programem ipchains
o następującej składni dla wybranych opcji :
ipchains -A łańcuch opcje
ipchains -R łańcuch opcje
ipchains -I łańcuch opcje
ipchains -P łańcuch cel
ipchains -F łańcuch
ipchains -D łańcuch
gdzie :
A - dołącza jedną lub więcej reguł do końca podanego
łańcucha
R - zamienia reguły w wybranym łańcuchu
I - wstawia jedną lub więcej reguł do określonego łańcucha
P - ustawia politykę łańcucha wybranego celu
F - usuwa wszystkie reguły z podanego łańcucha
D - usuwa jedną lub więcej reguł z podanego łańcucha
łańcuch - może przyjmować 3 parametry :
INPUT - dla pakietów wchodzących
OUTPUT - dla pakietów wychodzących
FORWARD - dla pakietów maskowanych
cel - każda reguła ściany ogniowej określa kryteria
dotyczące pakietu i celu .
Jeśli pakiet nie pasuje do danej reguły, to sprawdzana jest następna w danym
łańcuchu . Jeśli pakiet pasuje, wtedy następna regułka jest określana przez
wartość celu, która przyjmuje następujące wartości :
ACCEPT - należy przepuścić pakiet
DENY - należy pakiet odrzucić
REJECT - działa podobnie, jak DENY
wysyłając dodatkowo do nadawcy komunikat zwrotny ICMP informujący go, że pakiet nie
został przyjęty
MASQ - jest właściwy tylko dla łańcuchów przekazywanych -
forwardingu
opcje - może przyjmować następujące wartości :
s - określa źródła, którymi mogą być : nazwa usługi,
numer portu, adres IP i maska hosta lub sieci
d - określa miejsce przeznaczenia i ma taką samą postać jak
opcja -s
p - dzięki tej opcji możemy wskazać bezpośrednio na
interesujący nas port
j - określa cel reguły, który należy spełnić, jeśli pakiet
spełnia podane w regule kryteria
i - wskazuje nazwę interfejsu sieciowego, na który będą
przychodzić pakiety podlegające weryfikacji w danej regule
Na samym początku należy usunąć wszystkie reguły dotyczące filtrowania pakietów
wejściowych :
ipchains -F input
Ustawiamy politykę dla wybranych łańcuchów :
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward DENY
Każda nowa reguła będzie tworzona w oparciu o podany schemat :
ipchains [-A/-I] [input/output] -p [protokół] -s [źródło] [nr
portu] -d [cel] [nr portu] -j [DENY/ACCEPT] -i [interfejs]
Ustawianie reguł zaczynamy od stworzenia doskonałego firewalla, blokującego
wszystkie porty dla pakietów przychodzących z zewnątrz na interfejs ppp0 :
ipchains -A input -p tcp -s 0/0 1:65535 -d 192.168.0.1/24 1:65535 -j
DENY -i ppp0
Dla odblokowania usługi WWW tworzymy nową regułę :
ipchains -I input -p tcp -s 0/0 1024:65535 -d 192.168.0.1/24 WWW -j
ACCEPT -i ppp0
Dla odblokowania usługi FTP adekwatnie do poprzedniej tworzymy regułę :
ipchains -I input -p tcp -s 0/0 1024:65535 -d 192.168.0.1/24 FTP -j
ACCEPT -i ppp0
Nasz firewall możemy również wykorzystać do administrowania dostępem do internetu.
Jeśli chcielibyśmy zabronić komputerowi z naszej sieci o adresie 192.168.0.2 dostępu
do internetu należy stworzyć regułę w postaci :
ipchains -I input -p tcp -s 192.168.0.2/32 1024:65535 -d 0/0 WWW -j
REJECT -i eth0
eth0 - jest interfejsem sieciowym łączącym nasz serwer z siecią prywatną.
80) IP - MASQUERADE (maskowanie pakietów)
IP-MASQUERADING jest funkcją sieciową Linuxa będąca w fazie rozwoju, zajmującą
się tłumaczeniem adresów sieciowych.
Jądra systemu od wersji 1.3.x mają wbudowaną obsługę maskowania pakietów.
Każdy pakiet ma swój adres docelowy i zwrotny, dzięki temu może on dotrzeć do
innego komputera, a ten na podstawie adresu zwrotnego może z kolei wysłać odpowiedź.
Jeśli komputer z sieci wewnętrznej o adresie 192.168.0.3 próbowałby wysłać
wiadomość do komputera znajdującego się gdzieś w sieci Internet, to nie otrzyma
odpowiedzi z powodu złego adresu zwrotnego. W wysyłanym pakiecie adres zwrotny będzie
adresem z klasy C o numerze 192.168.0.3, który to nie jest adresem routowalnym i
przepadnie gdzieś w sieci.
Aby nasz komputer otrzymał odpowiedź, należy wskazać jako bramę sieciową serwer z
poprawnie zaimplementowanym IP-masqueradingiem, który przechwyci wszystkie pakiety
wysyłane przez komputery w sieci wewnętrznej i zmieni ich adres zwrotny na swój
własny, legalny numer IP. Pakiet bez problemu dotrze do komputera docelowego, który
wyśle odpowiedź z adresem zwrotnym serwera, a serwer po odebraniu pakietu zmieni jego
adres zwrotny na adres naszego komputera w sieci wewnętrznej.
W katalogu /etc/rc.d/ należy stworzyć skrypt o nazwie rc.forward,
w którym umieścimy reguły maskowania pakietów.
W pliku /etc/rc.d/rc.local umieszczamy następujący wpis /etc/rc.d/rc.forward,
który spowoduje uruchomienie podczas startu systemu naszego skryptu z regułami
maskowania .
Uruchomienie funkcji maskowania odbywa się poprzez wywołanie następującego
polecenia :
echo "1" > /proc/sys/net/ipv4/ip_forward
Reguły maskowania pakietów ustalamy za pomocą programu ipchains z odpowiednimi
parametrami :
usuwamy wszystkie reguły maskowania
ipchains -F forward
blokujemy możliwość maskowania czegokolwiek
ipchains -P forward DENY
Dodajemy nową regułę maskowania, gdzie źródłem może być adres wraz z maską
hosta lub sieci, z której chcemy maskować pakiety, a celem w naszym przypadku jest sieć
Internet.
ipchains -A forward -s źródło -d cel -j MASQ
Aby wszystkie komputery z naszej sieci mogły podlegać forwardingowi, należy w
miejscu celu wpisać adres naszej sieci wewnętrznej yyy.yyy.yyy.yyy wraz znumerem
odpowiadającym ilości bitów naszej maski - x , czyli :
ipchains -A forward -s yyy.yyy.yyy.yyy/x -d 0.0.0.0/0 MASQ
MASKA |
X |
PODSIEĆ |
255.0.0.0 |
8 |
Klasa A |
255.255.0.0 |
16 |
Klasa B |
255.255.255.0 |
24 |
Klasa C |
255.255.255.255 |
32 |
Point-to-point |
Dla sieci o numerze 192.168.0.0 i masce 255.255.255.0 polecenie ustawiające maskowanie
powinno wyglądać następująco:
ipchains -A forward -s 192.168.0.0/24 -d 0.0.0.0/0 -j MASQ
Jeśli chcielibyśmy, aby w naszej sieci tylko pakiety z komputera o adresie
192.168.0.4 podlegały maskowaniu, należy wydać polecenie :
ipchains -A forward -s 192.168.0.4/32 -d 0.0.0.0/0 -j MASQ
GRUPA MEDIA INFORMACYJNE & ADAM NAWARA
|