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 -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).
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>.