Jak sprawdzić uprawnienia plików w Linux: Kompletny przewodnik
Linux napędza większość serwerów na świecie — od środowisk VPS Hosting po klasy enterprise Serwery Dedykowane — i nie bez powodu. Jest szybki, stabilny i zbudowany z bezpieczeństwem w rdzeniu. Jednym z najbardziej fundamentalnych filarów tego bezpieczeństwa jest system uprawnień do plików: precyzyjny, elegancki mechanizm, który kontroluje dokładnie, kto może czytać, modyfikować lub wykonywać dowolny plik lub katalog w systemie.
Niezależnie od tego, czy jesteś deweloperem wdrażającym aplikację internetową, administratorem systemu wzmacniającym serwer, czy początkującym uczącym się linii poleceń, zrozumienie, jak sprawdzać i interpretować uprawnienia do plików w Linux, jest umiejętnością niezbędną. Ten przewodnik obejmuje wszystko, co musisz wiedzieć — od podstaw modelu uprawnień po zaawansowane bity specjalne — z praktycznymi poleceniami i przykładami z rzeczywistego świata.
Czym są uprawnienia plików Linux?
Każdy plik i katalog w Linux ma przypisany zestaw uprawnień. Te uprawnienia definiują, jakie działania są dozwolone i przez kogo. Istnieją trzy podstawowe typy uprawnień:
| Uprawnienie | Symbol | Co robi na pliku | Co robi w katalogu |
|---|---|---|---|
| Odczyt | r | Wyświetl zawartość pliku | Wyświetl listę plików wewnątrz |
| Zapis | w | Modyfikuj lub usuń plik | Twórz lub usuwaj pliki wewnątrz |
| Wykonanie | x | Uruchom plik jako program | Wejdź (nawiguj do) katalogu |
Te trzy uprawnienia są stosowane niezależnie do trzech odrębnych kategorii użytkowników:
- Właściciel (użytkownik) — Użytkownik, który jest właścicielem pliku, zwykle jego twórca.
- Grupa — Każdy użytkownik należący do przypisanej grupy pliku.
- Inni — Wszyscy pozostali użytkownicy w systemie.
Ta macierz uprawnień trzy na trzy daje administratorom Linux szczegółową, potężną kontrolę nad dostępem do każdego zasobu w systemie.
Jak sprawdzić uprawnienia do plików: Polecenie ls -l
Najszybszą i najczęściej używaną metodą sprawdzenia uprawnień do plików jest polecenie ls -l (format długiej listy).
ls -l file.txtPrzykładowe wyjście:
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 file.txtRozłóżmy każdy komponent tego wyjścia:
- rw- r-- r-- 1 alice developers 1024 Aug 16 12:30 file.txt
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └─ Filename
│ │ │ │ │ │ │ │ └─ Last modified
│ │ │ │ │ │ │ └─ File size (bytes)
│ │ │ │ │ │ └─ Group name
│ │ │ │ │ └─ Owner name
│ │ │ │ └─ Number of hard links
│ │ │ └─ Others' permissions
│ │ └─ Group's permissions
│ └─ Owner's permissions
└─ File type (- = regular file, d = directory, l = symlink)Tak więc -rw-r--r-- mówi nam:
- Właściciel (
alice): Odczyt + Zapis (rw-) - Grupa (
developers): Tylko odczyt (r--) - Inni: Tylko odczyt (
r--)
Sprawdzanie uprawnień dla wielu plików
Aby zobaczyć uprawnienia dla wszystkich plików w katalogu na raz:
ls -la /var/www/htmlFlaga -a obejmuje ukryte pliki (te zaczynające się od kropki). Jest to szczególnie przydatne podczas audytu katalogów serwera internetowego w środowisku Shared Web Hosting lub VPS.
Uzyskiwanie szczegółowych informacji o uprawnieniach za pomocą stat
Aby uzyskać bardziej szczegółowy przegląd — obejmujący zarówno reprezentacje symboliczne, jak i numeryczne — użyj polecenia stat:
stat file.txtPrzykładowe wyjście:
File: file.txt
Size: 1024 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 131073 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ alice) Gid: ( 1000/developers)
Access: 2024-08-16 12:30:00.000000000 +0000
Modify: 2024-08-16 12:30:00.000000000 +0000
Change: 2024-08-16 12:30:00.000000000 +0000Kluczowa linia to:
Access: (0644/-rw-r--r--) Uid: ( 1000/ alice) Gid: ( 1000/developers)To daje Ci:
- Notacja numeryczna (ósemkowa):
0644 - Notacja symboliczna:
-rw-r--r-- - Identyfikator użytkownika (UID) i Identyfikator grupy (GID) z ich czytelną dla człowieka nazwami
Polecenie stat jest nieocenione podczas rozwiązywania problemów z uprawnieniami na serwerach produkcyjnych, ponieważ zapewnia cały potrzebny kontekst w jednym wyjściu.
Zrozumienie notacji uprawnień numerycznych (ósemkowych)
Uprawnienia Linux można wyrazić jako liczby, co jest formatem używanym przez polecenia takie jak chmod. Każdemu typowi uprawnień przypisana jest wartość:
| Uprawnienie | Wartość numeryczna |
|---|---|
Odczyt (r) | 4 |
Zapis (w) | 2 |
Wykonanie (x) | 1 |
Brak uprawnień (-) | 0 |
Wartość uprawnień dla każdej kategorii użytkownika obliczasz dodając wartości:
| Kombinacja | Obliczenie | Wartość numeryczna |
|---|---|---|
rwx | 4 + 2 + 1 | 7 |
rw- | 4 + 2 + 0 | 6 |
r-x | 4 + 0 + 1 | 5 |
r-- | 4 + 0 + 0 | 4 |
--- | 0 + 0 + 0 | 0 |
Trzycyfrowa liczba ósemkowa reprezentuje pełny zestaw uprawnień:
0644 → Owner: 6 (rw-) | Group: 4 (r--) | Others: 4 (r--)
0755 → Owner: 7 (rwx) | Group: 5 (r-x) | Others: 5 (r-x)
0700 → Owner: 7 (rwx) | Group: 0 (---) | Others: 0 (---)Sprawdzanie uprawnień do katalogów
Katalogi używają tego samego modelu uprawnień, ale znaczenie każdego bitu jest nieco inne. Użyj ls -ld (zwróć uwagę na flagę -d) aby sprawdzić sam katalog, a nie jego zawartość:
ls -ld myfolderPrzykładowe wyjście:
drwxr-x--- 2 alice developers 4096 Aug 16 12:30 myfolderWiodący d potwierdza, że to jest katalog. Uprawnienia rozkładają się na:
- Właściciel (
alice):rwx— Może wyświetlać listę, tworzyć/usuwać pliki i wchodzić do katalog - Grupa (
developers):r-x— Może wyświetlać listę plików i wchodzić, ale nie może tworzyć ani usuwać - Inni:
---— Brak dostępu
> Ważne: Bit wykonania (x) w katalogu oznacza możliwość wejścia do niego (tzn. użycia cd). Bez x użytkownik nie może nawigować do katalog nawet jeśli ma uprawnienie do odczytu. To jest częste źródło zamieszania dla początkujących.
Specjalne bity uprawnień: setuid, setgid i sticky bit
Poza standardowymi dziewięcioma bitami uprawnień, Linux obsługuje trzy specjalne bity uprawnień, które zapewniają zaawansowaną kontrolę dostępu:
1. setuid (s na bicie wykonania właściciela)
Gdy jest ustawiony na pliku wykonywalnym, program uruchamia się z uprawnieniami właściciela pliku, a nie użytkownika wywołującego. W ten sposób polecenia takie jak passwd pozwalają zwykłym użytkownikom modyfikować /etc/shadow (który jest własnością roota).
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Mar 27 2023 /usr/bin/passwds na pozycji wykonania właściciela wskazuje setuid.
2. setgid (s na bicie wykonania grupy)
Na pliku program uruchamia się z uprawnieniami grupy. Na katalogu nowe pliki utworzone wewnątrz automatycznie dziedziczą grupę katalogu — przydatne dla współdzielonych folderów projektów.
ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project3. Sticky bit (t na bicie wykonania innych)
Gdy jest ustawiony na katalogu, tylko właściciel pliku (lub root) może usuwać lub zmieniać nazwy plików wewnątrz niego, nawet jeśli inni mają uprawnienia do zapisu. To jest standardowa konfiguracja dla /tmp:
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpt na końcu sygnalizuje, że sticky bit jest aktywny.
Reprezentacja numeryczna specjalnych bitów:
| Specjalny bit | Wartość numeryczna |
|---|---|
| setuid | 4000 |
| setgid | 2000 |
| Sticky bit | 1000 |
Zatem drwxrwxrwt = 1777 (1000 + 777).
Tabela Pełnych Uprawnień
| Symboliczny | Numeryczny | Znaczenie dla pliku | Znaczenie dla katalogu |
|---|---|---|---|
--- | 0 | Brak dostępu | Brak dostępu |
--x | 1 | Tylko wykonanie | Tylko wejście |
-w- | 2 | Tylko zapis | Modyfikacja zawartości (z x) |
-wx | 3 | Zapis + Wykonanie | Wejście i modyfikacja |
r-- | 4 | Tylko odczyt | Lista nazw (wymaga x aby być przydatnym) |
r-x | 5 | Odczyt + Wykonanie | Lista i wejście |
rw- | 6 | Odczyt + Zapis | Lista i modyfikacja (bez wejścia) |
rwx | 7 | Pełny dostęp | Pełna kontrola |
Przykłady uprawnień w praktyce
Oto najczęstsze wzorce uprawnień, które napotkasz w praktyce:
-rw-r--r-- (0644) — Standardowy plik
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 config.txtWłaściciel może czytać i pisać. Grupa i inni mogą tylko czytać. Typowe dla plików konfiguracyjnych i zawartości internetowej.
-rwxr-xr-x (0755) — Skrypt wykonywalny lub plik binarny
-rwxr-xr-x 1 alice developers 4096 Aug 16 12:30 deploy.shWłaściciel ma pełny dostęp. Wszyscy inni mogą czytać i wykonywać, ale nie mogą modyfikować. Standard dla skryptów powłoki, plików binarnych serwera internetowego i publicznych plików wykonywalnych.
-rw------- (0600) — Plik prywatny
-rw------- 1 alice alice 1679 Aug 16 12:30 id_rsaTylko właściciel może czytać lub pisać. Brak dostępu dla nikogo innego. Wymagane dla prywatnych kluczy SSH — SSH odmówi użycia pliku klucza z szerszymi uprawnieniami.
drwxr-xr-x (0755) — Standardowy katalog publiczny
drwxr-xr-x 5 alice developers 4096 Aug 16 12:30 public_htmlPowszechnie używane dla katalogów głównych serwera internetowego. Właściciel ma pełną kontrolę; inni mogą przeglądać i wchodzić.
drwx------ (0700) — Katalog prywatny
drwx------ 3 alice alice 4096 Aug 16 12:30 .sshCałkowicie prywatny. Tylko właściciel może uzyskać dostęp. Wymagane dla katalogu ~/.ssh.
drwxrwxrwt (1777) — Zapisywalny dla wszystkich z lepkim bitem
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpWszyscy mogą tworzyć pliki, ale tylko właściciel każdego pliku może usunąć swoje własne pliki.
Praktyczne porady dotyczące środowisk serwerowych
Jeśli zarządzasz serwerem Linux — niezależnie od tego, czy jest to VPS uruchamiający aplikację internetową, serwer poczty zabezpieczony za pomocą SSL Certificate, czy maszyna hostująca wiele domen zarejestrowanych za pośrednictwem Domain Registration — oto kilka podstawowych najlepszych praktyk dotyczących uprawnień:
- Nigdy nie ustawiaj 777 na plikach lub katalogach chyba że masz bardzo konkretny, tymczasowy powód. Pliki dostępne do zapisu dla wszystkich stanowią poważne zagrożenie bezpieczeństwa.
- Pliki serwera internetowego (np. w
/var/www/) powinny zazwyczaj mieć644dla plików i755dla katalogów, będące własnością użytkownika aplikacji. - Klucze SSH muszą mieć
600dla kluczy prywatnych i644dla kluczy publicznych. SSH wymusza to ściśle. - Pliki konfiguracyjne zawierające hasła lub klucze API powinny mieć
600lub640maksymalnie. - Użyj
finddo audytu uprawnień w całym drzewie katalogów:
# Find all world-writable files (potential security risk)
find /var/www -type f -perm -o+w
# Find all SUID files (for security auditing)
find / -type f -perm -4000 2>/dev/nullSzybki Przewodnik Poleceń
| Zadanie | Polecenie |
|---|---|
| Wyświetl uprawnienia pliku | ls -l filename |
| Wyświetl uprawnienia wszystkich plików w katalogu | ls -la /path/to/dir |
| Sprawdź uprawnienia samego katalogu | ls -ld /path/to/dir |
| Uzyskaj pełne szczegóły wraz z uprawnieniami numerycznymi | stat filename |
| Zmień uprawnienia (symboliczne) | chmod u+x filename |
| Zmień uprawnienia (numeryczne) | chmod 755 filename |
| Zmień właściciela pliku | chown user:group filename |
| Rekurencyjnie zmień uprawnienia | chmod -R 755 /path/to/dir |
| Znajdź pliki dostępne do zapisu dla wszystkich | find . -perm -o+w -type f |
Podsumowanie
Zrozumienie uprawnień plików Linux to nie tylko ćwiczenie akademickie — to praktyczna, codzienna umiejętność dla każdego, kto zarządza serwerami, wdraża aplikacje lub pracuje w środowisku Linux. Oto podsumowanie kluczowych wniosków:
- Użyj
ls -laby szybko uzyskać czytelny dla człowieka przegląd uprawnień do plików i katalogów. - Użyj
statgdy potrzebujesz zarówno reprezentacji symbolicznej, jak i numerycznej, wraz ze szczegółami właściciela. - Opanuj obie notacje — symboliczną (
rwx) i numeryczną (755,644) — ponieważ różne narzędzia i dokumentacja używają ich zamiennie. - Pamiętaj o różnicy katalogów: bit wykonywania (
x) w katalogu oznacza możliwość wejścia do niego, a nie jego uruchomienia. - Bądź świadomy bitów specjalnych — setuid, setgid i sticky bit — ponieważ pojawiają się często w systemach produkcyjnych i mają znaczące implikacje bezpieczeństwa.
Prawidłowe zarządzanie uprawnieniami to kamień węgielny bezpieczeństwa Linux. Niezależnie od tego, czy uruchamiasz projekt osobisty na VPS Hosting czy administrujesz flotą Dedicated Servers, prawidłowe ustawienie uprawnień od początku uchroni Cię przed lukami bezpieczeństwa, uszkodzonymi aplikacjami i niezliczonymi godzinami rozwiązywania problemów w przyszłości.
na wszystkich usługach hostingowych