Przejdź do treści
Ulubione

Kalkulator chmod – uprawnienia do plików w Linuksie

Zaktualizowano:

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

Pola danych
Właściciel (u)
Grupa (g)
Pozostali (o — wszyscy inni)
Bity specjalne
Po włączeniu wynik aktualizuje się automatycznie po zmianie dowolnej wartości.

Wzór na uprawnienia chmod

Wzór
\[ d = 4 \cdot r + 2 \cdot w + 1 \cdot x \] \[ \text{tryb} = (4 \cdot s_{\text{uid}} + 2 \cdot s_{\text{gid}} + 1 \cdot s_{\text{sticky}})\,(d_{\text{właśc}})(d_{\text{grupa}})(d_{\text{inni}}) \]

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

  1. 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.
  2. 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.
  3. 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ń.
  4. Ustaw Typ pliku na Zwykły plik (-) lub Katalog (d), aby opis i podgląd ls -l używały właściwego sformułowania.
  5. 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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *