Lekcja 7
Zarządzanie dostępem do plików, procesami i drukowaniem
Celem zajęć jest zapoznanie słuchaczy z systemem zabezpieczeń dostępu do plików i katalogów, zarządzaniem procesami oraz wydrukiem danych.
Prawa dostępu do plików i katalogów
W lekcji 2 przedstawiono prawa dostępu do plików i katalogów, które są ważnym elementem systemu bezpieczeństwa w Unixie. Właściciel pliku lub katalogu ustala kto i w jakim zakresie może posiadać dostęp do tworzonych przez niego katalogów i plików. Wyróżniamy trzy poziomy bezpieczeństwa: to, co może zrobić właściciel, grupa, do której należy właściciel oraz wszyscy pozostali użytkownicy Komenda ls z parametrem -l wyświetla prawa dostępu w następującej formie:
Prawa dostępu do plików i katalogów można zmieniać przy użyciu komendy chmod. W poleceniu tym do określania praw dostępu można wykorzystywać dwa formaty: liczbowy i symboliczny.
Format liczbowy odpowiada potęgom cyfry 2 przypisanym do prawa odczytu, zapisu i wykonywania zgodnie ze wzorcem:
prawo wykonania x => 20 = 1
prawo zapisu w => 21 = 2
prawo odczytu r => 22 = 4
W sumie uzyskujemy 8 możliwych kombinacji, które zawarto w tabeli poniżej:
zapis liczbowy |
reprezentacja znakowa |
opis |
0 |
- - - |
brak praw dostępu |
1 |
- - x |
tylko wykonywanie |
2 |
- w - |
tylko zapis |
3 |
- w x |
zapis i wykonywanie |
4 |
r - - |
tylko odczyt |
5 |
r - x |
odczyt i wykonywanie |
6 |
r w - |
odczyt i zapis |
7 |
r w x |
wszystkie prawa (odczyt, zapis i wykonywanie) |
chmod prawa_właściciela prawa_grupy prawa_pozostałych plik
np. komenda: chmod 740 pismo
nadaje właścicielowi wszystkie prawa, jego grupie tylko możliwość odczytu, a pozostałym użytkownikom nie daje żadnych praw do pliku pismo.
W formacie symbolicznym posługujemy się oznaczeniami użytkowników oraz praw dostępu:
użytkownicy: u - właściciel (user)
g - grupa (group)
o - pozostali (other)
a - wszyscy (all)
przydział praw: = ustalenie praw dostępu
+ dodanie prawa dostępu
- zabranie prawa dostępu
prawa dostępu: r - odczyt (read)
w - zapis (write)
x - wykonanie (executable)
chmod komu przydzielić jakie_prawo plik
np. komenda: chmod u+x,o-rw pismo
dodaje właścicielowi prawo wykonania i zabiera prawo odczytu i modyfikacji dla pliku pismo
Zapis liczbowy stosuje się najczęściej przy ustalaniu praw, a zapis symboliczny przy ich zmianie.
Tworząc nowy plik lub katalog przydzielane są mu standardowe prawa dostępu zgodnie z maska zadeklarowaną komendą umask. Jest to liczba składająca się z trzech cyfr od 0 do 7, które odjęte od wzorca dla plików (666) lub katalogów (777) określają prawa dostępu do nowo zakładanych obiektów. Standardowo umask posiada wartość 022 co oznacza, że nowo tworzone pliki i katalogi maja następujące prawa dostępu:
pliki => 666 - 022 = 644 czyli rw- r-- r--
katalogi => 777 - 022 = 755 czyli rwx r-x r-x
Ustalenie wartości umask na 027 spowoduje ustalenie praw dla pliku 640 i katalogu 750.
Wielozadaniowość
Procesem będziemy nazywać każdy program będący w trakcie wykonywania. System Unix został tak zaprojektowany, aby mógł jednocześnie obsługiwać wiele procesów. Jednak każdy uruchomiony proces wykorzystuje określoną część mocy procesora i zasobów komputera. Określenie równoczesne wykonywanie zadań oznacza tak naprawdę, że wykonywanie zadań przeplata się w czasie, na tyle szybko, że użytkownicy mają wrażenie jednoczesnej pracy. Użytkownik uruchamiając program nie musi więc martwić się o to, co w tym czasie robią w systemie inni użytkownicy.
Każdy utworzony proces otrzymuje po uruchomieniu swój unikatowy numer, nazywany identyfikatorem procesu PID (process identification number) oraz ma dostęp do identyfikatora procesu nadrzędnego, który go wywołał: PPID (parent process identification number). Proces nadrzędny nazywany jest również procesem macierzystym lub rodzicem. Procesy aktywowane z danego terminala przez ten sam shell stanowią tzw. grupę procesów o identyfikatorze PGID (process group identification number).
Każdy proces ma przydzielony priorytet, według którego przydzielane są mu kwanty czasu procesora, oraz ustalana kolejność uzyskania dostępu do procesora. Ustalanie priorytetów procesów realizowane jest dynamicznie przez system i określane liczbowo. Większa wartości określają niższy priorytet.
Listę uaktywnionych procesów i ich priorytet można obejrzeć dzięki komendzie ps.
Shell wywołując nowy proces standardowo czeka na jego zakończenie, blokując użytkownikowi wydawanie kolejnych poleceń (patrz lekcja 1). Tak uruchomiony proces nazywamy pierwszoplanowym. Użytkownik może uruchomić program w tle, w charakterze programu drugoplanowego, dopisując przy wywołaniu polecenia znak & (ampersand). Każdy uruchomiany w tle proces oprócz numeru PID ma przydzielony dodatkowo JID (job identification number) wyświetlany w nawiasie kwadratowym. Domyślnym wyjściem standardowym procesów drugoplanowych jest plik pusty /dev/null. Do przerwania procesów pierwszoplanowych służy kombinacja klawiszy Ctrl+C (sygnał 2), a do zakończenia kombinacja Ctrl+\ (sygnał 3). Do zatrzymania procesów drugoplanowych służy komenda kill. Listę aktywnych procesów można obejrzeć wydając komendę jobs (są to procesy drugoplanowe lub zatrzymane pierwszoplanowe). Przełączanie pomiędzy wykonywaniem procesów jako pierwszo- i drugoplanowych umożliwiają komendy fg i bg.
Procesy, które po uruchomieniu stale rezydują w pamięci operacyjnej nazywane są demonami (daemons). Uruchomione, pracują w tle, informując użytkownika o zaistniałych zdarzeniach, które są przez nie kontrolowane. Istnieją demony obsługi poczty czy drukarek. Większość demonów uruchamiana jest w chwili startu systemu i zapewnia usługi wszystkim użytkownikom.
Drukowanie
System Unix umożliwia wydruk na drukarkach podłączonych bezpośrednio do komputera, drukarkach zainstalowanych na komputerach będących serwerami wydruku (print serwer) lub podłączonych bezpośrednio do sieci przy pomocy karty sieciowej. Unix preferuje drukarki z obsługą języka pstscript. Tekst, który ma zostać wydrukowany, zostaje najpierw zapisany do pliku systemowego, nazywanego plikiem spool. Każde drukowane zadanie ma swój własny plik spool. Polecenie drukowania zostaje więc szybko zakończone, gdyż samo zapisanie do pliku trwa bardzo krótko. Ten proces nazywa się tworzeniem kolejki zadań dla drukarki (quering). Pracujący w tle demon drukarkowy ustalający kolejność zadań, czeka aż drukarka zwolni się, po czym drukuje kolejne przeznaczone do tego zadanie. Wydruk dokumentu umożliwia komenda lp, a jego wcześniejszą obróbkę (stronicowanie, ustalenie wielkości marginesów, numeracja stron, definiowanie nagłówków) polecenie pr.
Lista komend
chmod - zmiana prawa dostępu do plików i katalogów
chmod prawa plik(i) lub katalog(i) - ustala nowe prawa dostępu do wybranego pliku lub katalogu
prawa dostępu określa się numerycznie:
odczyt (read) =4 + zapis (write) =2 + wykonanie (execute) =1
mnożąc dla poszczególnych użytkowników:
właściciel (owner) *100 + grupa właściciela (group) *10 + pozostali * 1
np. prawa wszystkie dla właściciela, odczyt i wykonanie dla grupy, nic dla pozostałych => 100 * (4+2+1) + 10 * (4+1) + 1* (0) = 750
chmod komu jakie prawa plik lub katalog
prawa dostępu określa się symbolicznie:
komu:
u -właściciel (user), g -grupa (group), o -pozostali (other) , a -wszyscy (all)
operacja:
+ dodanie, - zabranie, = ustalenie
prawa:
r -odczyt (read), w -zapis (write), x -wykonanie (execute)
chown - zmiana właściciela pliku
chown nowy_właściciel plik(i) lub katalog(i) - ustalenie nowego właściciela dla wybranych plików lub katalogów
umask - ustalenie praw dostępu do tworzonych plików i katalogów
umask maska - ustawia nową maskę praw dostępu do nowo tworzonych plików i katalogów
ps - wyświetlenie informacji o stanie procesów
ps -opcja - wyświetlenie wybranych procesów i informacji o nich zgodnie z opcją
ps - wyświetlenie informacji o procesach uruchomionych z tego terminala
komenda ps wyświetla informacje w następujących kolumnach:
UID -identyfikator użytkownika;
PID -identyfikator procesu (process identification);
PPID -identyfikator procesu nadrzędnego;
STIME -czas uaktywnienia się procesu;
TTY -identyfikator terminala, z którego uruchomiono proces;
TIME -czas wykonywania procesy (zajętości procesora);
COMMAND -nazwa polecenia, który uruchomił proces.
wybrane opcje:
-e - wyświetlenie listy wszystkich procesów
-f - wyświetlenie pełnej informacji o procesach
nohup - wykonywanie polecenia w tle mimo wylogowania się użytkownika
nohup polecenie & - uruchomienie polecenia drugoplanowego, którego wykonywanie nie zakończy się po wylogowaniu użytkownika. Jeżeli nie zostanie określone standardowe wyjście wynik zostanie zapisany w pliku nohup.out.
jobs - wyświetla listę zadań pracujących w tle
komenda jobs wyświetla następujące informacje:
[numer procesu pracującego w tle] - kolejne liczby począwszy od 1;
stan procesu: Running (praca), Stopped (wstrzymane Ctrl+Z), Done (proces zakończony)
wykonywane w tle polecenie
fg - przeniesienie zadania drugoplanowego do wykonywania na pierwszym planie
fg %numer_zadania_drugoplanowego - przenosi zadanie drugoplanowe o podanym numerze do wykonywania na pierwszym planie
numer zadania drugoplanowego odczytujemy po wydaniu komendy jobs, umieszczony jest w nawiasach kwadratowych.
bg - przeniesienie wstrzymanego zadania pierwszoplanowego do wykonywania na drugim planie
bg %numer_wstrzymanego_zadania - przenosi wstrzymane zadanie o podanym numerze do wykonywania w tle
numer wstrzymanego zadania odczytujemy po wydaniu komendy jobs, umieszczony jest w nawiasach kwadratowych.
kill - zakończenie wykonania procesu
kill PID - kończy proces o podanym identyfikatorze
kill -9 PID - bezwarunkowo przerywa proces o podanym identyfikatorze
komenda stosowana do przerywania procesów drugoplanowych, rezydentnych (demonów), procesów uruchomionych z innego terminala. Identyfikator procesu należy odczytać komendą ps
lp - wydruk plików na drukarce
lp -opcje plik(i) - drukuje wyszczególnione pliki na drukarce domyślnej
wybrane opcje:
-d nazwa_drukarki - wydruk na określonej drukarce
-m - powiadomienie użytkownika o zakończeniu wydruku poprzez pocztę systemową (mailx)
-w - wyświetlenie informacji o zakończeniu procesu wydruku
-n liczba - określenie liczby kopii
lpstat - wyświetlenie informacji o stanie drukarek podłączonych do systemu
lpstat - wyświetla kolejkę zadań do wydrukowania
wybrane opcje:
-p - wyświetla dostępne drukarki i ich opisy
cancel - usunięcie zadania drukowania z kolejki
cancel drukarka nr_zadania - usuwa zadanie o podanym numerze z kolejki wydruku do wyszczególnionej drukarki
Ćwiczenia
Nawiąż połączenie z serwerem solaris.wlodkowic.pl i zaloguj się swoim nazwiskiem i hasłem (patrz lekcja wprowadzająca). System powinien wyświetlić znak zgłoszenia shella Korna - $.
Wykonaj zadania z bieżącej lekcji:
wyświetl w formie długiej zawartość katalogu /dane/skrypty, sprawdź właściciela i prawa dostępu do znajdujących się tam plików
ls -la /dane/skrypty Ⴟ
W katalogu /dane/skrypty znajdują się dwa pliki, których właścicielem jest użytkownik robert. Oba mają identyczne prawa dostępu rwxr--r-x. Oznaczają one, że użytkownik robert ma wszystkie prawa do tych plików, członkowie grupy sysadmin tylko prawo ich odczytu, a pozostali użytkownicy mogą przeglądać i uruchamiać te dwa skrypty.
załóż w swoim katalogu domowym katalog kradzież i przekopiuj do niego plik kwadrat z katalogu /dane/skrypty, sprawdź właściciela i prawa dostępu
mkdir kradziez Ⴟ
cd kradziez Ⴟ
cp /dane/skrypty/kwadrat . Ⴟ
ls -l Ⴟ
Prawa dostępu nie zmieniły się ale właścicielem pliku jesteś teraz Ty
wyświetl zawartość pliku kwadrat
cat kwadrat Ⴟ
dopisz w pierwszej linii pliku komendę clear
vi kwadrat Ⴟ
[i] [Enter] [Esc] [k] [i] clear [Esc] [:] wq [Enter] Ⴟ
uruchom program kwadrat
kwadrat Ⴟ
zmień prawa dostępu do pliku kwadrat na tylko wykonanie dla wszystkich użytkowników systemu
chmod 111 kwadrat
lub
chmod a=x kwadrat Ⴟ
ls -l Ⴟ
spróbuj wyświetlić zawartość pliku kwadrat i dopisać w nim na końcu linię echo „koniec programu”
cat kwadrat Ⴟ
cat: cannot open kwadrat - nie masz prawa odczytu pliku kwadrat
vi kwadrat Ⴟ
"kwadrat" Permission denied - nie masz prawa zapisu pliku kwadrat
wyjdź z programu vi [Esc] [:] q!
uruchom program kwadrat
kwadrat Ⴟ
ksh: kwadrat: cannot open - mimo, że posiadasz prawo wykonania pliku kwadrat to nie masz prawa odczytu, więc nie da się uruchomić pliku kwadrat
dodaj prawo odczytu dla wszystkich i odbierz prawo wykonywania dla pozostałych użytkowników. Sprawdź, czy możesz uruchomić program kwadrat?
chmod a+r,o-x kwadrat Ⴟ
ls -l Ⴟ
kwadrat Ⴟ
skasuj plik kwadrat
rm kwadrat Ⴟ
rm: kwadrat: override protection 554 (yes/no) ?
Mimo, że nie posiadasz prawa zapisu pliku kwadrat to posiadasz prawo zapisu w katalogu kradziez (sprawdź później -> ls -ld .). Po podaniu odpowiedzi y usuniesz plik kwadrat
ls -l Ⴟ
załóż nowy katalog o nazwie kat1 i nowy plik o nazwie plik1, sprawdź prawa dostępu do obu obiektów
mkdir kat1 Ⴟ
touch plik1 Ⴟ
ls -l Ⴟ
katalog kat1 ma prawa dostępu rwxr-xr-x
plik plik1 ma prawa dostępu rw-r--r--
wyświetl maskę praw dostępu dla nowo zakładanych plików i katalogów
umask Ⴟ
standardowa maska wynosi 022
prawa dostępu do katalogów -> 777-022 = 755 (rwxr-xr-x)
prawa dostępu do plików -> 666-022 = 644 (rw-r--r--)
zmień maskę praw dostępu na 077
umask 077 Ⴟ
załóż katalog kat2 i plik plik2, sprawdź ich prawa dostępu
mkdir kat2 Ⴟ
touch plik2 Ⴟ
ls -l Ⴟ
zgodnie z nową maską prawa dostępu zostały ograniczone dla grupy oraz pozostałych użytkowników systemu
kat2 -> rwx------ (bo 777 - 077 = 700)
plik2 -> rw------- (bo 666 - 077 = 600)
sprawdź jakie zadania uruchomiłeś w systemie
ps Ⴟ
powinno się pojawić tylko jedno aktualnie wykonywane zadanie - shell korna ksh
sprawdź wszystkie zadania uruchomione w systemie w formie długiej
ps -ef | more
Chcesz zapisać w pliku "wszystko" nazwy wszystkich plików z całego katalogu głównego, łącznie z podkatalogami. Wykonanie tej komendy trwa bardzo długo i w tym czasie nie będziesz mógł wykonywać innych zadań. Najlepiej byłoby uruchomić ją w tle. Uwaga, nie masz dostępu do niektórych katalogów co będzie generowało komunikaty o błędach, skieruj je do pliku "bledy".
ls -Ra / >wszystko 2>bledy &Ⴟ
wyświetlone zostaną numery: w nawiasie kwadratowym numer zadania wykonywanego w tle [1] oraz numer procesu PID np. 8346
wyświetl swoje zadania wykonywane przez system
ps Ⴟ
powinny pojawić się przynajmniej dwa procesy: shell w którym pracujesz ksh oraz wykonywane w tle zadanie ls
numer procesu nadrzędnego (PPID) dla komendy ls powinien zgadzać się z numerem procesu (PID) shela ksh
wyświetl listę pracujących w systemie zadań
jobs Ⴟ
[1] +Running
wyświetlone zostanie jeden pracujący proces [1], komenda ls
przenieś wykonywanie polecenia ls z tła na pierwszy plan
fg %1 Ⴟ
treść polecenia pojawiła się na ekranie, ale zniknął znak zgłoszenia shella, musisz poczekać na wykonanie się komendy do końca
przerwij wykonywanie się polecenia ls
Ctrl + Z
[1] + Stopped
zadanie numer 1 zostało wstrzymane
skieruj do wykonywania na drugim planie zatrzymane polecenie ls
bg %1 Ⴟ
[1] + Running
wykonywanie zadania jest wznowione w tle, pojawia się znak zgłoszenia shella $
sprawdź uruchomione procesy, odczytaj PID (numer procesu) polecenia ls
ps Ⴟ
jobs Ⴟ
PID ...................
zakończ proces zapisu nazw wszystkich plików do plku
kill numer_procesu PID Ⴟ
ps Ⴟ
proces został zakończony
sprawdź, czy w systemie nie został jakiś Twój nie zakończony proces pochodzący z poprzednich logowań w systemie, jeżeli tak zakończ go
ps -ef | grep nazwa_logowania Ⴟ
ewentualnie
kill PID Ⴟ
rozłącz się z serwerem likwidując Swój jedyny proces czyli shell ksh
ps Ⴟ
odczytaj numer procesu ksh PID =.............
kill -9 PID Ⴟ