FreeBSD, będąc bezpośrednim potomkiem systemu UNIX(R) 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 -ltotal 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).
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.