#Linux – chmod

Linux to popularny system operacyjny, który umożliwia użytkownikom dostęp do szerokiej gamy narzędzi i funkcji. Jedną z najważniejszych z nich jest chmod, która umożliwia zarządzanie uprawnieniami do plików i katalogów. Funkcja chmod jest nieodłącznym narzędziem w systemie Unix, umożliwiającym precyzyjne zarządzanie uprawnieniami dostępu do plików i katalogów. Zastosowania chmod są szerokie i obejmują zabezpieczanie plików, udzielanie uprawnień grupom, wykonywanie skryptów, kontrolowanie uprawnień do odczytu i zapisu oraz jednoczesną zmianę uprawnień dla wielu plików. Zapoznanie się z tymi praktycznymi przykładami pomoże Ci w pełni wykorzystać potencjał funkcji chmod i lepiej chronić swoje dane w systemie Unix.

Używanie funkcji chmod

Funkcję chmod można używać na kilka sposobów, zależnie od preferencji użytkownika i poziomu zaawansowania. Oto kilka najważniejszych metod.

Metoda symboliczna (tekstowa):

Metoda symboliczna pozwala na zmianę uprawnień przy użyciu symboli i operatorów. Możemy używać symboli, takich jak u (właściciel), g (grupa) i o (pozostali użytkownicy), aby wskazać, którym grupom użytkowników chcemy zmienić uprawnienia. Jeżeli te symbole nie zostaną podane, uprawnienia zostaną nadane wszystkim użytkownikom. Rodzaje uprawnień określa się za pomocą symboli r (odczyt), w (zapis) oraz x (wykonywanie). Przykłady:

Nadanie pełnych uprawnień dla właściciela, grupy i innych użytkowników (oba zapisy są równoważne):

chmod ugo+rwx nazwa_pliku
chmod +rwx nazwa_pliku

Nadanie uprawnień do wykonywania (czyli uruchomienia skryptu) wszystkim użytkownikom:

chmod +x skrypt.sh

Nadanie uprawnień do odczytu i zapisu dla właściciela oraz tylko odczytu dla grupy:

chmod u+rw,g+r nazwa_pliku

Odebranie prawa zapisu dla grupy i innych użytkowników:

chmod go-w nazwa_pliku

Nadanie uprawnień tylko do odczytu dla wszystkich użytkowników:

chmod a=r nazwa_pliku

Metoda numeryczna

Metoda numeryczna opiera się na wartościach numerycznych, które reprezentują zestaw uprawnień. Każdej kategorii użytkowników (właściciel, grupa, pozostali) przypisane są konkretne liczby. Na przykład, 4 oznacza odczyt, 2 – zapis, a 1 – wykonanie. Sumowanie wartości odpowiadających danym uprawnieniom daje pełny zestaw uprawnień. Przykłady:

Nadanie uprawnień do odczytu i zapisu dla właściciela oraz tylko odczytu dla grupy:

chmod 640 nazwa_pliku

Nadanie pełnych uprawnień dla właściciela, odczytu i wykonania dla grupy oraz tylko wykonania dla innych użytkowników:

chmod 751 nazwa_pliku

Użycie pliku referencyjnego

Inną przydatną techniką jest użycie pliku referencyjnego, który ma już ustalone uprawnienia. Możemy skopiować uprawnienia tego pliku i zastosować je do innego pliku lub katalogu przy użyciu polecenia:

chmod --reference=plik_referencyjny plik_docelowy

Zmiana uprawnień rekursywnie

Czasami potrzebujemy zmienić uprawnienia dla wielu plików i katalogów jednocześnie. W takim przypadku możemy użyć opcji -R lub --recursive, która pozwala na rekursywne zmienianie uprawnień dla wszystkich plików i katalogów wewnątrz danego katalogu. Przykład:

Nadanie uprawnień do zapisu i odczytu dla właściciela, grupy i innych użytkowników dla wszystkich plików i katalogów wewnątrz danego katalogu:

chmod -R ugo+rw nazwa_katalogu

Praca ze łączami symbolicznymi

Funkcja chmod umożliwia również zmianę uprawnień plików, które są łączami symbolicznymi. Możemy użyć opcji -h lub --no-dereference, aby zmienić uprawnienia łącza symbolicznego, a nie docelowego pliku. Przykład:

Zmiana uprawnień dla samego linku symbolicznego, a nie dla pliku, do którego on prowadzi:

chmod -h 777 link_symboliczny

Zmiana uprawnień dla wielu plików

Funkcja chmod umożliwia jednoczesną zmianę uprawnień dla wielu plików, co jest niezwykle przydatne, gdy potrzebujesz zastosować te same uprawnienia do większej liczby plików lub katalogów. Przykłady:

Nadanie uprawnień wszystkim plikom w katalogu

find /var/www/my_website -type f -exec chmod 755 {} \;
find /var/www/my_website -type f -exec chmod u=rwx,go=rx {} \;

Nadanie uprawnień wszystkim folderom w katalogu

find /var/www/my_website -type d -exec chmod 755 {} \;
find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;