Linux został stworzony z myślą o pracy jako system wieloużytkownikowy, będący podłączony do sieci i świadczący różne usługi jako serwer. Do takiego systemu operacyjnego zazwyczaj dostęp na ogromna ilość użytkowników. W takim wypadku konieczne jest zastosowanie jasnych zasad, praw dostępu do katalogów oraz plików poprzez poszczególne grupy czy jednostki.

Takie ograniczenia zapewniają nam większą prywatność oraz bezpieczeństwo. Dlatego w systemach Uniksowych zostały stworzone odpowiednie prawa oraz atrybuty dla plików oraz katalogów. Prawa dostępu będą takie same dla plików, natomiast w przypadku atrybutów mogą występować zmian.

Atrybuty zależą od systemu operacyjnego, a dokładniej od jego systemu plików. Atrybuty plików mogą stanowić część plików lub są umieszczane łącznie dla wielu plików we wspólnej strukturze tworząc kartoteki. W wielu systemach operacyjnych kartoteki plików są traktowane jak pliki. Dlatego różne atrybuty możemy spotkać w Ext3, ReiserFS lub Btrfs.

W systemie Linux do każdego pliku, czy folderu przypisany jest jego właściciel (owner). Najczęściej jest to użytkownik, który stworzył ten plik. Następnie prawa dotyczą grupy właściciela pliku (group) a potem pozostałych użytkowników (other).

Prawa dostępu

Dla każdego pliku możliwe jest ustawienie trzech praw dostępu, które opisane jest w następujący sposób:

  • read – prawo do odczytania (r) zawartości pliku lub wyświetlania zawartości katalogu.
  • write – prawo do zapisywania, modyfikowania (w) pliku lub tworzenia, modyfikowania plików i katalogów w danym katalogu.
  • execute – prawo do uruchomienia (x) pliku lub wejścia do katalogu.

Do sprawdzenia praw plików służy polecenie ls wydawane w konsoli. Dla przykładu wynik takiego polecenia może wyglądać następująco:

[paszczak@muszelka scripts]$ ls -l data-collector.sh
-rwxrwxr-x  1 paszczak admins 4774 Mar 27 14:37 data-collector.sh

Pierwszy znak w tym wypadku - oznacza to, że mamy do czynienia ze zwykłym plikiem. W innych przypadkach możemy znaleźć różne oznaczenia w zależności od typu pliku. I tak możemy się spotkać z:

Zapis uprawnień może być przedstawiany również w formie ósemkowej. Każde prawo można przedstawić za pomocą cyfry w systemie ósemkowym. I tak prawo do odczytu reprezentowane jest przez 4, zapis przez 2 oraz prawo do wykonywania przez 1.

Prawa dostępu

Zapis ósemkowy praw dostępu polega na przedstawieniu uprawnień za pomocą 3 lub 4 cyfrowej liczby ósemkowej.

-rwxrwxr-x -> 111 111 101 (2) -> 4+2+1 4+2+1 4+1 (8) -> 775 (8)

Kolejne znaki oznaczają prawa dostępu do pliku odpowiednio dla właściciela (paszczak), grupy (admins) oraz innych użytkowników systemu.

Specjalne prawa dostępu

Oprócz podstawowych praw dostępu mamy możliwość przyporządkowania specjalnych praw. Określają je dodatkowe 3 bity, które możemy przypisać do danego katalogu lub pliku.

  • SUID – ustawienie SUIDa na pliku wykonywalnym powoduje wykonanie pliku z UIDem jaki jest ustawiony na właściciela pliku. Jeśli tym właścicielem jest root, to program uruchomi się na prawach roota. W trakcie większości operacji na plikach z ustawionymi atrybutami setuid, setgid – takimi jak: modyfikacja, przenoszenie, zmiana właściciela pliku – atrybuty te są usuwane. Przykładem może być polecenie ping, którego prawa wyglądają następująco: -rwsr-xr-x.
  • SGID – w przypadku plików zawierających programy wykonywalne, atrybuty setuid oraz setgid informują system operacyjny o konieczności nadania specjalnych uprawnień procesom powstałym z wykonania tych plików. Nowo powstały proces przejmuje uprawnienia właściciela pliku (często superużytkownika systemu), zaś dla atrybutu setgid – grupy będącej właścicielem pliku.
  • Sticky – zwany kolokwialnie bitem lepkości. Ustawienie tego bitu na pliku powoduje wymuszenie przechowywania jego kodu w pamięci. stawienie tego bitu dla pliku wykonywalnego powodowało pozostawienie jego segmentu kodu w pamięci wymiany po zakończeniu procesu. Stosowane to było dla często używanych programów (np. edytory tekstu); przyśpieszało ich uruchamianie przy kolejnym wywołaniu danego pliku wykonywalnego. Obecnie sticky bit używany jest do nadania katalogom przydanej właściwości. W katalogu z ustawionym sticky bit pliki mogą być usuwane lub przemianowywane tylko przez właściciela pliku lub owego katalogu. Sticky bit często stosowany w katalogu /tmp, do którego dostęp mogą mieć wszyscy użytkownicy systemu. Wyklucza to usuwanie przez użytkowników plików do nich nienależących.

Nadawanie uprawnień

Do zmiany uprawnień oraz atrybutów plików służą bliźniacze polecenia: chmod, chown, chgrp, chattr. Aby zapisać uprawnienia w systemie numerycznym należy dodać liczby odpowiadające uprawnieniom, które chcemy przyznać. Należy tak postąpić osobno dla właściciela, grupy oraz innych, np. właściciel – wszystkie prawa, grupa – odczyt, inni – brak należy zapisać jako: 740.

Aby zapisać uprawnienia w systemie znakowym należy wpisać znak u, g, o lub a (patrz Opis parametrów) następnie znak:

  • + – jeżeli chcemy dodać uprawnienia
  • – jeżeli chcemy odebrać uprawnienia
  • = – jeżeli chcemy zmienić uprawnienia (tzn. przypisać takie, jakie podamy)

Przykłady:

  • chmod a+w plik.txt – wszyscy będą mogli edytować plik.txt.
  • chmod -R 777 /home/kamil/pliki – wszyscy będą mogli zmieniać zawartość katalogu /home/kamil/pliki oraz jego podkatalogów. Możliwe będzie kopiowanie, zmiana i kasowanie innych plików oraz katalogów.
  • chown basia moj_dokument.txt – zmiana właściciela pliku moj_dokument.txt na basia
  • chmod go=rx plik.tx – pozostali użytkownicy, oraz grupa będą mogli tylko czytać i wykonywać.

Atrybuty

Atrybuty plików zależą od tego na jakim systemie plików są one umieszczone. Atrybuty plików mogą stanowić część plików lub są umieszczane łącznie dla wielu plików we wspólnej strukturze tworząc kartoteki. W wielu systemach operacyjnych kartoteki plików są traktowane jak pliki.

Do zmiany atrybutów plików służy polecenie chattr. Umożliwia ono użytkownikowi zmianę konkretnych atrybutów pliku w systemach plików ext2, ext3. Autorem programu jest Rémy Card, który był deweloperem systemu plików Ext2 (Second extended file system).

Atrybuty mogą wymusić kompresję pliku przed zapisaniem jego na dysk. Zapis danych do pliku wiąże się automatycznie z ich kompresją, a odczyt pliku pokazuje plik zdekompresowany. Inne opcje mogą powodować zeshredowanie obszaru na którym znajdował się plik po jego usunięciu. Aby obejrzeć jakie atrybuty posiada plik należy skorzystać z polecenia lsattr.

root@kaja:/home/paszczak000# lsattr -v kobiety.html 
3827360350 ------------------- kobiety.html

Polecenie lsattr wypisuje atrybuty plików z drugiego rozszerzonego systemu plików Linuksa (ext2). Opis atrybutów i ich znaczenia znajduje się w chattr(1). Opcja -v powoduje wypisanie wersji i numeru pokolenia (generation number) pliku.

Bibliografia

  • ajes

    Dodatkowo sgid na katalogu powoduje, że grupa do jakiej należy katalog jest dziedziczona przez obiekty (pliki, katalogi) w nim bezpośrednio utworzone.