Uprawnienia plików, czyli wara od moich danych, czyli Ugor w X

W un*xach pliki mają inne atrybuty, niż w DOSie czy Windows. Tutaj są trzy grupy po trzy uprawnienia. Grupy praw wzięły się stąd, że użytkownicy dla pliku są podzieleni na trzy kategorie (każdy użytkownik jest w dokładnie jednej klasie): właściciel (ten, który plik utworzył), grupa, do której plik należy oraz cała reszta świata. Każda z kategorii użytkowników może mieć prawo odczytywania pliku (r), zapisywania pliku (w) i wykonywania pliku (x). Żadne z tych praw nie wymaga ustawiania innego prawa. Prawo do zapisywania pliku wcale nie zezwala na usuwanie tego pliku, pozwala jedynie na zmianę zawartości. Do skasowania trzeba nieco więcej. Prawo do wykonywania pozwala na uruchomienie pliku. Jeśli to plik binarny, to zostanie uruchomiony jak program. Jeśli to plik tekstowy, to zostanie uruchomiony jako skrypt, najprawdopodobniej basha. Dla katalogu prawo odczytu zezwala na odczytanie zawartości katalogu (czyli wylistowanie katalogu). Prawo zapisu daje możliwość kasowania (to jest to więcej) i tworzenia plików, zaś prawo wykonywania pozwala przez ten katalog "przechodzić", tzn. używać go jako nie-ostatniego elementu w ścieżce: less /etc/passwd. Gdyby /etc nie miał prawa wykonywania, to nie mógłbyś dostać się do pliku passwd.
Klasy uzytkowników też mają nazwy: user, group i others. Teraz można już opisywać atrybuty pliku: u=rw,g=r,o=r. Wylistuj jakiś katalog poleceniem ls -l, dostaniesz coś takiego:

drwxr-xr-x  2 dozzie  users    464 maj  2 00:44 bash
-rw-r--r--  1 dozzie  users   2869 maj  2 00:08 index.html
-rw-r--r--  1 dozzie  users   8055 kwi 20 19:20 compilers.html
drwxr-xr-x  2 dozzie  users    304 mar 25 14:27 dydaktyka
-rw-r--r--  1 dozzie  users   7274 maj  1 20:53 index.html
drwxr-xr-x  2 dozzie  users    320 kwi 28 23:32 files
drwxr-xr-x  2 dozzie  users    176 kwi 30 23:14 galeria
-rw-r--r--  1 dozzie  users   2313 kwi 30 22:55 index.html
drwxr-xr-x  2 dozzie  users    368 kwi 30 23:54 images
-rw-r--r--  1 dozzie  users   4041 maj  1 14:42 index.html
-rw-r--r--  1 dozzie  users   1349 maj  1 15:08 linki.html
drwxr-xr-x  2 dozzie  users    112 maj  1 14:45 linux-advanced
-rw-r--r--  1 dozzie  users   3367 maj  1 14:42 index.html
-rw-r--r--  1 dozzie  users   1065 maj  1 14:37 menu.html
drwxr-xr-x  2 dozzie  users    408 maj  1 21:00 mystuff
-rw-r--r--  1 dozzie  users   3850 maj  1 21:01 mystuff.html
drwxr-xr-x  2 dozzie  users    160 kwi 24 23:42 polibuda
-rw-r--r--  1 dozzie  users   1246 kwi 20 17:22 soft.html
drwxr-xr-x  2 dozzie  users    240 kwi 28 23:48 vim
-rw-r--r--  1 dozzie  users   5282 kwi 18 13:04 index.html
drwxr-xr-x  2 dozzie  users    208 kwi 25 22:35 windows
-rw-r--r--  1 dozzie  users   2336 mar 25 14:27 index.html

Pierwsza kolumna to właśnie uprawnienia, potem ilość dowiązań twardych (o tym później), właściciel pliku, grupa, do której plik należy, rozmiar (u mnie podany w bajtach, choć może być w blokach po 512kB), data i czas modyfikacji, no i nazwa pliku.
Atrybuty pliku to najpierw typ pliku (- dla zwykłego, d dla katalogu, c dla pliku znakowego, b dla blokowego, l dla linku symbolicznego), potem trzy uprawnienia dla właściciela (u), kolejne trzy dla grupy (g) i ostatnie trzy dla pozostałych (o). Warto zapamiętać tę kolejność: ugo, podobnie jak kolejność rwx.
A jak zmienić prawa pliku? Poleceniem chmod: chmod u+rw,g=r,o-wx nazwa-pliku dodaje prawa odczytu i zapisu właścicielowi (prawo wykonywania się nie zmienia), grupie ustawia tylko prawo czytania (grupa będzie miała tylko prawo czytania, a zapisu i wykonywania już nie), a "reszcie świata" odbiera prawa zapisu i wykonywania (prawo odczytu się nie zmienia). Dwie uwagi odnośnie łączenia poleceń ustawiania praw: nadawanie praw musi być oddzielane przecinkiem bez spacji; klasy użytkowników można łączyć: chmod oug+x plik-co-sie-stanie-wykonywalny nada całemu światu prawa wykonywania naszego pliku (zwróć uwagę na kolejność literek).
Czasem wygodnie posłużyć się uprawnieniami ósemkowymi (a czasem nie ma innej możliwości :) ). Te są złożone z liczby trzycyfrowej, a cyfry mogą być od 0 do 7 (system ósemkowy). Wartości poszczególnych praw wyglądają następująco: prawo do odczytu ma wartość 4, prawo do zapisu ma wartość 2, prawo wykonywania natomiast 1 (jest najtańsze ;] ) - tu się przydaje zapamiętana kolejność rwx. Prawo do zapisu i odczytu to suma wartości, więc 6. Prawo do wszystkiego to 7. Właściciel jest zapisywany na lewej pozycji, grupa na środkowej pozycji, reszta świata na prawej (znowu kolejność: ugo). Teraz uprawnienia rwx-wx--x (u=rwx,g=wx,o=x) można zapisać jako 731. Zatem chmod 644 jakis-plik pozwoli na odczyt/zapis właścicielowi, a grupie i reszcie świata zezwoli jedynie na odczyt.
Jeszcze słówko o zmianie właściciela i grupy pliku. Do tego służy polecenie chown o trzech różnych składniach (właściwie o jednej, ale to by skomplikowało zapis): 1) chown nowy-wlasciciel pliki... 2) chown nowy-wlasciciel:nowa-grupa pliki... 3) chown :nowa-grupa pliki... To niezbyt skomplikowane, nie? Ale właściciela może zmieniać tylko administrator systemu (root), co jest podyktowane względami bezpieczeństwa. A do zmiany grupy dla ułatwienia dodano narzędzie chgrp o banalnej składni chgrp nowa-grupa pliki...
To by było na tyle, jeśli chodzi o uprawnienia plików. Ale obiecałem jeszcze opowiedzieć, co to są dowiązania, czyli linki. Otóż są dwa rodzaje linków: twarde i symboliczne. Twardy link to w uproszczeniu inna nazwa tego samego pliku. Każdy plik ma co najmniej jedno takie dowiązanie: oryginalną nazwę. Twarde dowiązanie odnosi się do konkretnych bloków na dysku, nie do jakiejkolwiek nazwy. Jeśli utworzysz twardy link do pliku bleble.xx, a potem zmienisz nazwę pliku z bleble.xx na ble.y, to twarde dowiązanie dalej będzie wskazywać na ten plik, co więcej, każda modyfikacja pliku przez dowiązanie będzie widoczna przez oryginalną nazwę i na odwrót. A takie dowiązania tworzy się poleceniem ln co-dowiazac gdzie-dowiazac. Z raczej oczywistych względów z takim linkiem nie da się wyjść poza jeden dysk. Dla strachliwych: jak dowiążesz plik na twardo, a potem skasujesz dowiązanie, to nie stracisz tego pliku. System liczy sobie dowiązania twarde i usuwa plik dopiero wtedy, gdy ta ilość spadnie do zera (nazwa pliku jest też dowiązaniem twardym). Plik będzie dostępny pod tą drugą nazwą.
Drugą (i ostatnią :) ) kategorią dowiązań jest link symboliczny (symlink). Ten już nie odwołuje się do bloków na dysku, tylko do ścieżki i nazwy pliku. Dzięki temu możesz wiązać w ten sposób pliki pochodzące z innych dysków (a nawet z internetu). Tylko że jak usuniesz plik oryginalny, to dowiązanie dalej pokazuje na tę ścieżkę, mimo, że pliku już nie ma. Można w ten sposób podmienić plik nie ruszając dowiązania symbolicznego. Ten rodzaj linków tworzysz poleceniem ln -s co-dowiazac gdzie-dowiazac. Dodajesz tylko przełącznik -s do polecenia ln.


Dalsza część kursu
Poprzednia część kursu
Jadłospis