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