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 Dedicated Servers — i to z dobrego 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ś programistą wdrażającym aplikację internetową, administratorem systemu zabezpieczają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 do plików w Linux?
Każdy pojedynczy 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 na katalogu |
|---|---|---|---|
| Odczyt | r | Wyświetl zawartość pliku | Wyświetl nazwy plików wewnątrz |
| Zapis | w | Modyfikuj lub usuń plik | Utwórz lub usuń 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, który należy do przypisanej grupy pliku.
- Inni — Wszyscy pozostali 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 pliku: polecenie ls -l
Najszybszą i najczęściej używaną metodą sprawdzenia uprawnień do pliku 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 zawiera 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 — w tym 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 czytelnymi 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 numerycznej (ósemkowej) uprawnień
Uprawnienia Linux można wyrazić jako liczby, co jest formatem używanym przez polecenia takie jak chmod. Każdemu typowi uprawnienia przypisana jest wartość:
| Uprawnienie | Wartość numeryczna |
|---|---|
Odczyt (r) | 4 |
Zapis (w) | 2 |
Wykonanie (x) | 1 |
Brak uprawnienia (-) | 0 |
Obliczasz wartość uprawnienia dla każdej kategorii użytkownika, dodając wartości razem:
| 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 katalog. Uprawnienia rozkładają się na:
- Właściciel (
alice):rwx— Może wyświetlać listę, tworzyć/usuwać pliki i wchodzić do katalogu - 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) na katalogu oznacza możliwość wejścia do niego (tj. użycia cd). Bez x użytkownik nie może nawigować do katalogu, 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ą root).
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Mar 27 2023 /usr/bin/passwds w 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 udostępnionych 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ą uprawnienie 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 bitów specjalnych:
| Bit specjalny | Wartość numeryczna |
|---|---|
| setuid | 4000 |
| setgid | 2000 |
| Sticky bit | 1000 |
Tak więc drwxrwxrwt = 1777 (1000 + 777).
Kompletna tabela referencji uprawnień
| Symboliczny | Numeryczny | Znaczenie na pliku | Znaczenie na katalogu |
|---|---|---|---|
--- | 0 | Brak dostępu | Brak dostępu |
--x | 1 | Tylko wykonanie | Tylko wejście |
-w- | 2 | Tylko zapis | Modyfikuj zawartość (z x) |
-wx | 3 | Zapis + Wykonanie | Wejdź i modyfikuj |
r-- | 4 | Tylko odczyt | Wyświetl nazwy (wymaga x aby być przydatnym) |
r-x | 5 | Odczyt + Wykonanie | Wyświetl listę i wejdź |
rw- | 6 | Odczyt + Zapis | Wyświetl listę i modyfikuj (bez wejścia) |
rwx | 7 | Pełny dostęp | Pełna kontrola |
Przykłady uprawnień z rzeczywistego świata
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_htmlWspólny dla katalogów głównych sieci Web. 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) — Dostępny dla wszystkich z Sticky Bit
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpKażdy może tworzyć pliki, ale tylko właściciel każdego pliku może usunąć swoje własne pliki.
Praktyczne porady dla środowisk serwerowych
Jeśli zarządzasz serwerem Linux — niezależnie od tego, czy jest to VPS uruchamiający aplikację internetową, serwer poczty zab
