Programiści

Uprawnienia chmod 755, 644, 777: jak czytać i ustawiać uprawnienia w Linuksie

7 min czytania

Chmod 755 oznacza, że właściciel pliku może go czytać, zapisywać i wykonywać, a grupa i pozostali użytkownicy mogą go tylko czytać i wykonywać, bez prawa zapisu. Każda z trzech cyfr w poleceniu chmod to osobny zestaw uprawnień, jedna dla właściciela, jedna dla grupy, jedna dla wszystkich pozostałych, zapisany jako liczba od 0 do 7. Poniżej wyjaśniam, skąd biorą się te liczby i jak przeczytać dowolną kombinację bez zgadywania.

Jak powstaje cyfra octal: bity 4, 2, 1

Każda z trzech cyfr chmod to suma trzech wartości, przypisanych do konkretnego uprawnienia: odczyt (read) to 4, zapis (write) to 2, wykonanie (execute) to 1. Cyfra dla danej klasy użytkowników to po prostu suma tych bitów, które ta klasa posiada.

Przykład: jeśli właściciel ma prawo do odczytu i zapisu, ale nie do wykonania, jego cyfra to 4 + 2 = 6. Jeśli ma wszystkie trzy uprawnienia, to 4 + 2 + 1 = 7. Zero oznacza brak jakichkolwiek uprawnień. Ponieważ każda z trzech klas, właściciel, grupa, pozostali, ma swoją własną cyfrę od 0 do 7, pełne uprawnienia pliku to zawsze trzy cyfry z rzędu, na przykład 755 albo 644.

Najczęstsze kombinacje w praktyce

Poniższa tabela pokazuje kombinacje, na które trafisz najczęściej, razem z zapisem symbolicznym, jaki zobaczysz w wyniku polecenia ls -l.

PolecenieOctalSymbolicznieTypowe zastosowanie
chmod 600 plik600rw-------Prywatny klucz SSH (id_rsa), plik .env z sekretami
chmod 644 plik644rw-r—r—Zwykły plik (HTML, konfiguracja, log), właściciel edytuje, wszyscy czytają
chmod 700 katalog700rwx------Prywatny katalog, do którego wejdzie tylko właściciel
chmod 755 skrypt.sh755rwxr-xr-xPubliczny skrypt lub katalog, właściciel edytuje, każdy może uruchomić lub wejść
chmod 775 katalog775rwxrwxr-xWspólny katalog zespołu, właściciel i grupa mogą zapisywać
chmod 777 plik777rwxrwxrwxKażdy może czytać, zapisywać i wykonywać, unikaj, to zagrożenie bezpieczeństwa

Warto zapamiętać jeden szczegół dotyczący katalogów: bit wykonania (x) na katalogu nie znaczy “uruchom”, tylko “wejdź”, czyli pozwala na cd do niego i sprawdzenie metadanych plików wewnątrz (stat). Bit odczytu (r) pozwala wylistować nazwy plików poleceniem ls. Katalog z prawem odczytu, ale bez prawa wykonania, to częste źródło zamieszania: niektóre narzędzia pokażą nazwy plików w środku, ale nie da się do niego wejść ani odpytać poszczególnych plików, dopóki nie doda się bitu x.

Dwa różne znaczenia słowa “symboliczny”

Przy chmodzie łatwo pomylić dwie różne rzeczy, które obie nazywa się “symbolicznymi”.

Pierwsza to zapis wyświetlany przez ls -l, czyli ciąg w stylu rwxr-xr-x. To migawka, statyczny opis aktualnego stanu uprawnień, dokładnie taki, jaki pokazuje ten kalkulator obok wersji octal.

Druga to własna składnia symboliczna samego polecenia chmod, służąca do zmiany uprawnień względem tego, co plik ma już ustawione, bez podawania pełnej liczby octal. Kilka przykładów: chmod u+x plik.sh dodaje prawo wykonania wyłącznie właścicielowi (u jak user), chmod go-w plik odbiera prawo zapisu grupie i pozostałym (go jak group + others), a chmod a+r plik nadaje prawo odczytu wszystkim (a jak all). Ta składnia jest wygodna, gdy chcesz zmienić jedno uprawnienie, nie znając ani nie nadpisując reszty, w przeciwieństwie do chmod 755, które ustawia wszystkie trzy cyfry naraz, niezależnie od tego, co było wcześniej.

Wypróbuj z własnymi uprawnieniami

Wpisz liczbę octal albo zaznacz uprawnienia ręcznie, żeby zobaczyć od razu zapis symboliczny i gotowe polecenie chmod do skopiowania.

OdczytZapisWykonanie
Właściciel
Grupa
Pozostali
Kalkulator Chmod
Za darmo, bez rejestracji, na każdym urządzeniu.
Otwórz pełne narzędzie

Dlaczego nowe pliki mają domyślnie 644, a katalogi 755

To nie przypadek, tylko efekt działania umask. System zaczyna od bazowych uprawnień 666 (rw-rw-rw-, bez bitu wykonania, ze względów bezpieczeństwa nowy plik nigdy nie jest domyślnie wykonywalny) dla plików i 777 (rwxrwxrwx) dla katalogów, a następnie odejmuje od tej bazy wartość umask powłoki.

Domyślny umask w większości dystrybucji Linuksa to 022. Odejmując: 666 minus 022 daje 644, a 777 minus 022 daje 755. Dlatego każdy nowo utworzony plik ląduje z uprawnieniami 644, a każdy nowy katalog z 755, mimo że nikt nie wywołał ręcznie żadnego chmoda. To właśnie umask, a nie chmod, odpowiada za te domyślne wartości.

Częste błędy i ryzyko bezpieczeństwa

Chmod 777 jako “szybkie rozwiązanie” problemu z dostępem. Ustawienie 777 pozwala dosłownie każdemu użytkownikowi systemu na odczyt, zapis i podmianę pliku, w tym potencjalnemu atakującemu, który zdobył choćby ograniczony dostęp. Klasyczny scenariusz: niezabezpieczony formularz uploadu plików na serwerze z katalogiem 777 zamienia się w webshell, czyli furtkę pozwalającą wykonywać dowolny kod. Skanery bezpieczeństwa, na przykład audyty hostingu czy wtyczek WordPress, rutynowo oznaczają 777 jako błąd krytyczny. Bezpieczna wartość to niemal zawsze 755 dla katalogów i plików wykonywalnych, 644 dla zwykłych plików, a tam, gdzie jest zaufana grupa, można zejść jeszcze niżej, do 750 albo 640.

Zbyt otwarte uprawnienia klucza SSH. ssh-keygen domyślnie tworzy klucz prywatny z uprawnieniami 600, czyli tylko właściciel może go czytać i zapisywać. To nie jest kosmetyka: OpenSSH aktywnie odmawia użycia klucza prywatnego, który jest czytelny dla grupy albo dla wszystkich, i kończy się błędem w stylu Permissions 0644 for 'id_rsa' are too open razem z ostrzeżeniem UNPROTECTED PRIVATE KEY FILE!. Jeśli po skopiowaniu klucza między maszynami albo rozpakowaniu z archiwum SSH nagle przestaje działać logowanie, to najpierw sprawdź uprawnienia pliku, prawdopodobnie zmieniły się przy kopiowaniu i trzeba przywrócić chmod 600.

Czego ten kalkulator nie pokazuje: bity specjalne

Standardowe trzy cyfry chmod (właściciel, grupa, pozostali) to nie wszystko. Istnieje opcjonalna czwarta cyfra, dopisywana z przodu, na przykład chmod 4755 albo chmod 1777 na katalogu /tmp, która ustawia tak zwane bity specjalne: setuid (4000), setgid (2000) i sticky bit (1000). Ten kalkulator ich nie modeluje, obsługuje wyłącznie standardowy zestaw trzech cyfr. W skrócie: setuid uruchamia program z uprawnieniami jego właściciela, a nie osoby, która go wywołuje (tak działa na przykład /usr/bin/passwd), a sticky bit na katalogu dostępnym do zapisu dla wszystkich, jak /tmp, blokuje możliwość usunięcia cudzych plików przez innych użytkowników.

Najczęściej zadawane pytania

Co oznacza chmod 755? 755 to skrót zapisu octal, gdzie właściciel pliku ma pełne uprawnienia (odczyt, zapis, wykonanie, razem 4+2+1=7), a grupa i pozostali mają prawo tylko do odczytu i wykonania (4+1=5), bez prawa zapisu. W zapisie symbolicznym z ls -l to rwxr-xr-x. Typowe zastosowanie to publiczne skrypty i katalogi, do których każdy powinien mieć dostęp, ale edytować może tylko właściciel.

Jaka jest różnica między chmod 644 a chmod 755? 644 (rw-r—r—) nie ma żadnego bitu wykonania, więc nadaje się do zwykłych plików jak HTML, konfiguracja czy log, gdzie chodzi tylko o czytanie i edycję. 755 (rwxr-xr-x) dodaje bit wykonania dla wszystkich klas, co jest potrzebne dla skryptów, programów i katalogów, bo bez tego bitu katalogu nie da się do niego wejść.

Dlaczego chmod 777 jest niebezpieczny? Bo daje absolutnie każdemu na systemie prawo odczytu, zapisu i wykonania pliku, bez żadnych ograniczeń. To otwiera drzwi do podmiany pliku przez dowolnego użytkownika albo atakującego, który zdobył choćby minimalny dostęp, i jest jednym z najczęstszych powodów, dla których serwer WWW zamienia się w narzędzie do wgrywania złośliwego kodu. Prawie zawsze wystarczy 755 albo 644.

Dlaczego nowo utworzony plik ma domyślnie uprawnienia 644, a nie na przykład 666? Bo system odejmuje wartość umask (domyślnie 022 w większości dystrybucji Linuksa) od bazowych uprawnień 666 dla plików. 666 minus 022 daje 644. To dzieje się automatycznie przy każdym tworzeniu pliku, bez ręcznego wywoływania chmod.

ChmodUprawnienia UnixLinuxBezpieczeństwo
Kalkulator Chmod
Teraz wypróbuj samodzielnie w pełnym narzędziu.
Wypróbuj teraz