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.