Komendy Linux: Nadawanie praw dostępu do plików
Prawa dostępu do plików lub katalogów nadajemy za pomocą polecenia chmod. Określamy w nim prawa dostępu do danego elementu na dysku. Istnieje kilka sposób na nadawanie uprawień, jednak najczęściej używa się jednego z dwóch sposobów- za pomocą numerków lub literek. Numerycznie chmod przyjmuje odpowiednią wartość potęgi dwójki dla każdego typu akcji (zapisu, odczytu, uruchomienia). Aby zapisać uprawnienia w systemie numerycznym należy dodać liczby odpowiadające uprawnieniom, które chcemy przyznać. Liczby należy dodawać do siebie, zgodnie z oczekiwanymi przez nas prawami dostępu.
Lista praw dostępu do plików i ich krótki opis:
By dokładniej wyjaśnić działanie operacji nadawania uprawień plikom i katalogom, wypiszemy prosty przykład składni polecenia chmod:
user@linux:~$ chmod 777 plik1.txt
user@linux:~$ vdir
-rwxrwxrwx 1 user user 12 lut 15 19:10 plik1
Jak widać, zapisane tutaj liczby 777 oznaczają odpowiednie litery powiązane z prawem (rwx)- odczytu, zapisu oraz wykonywania. Pamiętaj, że prawa otrzymywane są w wyniku sumowania składowych, czyli np.:
- 4 - r
- 2 - w
- 1 - x
- 4+2+1=7 <== przyjmuje prawa dla właściciela (prawo do odczytu, zapisu i wykonywania)
- 4+2+1=7 <== przyjmuje prawa dla grupy (prawo do odczytu, zapisu i wykonywania)
- 4+2+1=7 <== przyjmuje prawa dla innych osób w systemie (prawo do odczytu, zapisu i wykonywania)
Suma składowych: 7+7+7= 777
W powyższym przykładzie można dostrzeć także informację o przypisanych prawach pliku, mianowicie- rwxrwxrwx. Dzięki temu zapisowi, możemy rozpoznać nadane uprawienia do tego pliku, które umożliwiają wykonywanie wszystkich czynności przez wszystkich użytkowników systemu. Aby lepiej objaśnić zasadę stosowania zapisu numerycznego, weźmy przykładowy plik z poprzedniego przykładu. Chcemy, aby właściciel pliku posiadał prawa do zapisu i odczytu oraz uruchomienia, a grupa, do której został przypisany ten plik - tylko prawa do jego odczytu. By to zrobić, należy zsumować odpowiednie cyfry by uzyskać takowe prawo. A zatem:
właściciel - 4+2+1 = 7 (czyli prawo do odczytu, zapisu i wykonania),grupa - 4 = 4 (prawo do odczytu),inni - 4 = 4 (prawo do odczytu).
Teraz używamy polecenia chmod, nadając prawa do pliku:
user@linux:~$ chmod 744 plik1
user@linux:~$ vdir
-rwxr--r-- 1 user user 12 lut 15 19:10 plik1
Jak widać, prawa zostały ustawione poprawnie. Dla wyjaśnienia pokazaliśmy przykładowe operacje w terminalu poniżej:
Istnieje także inny sposób nadawnia uprawień- za pomocą liter. Aby zapisać uprawnienia w systemie znakowym należy wpisać znak u, g, o, a, które oznaczają klasy użytkowników, mianowicie:
u - użytkownik (ang. user)g - grupa (ang. group)o - inni (ang. others)a - wszyscy (ang. all)
a następnie dodać znak, taki jak:
+ (plus) jeżeli chcemy dodać uprawnienia,- (minus) jeżeli chcemy odebrać uprawnienia,= (znak równości) jeżeli chcemy zmienić uprawnienia (tzn. przypisać takie, jakie podamy), a następnie odpowiednie oznaczenia z tabeli. Po przecinku można dopisać kolejne uprawnienia (przykładowo: u=rwx,g+rw,o-r wprowadza następujące zmiany- dla właściciela - ustawiono odczyt, zapis oraz wykonanie, ale to ostatnie tylko wtedy, jeżeli ono już jest ustawione, w innych plikach pozostanie wyłączone, dla grupy - dodano odczyt i zapis, dla innych - odebrano odczyt.)
By zobaczyć, jakie prawa ma dany plik, lub katalog wystarczy użyć polecenia ls z (opcją -l).
Przykłady użycia
$chmod a+w plik.txt – wszyscy będą mogli edytować 'plik.txt'$chmod o-x plik.txt – usunie możliwość wykonywania 'plik.txt' przez pozostałych użytkowników$chmod go=rx plik.txt – pozostali użytkownicy, oraz grupa będą mogli tylko czytać i wykonywać.$chmod -R 777 /home/user – wszyscy będą mogli zmieniać zawartość katalogu /home/user oraz jego podkatalogów, jak też czytać go i wykonywać zawarte w nim pliki
Parametry polecenia (chmod):
-c , Informuje nas o plikach, których prawa rzeczywiście udało się zmienić.
[root@linux linux]# chmod -c 666 plik1
uprawnienia 'plik1' zmienione na 0666 (rw-rw-rw-)
-f , --silent , --quiet
Pomija informacje o błędach, jakie wystąpiły podczas próby zmiany praw dostępu.
user@linux:~$ chmod 666 -f plik2
user@linux:~$
-v , --verbose
Wyświetla informacje dla każdego pliku, którego prawa chcemy zmienić, niezależnie od tego, czy operacja zmiany uprawnień zakończyła się powodzeniem.
user@linux:~$ chmod -v 777 p*
nie udało się zmienić uprawnień 'plik1' na 0777 (rwxrwxrwx)
chmod : changing permissions of 'plik1': Operacja nie dozwolona
uprawnienia 'plik2' zmienione na 0777 (rwxrwxrwx)
-R , --recursive
Jeżeli zmieniamy prawa dostępu do katalogu, to ulegają zmianie tylko informacje odnoszące się do niego samego, a nie do elementów w nim zawartych. Dzięki parametrowi -R możemy zmienić rekurencyjnie także prawa dostępu do wszystkich elementów znajdujących się w danym katalogu.
user@linux:~$ ls -l
drwxrwxr-x 3 user user 1024 lut 21 14:58 kat2
user@linux:~$ chmod 777 kat2
user@linux:~$ ls -l
drwxrwxrwx 3 user user 1024 lut 21 14:58 kat2
user@linux:~$ ls -l kat2
drwxrwxr-x 2 user user 1024 lut 21 14:58 kat3
user@linux:~$ chmod -R 777 kat2
user@linux:~$ ls -l
drwxrwxrwx 3 user user 1024 lut 21 14:58 kat2
user@linux:~$ ls -l kat2
drwxrwxrwx 2 user user 1024 lut 21 14:58 kat3