Kalkulator chmod – uprawnienia do plików w Linuksie
Przeliczaj uprawnienia do plików w Linuksie między klikalną siatką pól wyboru, kodem ósemkowym (np. 755) i zapisem symbolicznym (np. rwxr-xr-x). Dostaniesz gotowe do użycia polecenia chmod, podgląd ls -l oraz uwagi o bezpieczeństwie dla zwykłych plików i katalogów.
Przeliczanie uprawnień Linuksa między polami wyboru, zapisem ósemkowym i symbolicznym
Wzór na uprawnienia chmod
Gdzie:
- \(r\), \(w\), \(x\) — bity odczytu, zapisu i wykonania, każdy równy 1, gdy uprawnienie jest przyznane, i 0, gdy nie jest;
- \(d\) — cyfra ósemkowa jednej klasy (właściciel, grupa lub inni), zbudowana z wag 4–2–1;
- \(s_{\text{uid}}\), \(s_{\text{gid}}\), \(s_{\text{sticky}}\) — bity specjalne setuid, setgid i sticky (również 0 albo 1).
Każda klasa uprawnień dostaje jedną cyfrę ósemkową, ponieważ odczyt liczy się jako 4, zapis jako 2, a wykonanie jako 1; zsumowanie przyznanych wartości daje liczbę od 0 do 7. Opcjonalna cyfra na początku koduje bity specjalne z tymi samymi wagami 4–2–1, dlatego 4755 oznacza setuid plus wszystkim dobrze znane 755.
chmod – przykład obliczeń
Przykład: skrypt, który właściciel może swobodnie edytować i uruchamiać, a grupa i pozostali użytkownicy mogą go jedynie odczytywać i uruchamiać — klasyczne ustawienie 755 (to zarazem domyślna siatka w kalkulatorze: właściciel r+w+x, grupa r+x, inni r+x).
\[ d_{\text{właśc}} = 4 + 2 + 1 = 7 \]
\[ d_{\text{grupa}} = 4 + 0 + 1 = 5 \]
\[ d_{\text{inni}} = 4 + 0 + 1 = 5 \]
\[ \text{tryb} = 755 \]
Wynik: tryb ósemkowy 755, tryb symboliczny rwxr-xr-x, polecenie chmod 755 plik. Na liście ls -l plik pojawi się jako -rwxr-xr-x.
Jak korzystać z kalkulatora
- Rozwiń menu Sposób wprowadzania danych i wybierz, jak chcesz opisać uprawnienia: Pola wyboru (siatka uprawnień), Kod ósemkowy, Zapis symboliczny lub Gotowe ustawienia. Widoczne pozostają tylko pola należące do wybranej metody.
- W trybie Pola wyboru zaznacz Odczyt, Zapis i Wykonanie dla każdej klasy — właściciela (u), grupy (g) i pozostałych (o) — a opcjonalnie także bity specjalne Setuid, Setgid i Sticky.
- W trybie Kod ósemkowy wpisz trzy cyfry (np. 755) albo cztery, z wiodącą cyfrą bitów specjalnych (np. 4755). W trybie Zapis symboliczny podaj dziewięć znaków, takich jak rwxr-xr-x, albo wklej cały ciąg z
ls -l, np.-rwxr-xr-x— wiodący znak typu pliku zostanie usunięty automatycznie. W trybie Gotowe ustawienia wystarczy wybrać jedną z gotowych kombinacji uprawnień. - Ustaw Typ pliku na Zwykły plik (-) lub Katalog (d), aby opis i podgląd
ls -lużywały właściwego sformułowania. - Odczytaj wyniki: tryb liczbowy (ósemkowy), tryb symboliczny, gotowe do skopiowania polecenia chmod, podgląd w stylu ls -l, objaśnienie prostym językiem oraz uwagi o bezpieczeństwie.
Czym są uprawnienia do plików w Linuksie i jak je odczytać
Każdy plik i katalog w systemie Linux ma dziewięć bitów uprawnień podzielonych na trzy klasy: właściciel (u), który plik utworzył, grupa (g), do której plik należy, oraz inni (o) — wszyscy pozostali użytkownicy danego komputera. W każdej klasie trzy bity mówią, czy klasa może plik odczytywać (r), zapisywać (w) i wykonywać (x). Polecenie chmod zmienia te bity, a kalkulator przetwarza każdą reprezentację na wszystkie pozostałe.
Zapis ósemkowy pakuje każdą klasę w jedną cyfrę z użyciem wag 4–2–1 — dlatego spotykasz tryby takie jak 644 czy 755. Zapis symboliczny rozpisuje te same bity jako dziewięć znaków czytanych od lewej: trójka właściciela, trójka grupy, trójka pozostałych. Myślnik oznacza brak uprawnienia, więc rw-r--r-- to nadający się do odczytu, ale niewykonywalny tryb 644. Obie formy opisują dokładnie te same bity — wybierz tę, którą akceptuje narzędzie, z którym akurat pracujesz.
Znaczenie bitów zależy od typu pliku. Dla zwykłego pliku r oznacza wgląd w jego zawartość, w jej zmienianie, a x uruchamianie go jako programu. Dla katalogu r to wypisywanie nazw znajdujących się w środku, w — tworzenie, zmienianie nazw i usuwanie wpisów wewnątrz, a x — wchodzenie do niego przez cd i otwieranie zawartych w nim plików. Dlatego katalog musi mieć x, aby dało się korzystać z jego zawartości, i dlatego 700 to standardowy tryb prywatnych folderów, takich jak ~/.ssh.
Obraz uzupełniają trzy dodatkowe bity specjalne. Setuid (4) sprawia, że plik wykonywalny działa z uprawnieniami swojego właściciela — to mechanizm stojący za /usr/bin/passwd. Setgid (2) robi to samo dla grupy, a na katalogach powoduje, że nowe pliki dziedziczą grupę katalogu. Sticky (1) ogranicza usuwanie we współdzielonym, zapisywalnym katalogu, tak aby użytkownicy mogli usuwać tylko własne pliki — to dzięki tej regule /tmp (1777) pozostaje bezpieczny. W zapisie symbolicznym bity te pojawiają się jako s/S w miejscu bitu wykonywania albo t/T na ostatniej pozycji; wielka litera oznacza, że bit wykonywania pod spodem jest wyłączony.
Popularne tryby uprawnień
| Tryb | Symbolicznie | Typowe zastosowanie |
|---|---|---|
| 600 | rw------- | Prywatne pliki, np. klucze SSH |
| 644 | rw-r--r-- | Zwykłe pliki, treści publikowane w sieci |
| 700 | rwx------ | Prywatne katalogi, np. ~/.ssh |
| 755 | rwxr-xr-x | Programy, skrypty, pliki serwowane przez WWW |
| 775 | rwxrwxr-x | Współdzielone katalogi dla zaufanej grupy |
| 1777 | rwxrwxrwt | Wspólna przestrzeń robocza, jak /tmp |
| 4755 | rwsr-xr-x | Pliki wykonywalne setuid root (używaj oszczędnie) |
Założenia, ograniczenia i praktyczne wskazówki
- 777 prawie nigdy nie jest odpowiedzią. Ustawienie plikowi zapisu dla wszystkich otwiera go na każde konto w systemie. Zamiast 777 wybierz 775 z dobrze dobraną grupą albo skorzystaj z list ACL (
setfacl). - Nigdy nie łącz zapisu dla wszystkich z bitem setuid lub setgid. Tryby takie jak 4777 czy 7777 pozwalają każdemu podmienić plik, który jednocześnie uruchamia się z podwyższonymi uprawnieniami — to klasyczna dziura umożliwiająca eskalację uprawnień.
- Inni nie powinni mieć więcej niż właściciel. Jeśli trzecia cyfra przewyższa pierwszą, niemal na pewno w trybie masz literówkę; uwagi o bezpieczeństwie to wyłapią.
- 000 blokuje wszystkich, łącznie z właścicielem. Dostęp może wtedy odzyskać tylko root — jeśli zależy Ci na prywatności, użyj raczej 600 albo 700.
- Ostrożnie z
chmod -R. Rekurencyjny tryb liczbowy nadpisuje wszystkie bity każdego pliku i podkatalogu naraz; katalogi zwykle potrzebują x, a pliki danych nie powinny go mieć. Zamiast walić w całe drzewo jednym trybem, stosuj go osobno do każdego typu pliku. - Root ignoruje bity uprawnień. Uprawnienia ograniczają zwykłych użytkowników; nie chronią przed dostępem z poziomu roota.
- Kalkulator przelicza znane reprezentacje uprawnień, łącznie z bitami specjalnymi, ale nie uwzględnia list ACL, SELinuksa ani innych mechanizmów obowiązkowej kontroli dostępu, które mogą wpływać na rzeczywisty dostęp.
Jeśli pracujesz z innymi kodowaniami związanymi z Linuksem, przydatne mogą się okazać także konwerter uniksowego znacznika czasu, konwerter liczb szesnastkowych i kalkulator binarny — pomogą zrozumieć leżące u podstaw tego wszystkiego systemy liczbowe.
Najczęściej zadawane pytania
Jak rekurencyjnie ustawić różne uprawnienia dla plików i katalogów?
Użyj find, aby przypisać osobny tryb każdemu typowi pliku: find /ścieżka -type d -exec chmod 755 {} + dla katalogów i find /ścieżka -type f -exec chmod 644 {} + dla plików. Zwykłe chmod -R 755 nadaje plikom danych niepotrzebny bit wykonywania, natomiast -R 644 odbiera bit x katalogom, przez co nie da się do nich wejść. Rozdzielenie według typu pozwala uniknąć obu błędów.
Jak sprawdzić aktualne uprawnienia pliku w postaci liczby ósemkowej?
Wykonaj stat -c '%a' nazwa_pliku (w systemie macOS: stat -f '%Lp' nazwa_pliku), a otrzymasz tryb od razu jako cyfry, np. 644. Szczegółowa lista ls -l pokazuje tylko formę symboliczną, którą musisz następnie rozszyfrować samodzielnie. Ósemkowe dane wyjściowe to dokładnie to, czego oczekuje pole Kod ósemkowy w kalkulatorze — możesz je wkleić i sprawdzić, co robi każdy bit.
Dlaczego mimo chmod nadal dostaję komunikat „Permission denied”?
Sprawdź trzy rzeczy: każdy katalog na ścieżce musi przyznawać Ci x (wykonanie), żebyś w ogóle mógł dotrzeć do pliku — katalog z trybem 644 blokuje wszystko, co znajduje się w środku, nawet jeśli sam plik ma 777. Nie możesz też wykonać chmod na pliku, którego nie jesteś właścicielem. Wreszcie reguły na poziomie systemu plików mogą przesłonić bity: opcje montowania takie jak noexec, listy ACL, SELinux czy AppArmor potrafią odmówić dostępu niezależnie od trybu.
Co oznacza chmod a+r i czym różni się od o+r?
a oznacza „all” (wszyscy) — stosuje zmianę naraz do właściciela (u), grupy (g) i pozostałych (o), więc a+r daje prawo odczytu każdemu. o+r dotyczy wyłącznie klasy pozostałych. W zapisie ósemkowym takiego skrótu nie ma: tryb liczbowy zawsze nadpisuje wszystkie dziewięć bitów — dlatego klasy, które mają zachować dotychczasowe bity, bezpieczniej korygować symbolicznymi + i −, a nie pełną podmianą liczbową.
Dlaczego moje nowe pliki dostają 664 zamiast 755? Czym jest umask?
umask to ustawienie powłoki, które odcina bity od trybu, o który prosi program tworzący plik. Przy popularnej wartości umask 002 program proszący o 666 (rw-rw-rw-) dostaje 664, a żądanie utworzenia katalogu z trybem 777 daje w efekcie 775. Sprawdź swoją wartość poleceniem umask i zmień ją np. przez umask 022. chmod nie uczestniczy w tworzeniu pliku — przepisuje bity dopiero później.
Dlaczego setuid nie działa na moim skrypcie powłoki?
Większość systemów Linux celowo ignoruje bit setuid na skryptach interpretowanych (powłokowych, w Pythonie itp.), ponieważ to interpreter — a nie sam skrypt — jest faktycznie uruchamiany, a interpretery działają z uprawnieniami wywołującego. Setuid działa niemal wyłącznie na skompilowanych plikach binarnych, takich jak /usr/bin/passwd. Jeśli skrypt ma wykonać czynność wymagającą podwyższonych uprawnień, użyj reguł sudo zamiast liczyć, że chmod 4755 na skrypcie coś pomoże.