chmod w Linuksie: uprawnienia plików i katalogów (755, 644, 777)

Mateusz Bogolubow

Mateusz Bogolubow

10-11-2026

Jak czytać uprawnienia w ls -l, co znaczą 755 i 644, czym różni się chmod od chown i umask, dlaczego chmod 777 i chmod -R 755 to zły pomysł. Z testami poleceń.

chmod w Linuksie: uprawnienia plików i katalogów (755, 644, 777)
chmod zmienia uprawnienia pliku lub katalogu: odczyt (r = 4), zapis (w = 2) i wykonanie (x = 1), osobno dla właściciela, grupy i pozostałych użytkowników. Zapis 755 oznacza rwxr-xr-x, a 644 oznacza rw-r--r--, i to typowe wartości dla katalogów i zwykłych plików. Unikaj chmod 777 i chmod -R 755: pierwsze daje dostęp wszystkim, a drugie nadaje prawo wykonywania zwykłym plikom.

Błąd „Permission denied” to jedno z pierwszych, co widzi osoba uruchamiająca własny kod na serwerze, a najczęstszą odpowiedzią z internetu jest chmod 777. Zwykle działa i prawie zawsze jest błędem. Poniżej uczysz się czytać uprawnienia, liczyć ich wartości i ustawiać je tak, żeby aplikacja działała i nie była otwarta dla wszystkich. Ogólne podstawy pracy w konsoli znajdziesz w tekście o terminalu i wierszu poleceń. Polecenia z artykułu uruchomiono na macOS (systemy uniksowe zachowują się tu tak samo, ale na Linuksie warto sprawdzić wynik przez ls -l).

Co oznacza chmod i do czego służy?

chmod (change mode) zmienia uprawnienia pliku lub katalogu. System decyduje o dostępie do pliku na podstawie trzech pytań: kim jest użytkownik (właścicielem, członkiem grupy czy kimś obcym), czego chce (czytać, zapisywać, wykonywać) i jakie prawa ma plik. chmod zmienia tylko tę trzecią rzecz. Kto jest właścicielem, zmienia osobne polecenie chown.

Jak czytać uprawnienia w wyniku ls -l?

Polecenie ls -l pokazuje uprawnienia w pierwszej kolumnie:

-rwxr-xr-x  1 mateusz  staff  2 Nov  8 21:03 skrypt.sh

Pierwsze dziesięć znaków dzieli się na cztery części:

ZnakiZnaczeniePrzykład
1typ: - plik, d katalog, l link-
2–4prawa właściciela (user)rwx
5–7prawa grupy (group)r-x
8–10prawa pozostałych (others)r-x

W każdej trójce r oznacza odczyt, w zapis, x wykonanie, a - brak danego prawa. Dalej widać właściciela (mateusz) i grupę (staff).

Jak liczyć wartości chmod, na przykład 755 i 644?

Każde prawo ma wagę: odczyt to 4, zapis to 2, wykonanie to 1. Dla każdej z trzech grup dodajesz wagi, więc trzy cyfry opisują całe uprawnienie:

ZapisRozpisaneDla właścicielaDla grupyDla pozostałychTypowe użycie
644rw-r--r--czyta i zapisujeczytaczytazwykły plik
755rwxr-xr-xwszystkoczyta i wchodziczyta i wchodzikatalog, skrypt
750rwxr-x---wszystkoczyta i wchodzinickatalog tylko dla właściciela i grupy
600rw-------czyta i zapisujenicnicklucze, pliki z hasłami
777rwxrwxrwxwszystkowszystkowszystkoprawie nigdy

Przykład liczenia: 7 to 4 + 2 + 1 (odczyt, zapis, wykonanie), a 5 to 4 + 1 (odczyt i wykonanie). Dlatego 755 oznacza „właściciel wszystko, reszta czyta i wykonuje”.

Jak ustawić uprawnienia symbolicznie, na przykład u+x lub go-w?

Obok liczb chmod przyjmuje zapis symboliczny: kto (u właściciel, g grupa, o pozostali, a wszyscy), operacja (+ dodaj, - zabierz, = ustaw) i prawo (r, w, x). Jest wygodny, gdy zmieniasz jedno prawo i nie chcesz przeliczać całej liczby. W teście plik zaczął od 644:

chmod u+x skrypt.sh    # -rw-r--r--  →  -rwxr--r--  (właściciel może wykonać)
chmod go-r skrypt.sh   # -rwxr--r--  →  -rwx------  (grupa i inni tracą odczyt)
chmod 755 skrypt.sh    # -rwx------  →  -rwxr-xr-x  (ustawienie wszystkiego naraz)

Najczęstsze użycie to chmod +x skrypt.sh, które pozwala uruchomić skrypt poleceniem ./skrypt.sh.

Co oznacza prawo wykonania (x) dla katalogu?

Dla katalogu x nie znaczy „uruchom”, tylko „wejdź i dostań się do plików w środku”, a r oznacza „wylistuj zawartość”. To dwa osobne prawa i da się mieć jedno bez drugiego. W teście katalog z plikiem a.txt zachował się tak:

Uprawnienia kataloguls katalogcat katalog/a.txt
644 (r bez x)błąd „Permission denied”błąd „Permission denied”
311 (x bez r)błąd „Permission denied”działa, jeśli znasz nazwę pliku
755działadziała

Wniosek praktyczny: katalog prawie zawsze potrzebuje x. Jeśli ustawisz na katalogu 644 (jak na pliku), przestaniesz mieć dostęp do jego zawartości, nawet gdy same pliki mają dobre prawa.

Dlaczego chmod -R 755 to zły pomysł?

Opcja -R zmienia uprawnienia rekurencyjnie, czyli całe drzewo katalogów. Pokusa jest duża (to jedno z najczęściej wyszukiwanych pytań o chmod), ale chmod -R 755 ustawia to samo dla katalogów i plików. W teście zwykłe pliki tekstowe też dostały prawo wykonywania:

chmod -R 755 tree
ls -l tree
# -rwxr-xr-x  1 mateusz  wheel  2 Nov  8 21:03 a.txt   ← plik tekstowy z prawem wykonania

Prawo wykonania na pliku danych niczego nie psuje od razu, ale to niepotrzebne i utrudnia wychwycenie plików, które faktycznie są programami. Poprawnie ustawiasz katalogi i pliki osobno, poleceniem find:

find tree -type d -exec chmod 755 {} +   # katalogi: 755
find tree -type f -exec chmod 644 {} +   # pliki: 644

Krótsza droga to wielkie X w zapisie symbolicznym, które nadaje x katalogom i plikom, które już je mają (w teście zwykłe pliki zostały 644, a katalogi 755):

chmod -R u=rwX,go=rX tree

Kto jest właścicielem pliku i do czego służy chown?

chmod mówi, co wolno, a chown (change owner) mówi, komu należy plik. Właściciela i grupę widzisz w ls -l, a Twoją tożsamość pokazuje polecenie id. Zmiana właściciela wymaga zwykle uprawnień administratora:

sudo chown www-data:www-data uploads

Zapis użytkownik:grupa ustawia obie wartości naraz. Nazwa użytkownika serwera zależy od systemu i konfiguracji (na Debianie i Ubuntu to zwykle www-data, w innych dystrybucjach bywa nginx albo apache).

Skąd się bierze sudo i kiedy go używać?

sudo (superuser do) uruchamia jedno polecenie jako inny użytkownik, najczęściej jako root, czyli konto administratora, które może zmienić uprawnienia i właściciela każdego pliku. To osobny program, a nie część chmod czy chown. Kto może go używać, zapisano w pliku /etc/sudoers, który czyta tylko root. Na macOS prawo do sudo daje członkostwo w grupie admin, a na Debianie i Ubuntu zwykle w grupie sudo.

Wynik ls -l pokazuje, jak to działa technicznie:

-r-s--x--x  1 root  wheel  1575952 Aug 13 04:51 /usr/bin/sudo

Litera s w miejscu x właściciela to bit setuid: program uruchamia się z prawami swojego właściciela (root), a nie osoby, która go wywołała. Dzięki temu sudo może podnieść uprawnienia, ale najpierw sprawdza w /etc/sudoers, czy Ci wolno. Hasło, o które prosi, to zwykle Twoje własne, nie hasło roota.

Używaj sudo tylko dla pojedynczego polecenia, które naprawdę tego wymaga, na przykład chown czy zapis w katalogu systemowym. Nie dopisuj go do poleceń w projekcie (npm install, pip install), żeby „zadziałało”: pliki, które wtedy powstaną, należą do root, więc zwykłe konto nie może ich potem zmienić.

Czym jest umask i skąd biorą się domyślne uprawnienia?

Nowo utworzony plik nie dostaje uprawnień znikąd. System startuje od 666 dla plików i 777 dla katalogów, a potem odejmuje wartość umask. W teście:

umaskNowy plikNowy katalog
022 (typowa wartość)644 (rw-r--r--)755 (rwxr-xr-x)
077600 (rw-------)700 (rwx------)

Dlatego pliki tworzone przez Twoje programy są zwykle 644, a katalogi 755. Wartość umask wpisujesz w terminalu bez argumentów, żeby ją zobaczyć, i warto to zrobić, gdy pliki powstają z innymi uprawnieniami, niż się spodziewasz.

Dlaczego chmod 777 to zły pomysł i co zrobić zamiast tego?

chmod 777 daje odczyt, zapis i wykonanie każdemu użytkownikowi i każdemu procesowi na serwerze, więc działa niemal zawsze, bo wyłącza całą ochronę. Rozwiązuje objaw („Permission denied”) i tworzy drugi problem: każdy proces może zmienić lub podmienić plik, a na wspólnym serwerze także cudzy kod. Jeśli aplikacja zapisuje do katalogu, jedyne, czego potrzebuje, to prawo zapisu dla jednego użytkownika.

Zamiast 777 zrób trzy rzeczy:

  1. Sprawdź, na jakim użytkowniku działa aplikacja lub serwer WWW.
  2. Ustaw tego użytkownika jako właściciela katalogu: sudo chown użytkownik:grupa katalog.
  3. Nadaj minimalne prawa: 750 albo 755 dla katalogu, 640 albo 644 dla plików.

Konkretny przykład z PHP, czyli katalog na wgrane pliki, opisuje upload plików w PHP.

Jak naprawić błąd „Permission denied”?

Zamiast zgadywać, przejdź po kolei:

  1. Kim jestem? Polecenie id pokazuje użytkownika i grupy. Dla aplikacji webowej to użytkownik serwera, nie Ty.
  2. Czyj jest plik lub katalog? ls -ld ścieżka pokazuje właściciela, grupę i uprawnienia (opcja -d pokazuje sam katalog, nie jego zawartość).
  3. Czy mam prawo wejść do każdego katalogu na ścieżce? Brak x na jednym z katalogów nadrzędnych blokuje dostęp do całej zawartości, nawet gdy sam plik ma dobre prawa. Sprawdź ls -ld dla kolejnych części ścieżki.
  4. Czy potrzebne jest prawo zapisu? Do tworzenia, usuwania i zmiany nazwy pliku potrzebujesz w na katalogu, nie tylko na samym pliku.
  5. Dopiero wtedy zmieniaj chown lub chmod, z możliwie najmniejszym zakresem.

Co zapamiętać o chmod i uprawnieniach?

  1. Uprawnienia składają się z trzech grup (właściciel, grupa, inni) i trzech praw (odczyt 4, zapis 2, wykonanie 1).
  2. Typowe wartości: 644 dla plików, 755 dla katalogów, 600 dla sekretów.
  3. Dla katalogu x oznacza prawo wejścia i bez niego nie dostaniesz się do plików w środku.
  4. chmod -R 755 zmienia pliki jak katalogi. Rozdziel je przez find -type d i find -type f albo użyj X.
  5. chmod 777 to ukrycie problemu. Ustaw właściciela przez chown i nadaj najmniejsze potrzebne prawa.

Jeśli chcesz ćwiczyć pracę na serwerze razem z mentorem, który sprawdza Twój kod i konfigurację, zobacz kurs PHP.

Masz pytanie do artykułu? Chcesz zgłosić błąd?

Pytaj ogólnie o temat artykułu albo napisz, co poprawić. Jeśli chcesz omówić swój konkretny przypadek, umów się na rozmowę. Ze względów bezpieczeństwa nie przeglądamy ani nie publikujemy żadnych linków. Wiadomości z linkami nie są zapisywane. Limit: 2 pytania na godzinę.

Wyślemy na niego link do potwierdzenia pytania i odpowiedź.

Ostateczną decyzję o opublikowaniu pytania podejmuje administrator.

Konsultacja i warsztaty devmentor.pl

Masz pytania?

Partnerzy

Firmy, z którymi współpracujemy

To partnerzy odpowiedzialni za staże po naszych kursach. Organizują je dla najlepszych absolwentów.

Zobacz wszystkich partnerów →
  • VR Medical
  • Sophona
  • Robot Force