W linuksie każdy utworzony plik posiada określone prawa. Można je sprawdzić za pomocą polecenia ls -l, które listuje zawartość katalogu. Dla przykładowo utworzonego pliku, polecenie ls - l daje u mnie następujący wynik:
$ ls -l
-rw-r--r-- 1 sebastian sebastian 27 sie 9 15:47 przykład
Pierwszy znak oznacza rodzaj pliku. W tym przypadku jest to myślnik oznaczający zwykły plik. Na przykład "d" w tym miejscu oznacza katalog a "l" dowiązanie symboliczne. Następne dziewięć znaków oznacza prawa pliku. Dalej można odczytać właściciela pliku, grupę pliku, czas ostatniej modyfikacji i nazwę pliku.
Te dziewieć znaków określa prawa pliku dla właściciela pliku, grupy przypisanej do pliku i pozostałych użytkowników (wszystkich tych którzy nie są ani właścicielem pliku ani nie należą do grupy pliku). Prawa każdej z tych trzech "grup" (właściciel, grupa, pozostali użytkownicy) określają trzy znaki. Pierwsze trzy określają prawa właściciela pliku, kolejne trzy prawa grupy natomiast ostatnie trzy określają prawa pozostałych użytkowników.
W powyższym przykładzie właścicielem pliku jest sebastian, grupa pliku też się nazywa sebastian. Prawa pliku są natomiast następujące (pierwszy myślnik pomijamy bo oznacza on rodzaj pliku):
rw- dla właściciela pliku (sebastian)
r-- dla grupy pliku (sebastian)
r-- dla pozostałych użytkowników
Litera r (od słowa read - ang. czytać) oznacza prawa do odczytu pliku natomiast litera w (od słowa write - ang. pisać) oznacza prawo do zapisu czyli zaminy zawartości pliku. Oprócz tych dwóch praw może się jeszcze pojawić prawo wykonywania pliku - litera x (od słowa execute - ang. wykonywać). Myślnik oznacza brak danego prawa. Wracając do przykładu można powiedzieć, że właściciel pliku (sebastian) może odczytać plik i zmienić jego zawartość (rw). Użytkownicy należący do grupy sebastian mogą tylko odczytać plik (r), podobnie jak wszyscy pozostali użytkownicy pliku (r). Natomiast gdyby wszyscy użytkownicy posiadali prawa do odczytu i zapisu pliku, wówczas prawa pliku wyglądałyby następująco:
-rw-rw-rw-
Trzy ostatnie myślniki to są miejsca gdzie może pojawić się x jeśli zostaną nadane prawa wykonywania pliku dla właściciela, grupy, pozostałych użytkowników lub wszystkich naraz. Jeżeli wszyscy w tym wypadku posiadaliby prawa wykonywania pliku, wówczas wszyscy posiadaliby pełne prawa do pliku (odczyt, zapis, wykonywanie). Wtedy prawa pliku wyglądałby następująco:
-rwxrwxrwx
To są pełne prawa do pliku dla wszystkich. Jeżeli jakiegoś prawa nie ma, wtedy pojawia się zamiast litery myślnik. Stąd te myśliniki w pierwszym przykładzie. Wyżej wspomniano co oznaczają poszczególne prawa dla plików. Co oznaczają one natomiast dla katalogów ? Dla katalogu prawo odczytu - r oznacza prawo do przeszukania zawartości katalogu, prawo zapisu - w oznacza prawo do zmiany zawartości czyli prawo do tworzenia i usuwania plików w katalogu, natomiast prawo wykonywania - x dla katalogu oznacza prawo wejścia do niego.
Podsumowując:
prawo odczytu - r - dla pliku oznacza odczyt zawartości pliku, dla katalogu odczyt zawartości katalogu
prawo zapisu - w - dla pliku oznacza zamianę zawartości pliku, dla katalogu prawo do tworzenia i usuwania plików w katalogu
prawo wykonywania - x - dla pliku oznacza uruchomienie pliku jako programu, dla katalogu oznacza prawo wejścia do katalogu
Do zmiany/nadawania praw służy polecenie chmod. Można go używać w dwojaki sposób: za pomocą liter i znaków lub za pomocą liczb.
Jeżeli używamy liter i znaków składania jego polecenia jest następująca.
chmod <kogo dotyczy zmiana praw><w jaki sposób prawa będą zmieniane><jakie prawa> nazwa_pliku
kogo dotyczy zamiana praw - tu używamy następujących liter, które oznaczają:
u - (user - ang. użytkownik) - oznacza właściciela pliku
g - (group - ang. grupa) - oznacza grupę użytkowników pliku
o - (others - ang. inni) - oznacza pozostałych użytkowników pliku
a - (all - ang. wszyscy) - oznacza wszystkich użytkowników
w jaki sposób prawa będą zmieniane - tu używamy trzech znaków, które oznaczają:
+ - dodanie praw (dodanie kolejnych praw do już istniejących)
- - odebranie praw (odjęcie praw od istniejących)
= - nadanie praw (te które były wcześniej są kasowane)
jakie prawa - tu używa się liter praw omówionych wcześniej czyli:
r - prawo do odczytu
w - prawo do zapisu
x - prawo wykonywania
Dla katalogów znaczenie jest takie jak omówiono.
Weźmy na przykład plik o nazwie tomek, który posiada następujące prawa:
-rw-r--r--
Widać, że właściciel ma prawo do zapisu i odczytu a pozostali tylko do odczytu. Chcemy nadać grupie i pozostałym użytkownikom prawo do zapisu. Używamy więc polecenia:
chmod go+w tomek
(go+w jest pisane ciągiem bez spacji). Teraz prawa pliku będą wyglądały następująco:
-rw-rw-rw-
Wszyscy posiadają takie same prawa, mogą czytać i zmieniać zawartość pliku. Ten sam efekt można byłoby uzyskać wydając polecenie: chmod go=rw tomek. Wtedy prawa grupy i pozostałych użytkowników zostałyby zmienione na rw (stare są kasowane). Efekt jest ten sam. Załóżmy, że chcemy teraz wszystkim odebrać prawo do zapisu pliku. Można użyć polecenia:
chmod a-w tomek
lub
chmod ugo-w tomek
Wtedy prawa pliku wyglądałyby następująco:
-r--r--r--
Jak widać te same prawa można nadawać w różny sposób. Parametry ugoa jak i rwx można łączyć ze sobą (pisze się je łącznie bez spacji). Jeżeli chcemy teraz nadać wszystkim pełne prawa do pliku możemy użyć:
chmod a=rwx tomek
chmod ugo=rwx tomek
chmod ugo+wx tomek
Drugim sposobem nadawania praw jest użycie polecenia chmod przy pomocy liczb. Poszczególne prawa odpowiadają następującym liczbom:
r - odczyt - 4
w - zapis - 2
x - wykonanie - 1
Łączne prawa odpowiadają sumom liczb. Na przykład 6 oznacza prawo do odczytu i zapisu. Wszystkie prawa można przedstawić za pomocą następujących cyfr:
0 - brak praw (---)
1 - prawo do wykonywania (--x)
2 - prawo do zapisu (-w-)
3 - prawo do zapisu i wykonania (-wx)
4 - prawo do odczytu (r--)
5 - prawo do odczytu i wykonania (r-x)
6 - prawo do zapisu i odczytu (rw-)
7 - prawo do zapisu, odczytu i wykonania - pełne prawa (rwx)
Polecenie chmod z użyciem liczb działa jak chmod z użyciem = tzn. nadaje prawa zastępując stare nowymi. Używamy go w następujący sposób:
chmod xxx nazwa_pliku
gdzie xxx to trzycyfrowa liczba (niekoniecznie musi być trzycyfrowa) składająca się z cyfr od 0 do 7. Pierwsza cyfra opisuje prawa właściciela pliku, druga cyfra odpowiada za prawa grupy a ostatnia za prawa pozostałych użytkowników.
Na przykład polecenie:
chmod 664 bartek
nada plikowi bartek prawa do odczytu i zapisu dla właściciela pliku, prawa do odczytu i zapisu dla grupy pliku i prawa do odczytu dla pozostałych użytkowników (-rw-rw-r--), przy czym nie ma znaczenia jakie prawa plik miał wcześniej. Z kolei polecenie:
chmod 777 bartek
nada temu samemu plikowi pełne prawa dla wszystkich użytkowników (-rwxrwxrwx). Polecenie:
chmod 700 aneta
nadaje pełne prawa dla właściciela pliku aneta i żadnych praw pozostałym użytkownikom (-rwx------). Polecenie:
chmod 666 tomek
nadaje wszystkim prawa do zapisu i odczytu pliku tomek (-rw-rw-rw-).
Liczba użyta w poleceniu chmod może być także czterocyfrowa. Wtedy pierwsza cyfra odpowiada za prawa specjalne pliku, a trzy następne nadają prawa tak jak liczba trzycyfrowa. Na przykład w poleceniu chmod 1770 tomek jedynka ustawia tzw. lepki bit a 770 nadaje pełne prawa dla właściciela i grupy i żadnych praw dla pozostałych użytkowników. Tzw. lepki bit na przykład dla katalogów oznacza, że pliki w takim katalogu może usunąć tylko właściciel katalogu lub właściciel danego pliku.
Więcej na temat praw plików i praw specjalnych w man chmod i info chmod.