FreeBSD, będąc bezpośrednim potomkiem systemu UNIX® BSD, oparte jest na kilku kluczowych założeniach Uniksa. Najbardziej widocznym z nich jest fakt, że FreeBSD jest systemem wieloużytkownikowym -- potrafi jednocześnie obsługiwać wielu użytkowników pracujących niezależnie od siebie. System jest odpowiedzialny za właściwe zarządzanie odwołaniami do sprzętu, pamięci i czasu procesora, po równo dla każdego z użytkowników.
Ze względu na obsługę wielu użytkowników, zasoby, którymi zarządza system, mają przypisane prawa dostępu określające, kto może czytać, zapisywać i uruchamiać dany zasób. Prawa dostępu przechowywane są w postaci dwóch oktetów podzielonych na trzy części, z których pierwsza odnosi sie do właściciela pliku, druga do grupy posiadającej plik, a trzecia do innych użytkowników. W postaci numerycznej zapisuje się to następująco:
Wartość | Uprawnienia | Symbol |
---|---|---|
0 | Odczyt: nie, zapis: nie, wykonywanie: nie | --- |
1 | Odczyt: nie, zapis: nie, wykonywanie: tak | --x |
2 | Odczyt: nie, zapis: tak, wykonywanie: nie | -w- |
3 | Odczyt: nie, zapis: tak, wykonywanie: tak | -wx |
4 | Odczyt: tak, zapis: nie, wykonywanie: nie | r-- |
5 | Odczyt: tak, zapis: nie, wykonywanie: tak | r-x |
6 | Odczyt: tak, zapis: tak, wykonywanie: nie | rw- |
7 | Odczyt: tak, zapis: tak, wykonywanie: tak | rwx |
Korzystając z polecenia ls(1) możemy posłużyć
się opcją -l
, by zawartość katalogu została pokazana w formie
szczegółowej, z uwzględnieniem kolumny zawierającej informację o prawach dostępu do pliku
dla jego właściciela, grupy, oraz wszystkich innych. Przykładowy wynik polecenia ls -l:
% ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt ...
Pierwsza kolumna listy plików po wykonaniu polecenia ls -l ma następującą postać:
-rw-r--r--
Pierwszy znak (od lewej) określa, czy plik jest zwyczajnym plikiem, katalogiem, urządzeniem znakowym, gniazdem, czy jakimkolwiek innym urządzeniem pseudo-plikowym. Widoczny w przykładzie znak - oznacza zwykły plik. Kolejne trzy znaki, w przykładzie są to rw-, reprezentują prawa dostępu, którymi dysponuje właściciel pliku. Następne trzy znaki r--, określają prawa dostępu grupy, do której należy plik. Ostatnia trójka r--, oznacza prawa dostępu dla innych. Minus oznacza brak jednego z praw dostępu. Plik przedstawiony w przykładzie może być więc odczytywany i zapisywany przez swojego właściciela, oraz jedynie odczytywany przez grupę i innych. Zgodnie z powyższą tabelą, prawa dostępu do tego pliku mają wartość 644, przy czym każda cyfra reprezentuje trzy części uprawnień.
W porządku, ale w jaki sposób system kontroluje dostęp do urządzeń? Zasadniczo większość urządzeń jest traktowana przez FreeBSD jak pliki, które mogą być otwierane, odczytywane i zapisywane podobnie jak wszystkie inne pliki. Specjalne pliki urządzeń przechowywane są w katalogu /dev.
Również katalogi traktowane są jak pliki -- też są im przypisywane prawa odczytu, zapisu i wykonania. Bit wykonania katalogu ma nieco inne znaczenie niż w przypadku pliku. Posiadanie prawa wykonania katalogu oznacza, że można do niego wejść, czyli posłużyć się poleceniem “cd”. Ponadto umożliwia to dostęp do zawartych w katalogu plików o znanych nazwach (oczywiście obowiązują także indywidualne prawa dostępu do każdego z plików).
W szczególności, wyświetlenie listy plików katalogu wymaga posiadania prawa do jego odczytu, natomiast do usunięcia pliku o znanej nazwie potrzebne będą prawa do zapisu i wykonania dla katalogu, w którym ów plik się znajduje.
Jest jeszcze kilka innych bitów uprawnień, jednak są one stosowane w specjalnych przypadkach, np. do włączenia atrybutu SUID, lub “lepkiego” bitu dla katlogu. Więcej informacji o prawach dostępu i o ich przydzielaniu można znaleźć w dokumentacji systemowej polecenia chmod(1).
Uprawnienia symboliczne, określane również jako wyrażenia symboliczne, przy określaniu praw dostępu do plików lub katalogów wykorzystują litery w miejsce wartości liczbowych. Wyrażenia symboliczne wykorzystują składnię: (kto) (akcja) (uprawnienia), przy czym dostępne są następujące wartości:
Opcja | Litera | Znaczenie |
---|---|---|
(kto) | u | Użytkownik (właściciel) |
(kto) | g | Grupa |
(kto) | o | Inni |
(kto) | a | Wszyscy (“świat”) |
(akcja) | + | Dodanie uprawnień |
(akcja) | - | Usunięcie uprawnień |
(akcja) | = | Ustawienie uprawnień |
(uprawnienia) | r | Odczyt |
(uprawnienia) | w | Zapis |
(uprawnienia) | x | Wykonywanie |
(uprawnienia) | t | Bit “lepki” |
(uprawnienia) | s | Ustawienie UID lub GID |
Do ustawienia tych wartości, podobnie jak w przypadku wartości liczbowych, wykorzystywane jest polecenie chmod(1). Przykładowo, by zablokować dostęp innych użytkowników do PLIKU należy wpisać:
% chmod go= PLIK
Gdy musimy wykonać więcej niż jedną zmianę uprawnień parametry należy oddzielić przecinkami. Na przykład, poniższe polecenie usunie prawa zapisu do PLIKU grupie i innym. Następnie doda wszystkim prawo wykonywania:
% chmod go-w,a+x PLIK
Dodatkowo, oprócz opisanych wyżej praw dostępu, FreeBSD wykorzystuje również “flagi plików”. Flagi te umożliwiają wprowadzenie dodatkowego poziomu ochrony i kontroli plików. Nie dotyczą natomiast katalogów.
Dzięki zwiększonemu poziomowi kontroli plików system może zagwarantować, że w niektórych sytuacjach nawet użytkownik root nie będzie mógł usunąć bądź zmodyfikować plików.
Zmiany flag plików dokonuje się poleceniem chflags(1). Przykładowo, by plikowi plik1 nadać flagę nieusuwalności należy wydać poniższe polecenie:
# chflags sunlink plik1
Natomiast, by usunąć flagę nieusuwalności wystarczy wprowadzić takie samo polecenie
dodając “no” przed sunlink
:
# chflags nosunlink plik1
By wyświetlić flagi danego pliku wystarczy wpisać polecenie ls(1) z parametrem
-lo
:
# ls -lo plik1
Wynik powinien być zbliżony do poniższego:
-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 plik1
Niektóre z flag mogą być dodawane i usuwane jedynie przez użytkownika root, podczas gdy inne mogą być ustawiane również przez właściciela pliku. Zaleca się aby administratorzy przeczytali strony podręcznika systemowego chflags(1) oraz chflags(2).
Poprzedni | Spis treści | Następny |
Konsole wirtualne i terminale | Początek rozdziału | Struktura katalogów |
Ten i inne dokumenty można pobrać z ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
W przypadku pytań o FreeBSD prosimy przeczytać dostępną dokumentację przed kontaktem z <questions@FreeBSD.org>.
W sprawie zapytań o tę dokumentację prosimy o kontakt z <doc@FreeBSD.org>.