Prawa dostępu

Prawa dostępu – mechanizm w systemach uniksowych, mający na celu umożliwić określenie uprawnień odczytu, edycji i uruchamiania dla poszczególnych użytkowników. Ma on na celu zapewnienie bezpieczeństwa, stabilności i kontroli prywatności w systemach wielodostępnych.

Prawa dostępu przydzielane są dla kategorii:

  • user – użytkownik, właściciel pliku,
  • group – grupa, właściciel pliku,
  • other – pozostali użytkownicy.

Dla każdej z tych kategorii możliwe są trzy prawa dostępu, opisane literowo (rwx) lub liczbowo trzema bitami:

  • read – odczyt, wartość – 100(2) = 4(8),
  • write – zapis, wartość – 010(2) = 2(8),
  • execute – wykonywanie, wartość 001(2) = 1(8).

Standardowym symbolicznym sposobem zapisu uprawnień jest:

-rwxr-xr--   1 fizyk fizyk 2010 kwi 16 13:09 plik
tuuugggooo
t – oznacza typ pliku (- zwykły, d katalog, l dowiązanie symboliczne, s gniazdo, f FIFO, c urządzenie znakowe, b urządzenie blokowe)
u – uprawnienia właściciela
g – uprawnienia grupy
o – uprawnienia pozostałych

Zapis liczbowy praw dostępu polega na przedstawieniu uprawnień za pomocą trzycyfrowej lub czterocyfrowej liczby ósemkowej, której kolejne cyfry oznaczają: uprawnienia specjalne (w liczbie trzycyfrowej nie występuje), uprawnienia użytkownika, uprawnienia grupy, uprawnienia pozostałych

  • rwx r-x r-- → 111 101 100 (2) → 4+2+1 4+1 4 (8) → 754 (8)

Znaczenie praw dostępu dla zwykłych plików jest intuicyjne, natomiast dla katalogów znaczenie jest następujące:

  • jeżeli użytkownik ma prawo x do katalogu, to może do niego "wejść"
  • jeżeli użytkownik ma prawo r do katalogu, to może wyświetlić jego zawartość
  • jeżeli użytkownik ma prawo w do katalogu, to może w nim tworzyć i kasować pliki/katalogi

Powyższe prawa można interpretować w ten sposób, że jeśli np. użytkownik ma prawa -wx, to może w tym katalogu tworzyć pliki, poruszać się w obrębie jego struktury, ale nie może wyświetlić jego zawartości.

Oprócz podstawowego zestawu uprawnień (3×rwx) do każdego pliku/katalogu przyporządkowane są jeszcze 3 bity określające specjalne prawa dostępu:

  1. SetUserID, setuid, SUID – w przypadku SUIDa ustawionego na pliku wykonywalnym powoduje wykonanie pliku z UIDem ustawionym na właściciela pliku (jeżeli właścicielem zSUIDowanego pliku jest root, to uruchomienie takiego pliku z dowolnego konta spowoduje wykonanie tego pliku z poziomem uprawnień roota)
  2. SetGroupID, setgid, SGID – w przypadku pliku analogicznie do SUIDa; w przypadku SGIDa ustawionego na katalogu wszystkie nowe pliki/katalogi tworzone wewnątrz będą dziedziczyły po nim grupę zamiast po GID procesu tworzącego (BSD semantics)
  3. Sticky – w przypadku pliku wykonywalnego powoduje wymuszenie przechowywania jego kodu w pamięci (ustawianie Sticky na plikach wykonywalnych jest obecnie rzadko stosowane); w przypadku Sticky ustawionego na katalogu umożliwia kasowanie/zmianę nazwy elementów w nim zawartych tylko przez właściciela "Sticky-katalogu", właściciela pliku/katalogu w nim zawartego lub roota (w normalnym przypadku wewnątrz katalogu każdy może zmieniać nazwę i usuwać elementy o ile podstawowe uprawnienia to dopuszczają)

Przykłady

-rwsr-sr-x    1 root     root       591344 2005-12-12 18:01 /usr/bin/cdrdao

cdrdao to program służący do wypalania płyt CD, do działania potrzebuje uprawnień roota, aby mógł być uruchamiany przez użytkowników innych niż root ma nadane uprawnienia SUID i SGID.

rwsr-sr-x odpowiada 6755(8)
 drwxrwxrwt   13 root     root         4096 2006-09-26 02:05 /tmp

ustawianie prawa Sticky na katalogu /tmp jest często spotykaną praktyką

rwxrwxrwt odpowiada 1777(8)

Do zmiany uprawnień do pliku służy polecenie chmod.

Poleceniem, którym można sprawdzić prawa dostępu do pliku i katalogu jest ls -l.