Komendy Linux: Nadawanie praw dostępu do plików

Nadawanie praw dostępu do plików i katalogó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:

 

Cyfra

Prawa

Litera

0

 Brak praw

 

1

 Wykonywanie

x

2

 Zapisywanie

w

3

 Wykonywanie i zapisywanie

wx

4

 Odczytywanie

r

5

 Odczytywanie i wykonywanie

rx

6

 Odczytywanie i zapisywanie

rw

7

 Odczytywanie, zapisywanie i wykonywanie

rwx

 

Prawa dostępu

Wartość liczbowa

Opis

-rw-------

600

Tylko właściciel ma prawo do odczytu i zapisu.

-rw-r--r--

644

Właściciel ma prawo do zapisu i odczytu, a reszta tylko prawo odczytu.

-rw-rw-rw-

666

Wszyscy mają prawo do odczytu i zapisu.

-rwx------

700

Tylko właściciel ma prawo do odczytu, zapisu, uruchomienia.

 rwxr-xr-x

 755

Właściciel ma wszystkie prawa do pliku, reszta tylko prawo do odczytu i uruchomienia.

-rwxrwxrwx

777

Wszyscy mają pełne prawa (nie zalecane).

-rwx--x--x

711

Wszystkie prawa ma właściciel, reszta tylko prawo uruchomienia.

drwx------

700

Właściciel katalogu ma pełne prawa do niego (katalogi mają literkę 'd' na

początku zamiast '-')

drwxr--r--

744

Właściciel ma pełne prawa do katalogu, reszta ma prawo do odczytu.

-rwxr-xr-x

 4755

Właściciel ma pełne prawa do pliku, grupa ma prawa odczytu i wykonania, reszta ma prawo uruchamiania. Plik ma atrybut SUID -pierwsza cyfra w opcjach(4). Oznacza to, że plik wykonywalny, np. wywołuje proces i oddaje mu kontrole nad wykonaniem zadania. Bez opcji SUID proces działa z uprawnieniami użytkownika, który uruchomił plik - co czasami może powodować nie wykonanie zadania, gdyż użytkownik nie miał dostatecznych uprawnień. Z opcją SUID proces pobiera uprawnienia właściciela pliku - najczęściej roota. Polecenie ping i uprawnienia do pliku wykonywalnego są świetnym przykładem ustawienia tej opcji. 

 

By dokładniej wyjaśnić działanie operacji nadawania uprawień plikom i katalogom, wypiszemy prosty przykład składni polecenia chmod:

 

chmod 777 plik1.txt

[email protected]:~$ 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)

============

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:

 

[email protected]:~$ chmod 744 plik1

[email protected]:~$ 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ć.

 

[[email protected] 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.

 

[email protected]:~$ chmod 666 plik2

chmod :failed to get attributes of 'plik2': Nie ma takiego pliku ani katalogu

 

 

 

-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.

 

[email protected]:~$ 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.

 

[email protected]:~$  ls -l

drwxrwxr-x 3 user user 1024 lut 21 14:58 kat2 

[email protected]:~$  chmod 777 kat2 

[email protected]:~$  ls -l

drwxrwxrwx 3 user user 1024 lut 21 14:58 kat2

[email protected]:~$  ls -l kat2

drwxrwxr-x 2 user user 1024 lut 21 14:58 kat3 

[email protected]:~$  chmod -R 777 kat2 

[email protected]:~$  ls -l

drwxrwxrwx 3 user user 1024 lut 21 14:58  kat2 

[email protected]:~$  ls -l kat2 

drwxrwxrwx 2 user user 1024 lut 21 14:58  kat3