Cum să Verifici Permisiunile Fișierelor în Linux: Un Ghid Complet
Linux alimentează majoritatea serverelor mondiale — de la mediile de VPS Hosting la Servere Dedicate de nivel enterprise — și din bună dreptate. Este rapid, stabil și construit cu securitatea la bază. Unul dintre cei mai fundamentali piloni ai acestei securități este sistemul de permisiuni de fișiere: un mecanism precis și elegant care controlează exact cine poate citi, modifica sau executa orice fișier sau director din sistem.
Indiferent dacă ești un dezvoltator care implementează o aplicație web, un administrator de sistem care întărește un server, sau un începător care învață linia de comandă, înțelegerea modului de verificare și interpretare a permisiunilor de fișiere în Linux este o abilitate indispensabilă. Acest ghid acoperă tot ceea ce trebuie să știi — de la elementele de bază ale modelului de permisiuni la biții speciali avansați — cu comenzi practice și exemple din lumea reală.
Ce sunt permisiunile de fișiere Linux?
Fiecare fișier și director din Linux are un set de permisiuni atașate. Aceste permisiuni definesc ce acțiuni sunt permise și de către cine. Există trei tipuri de permisiuni principale:
| Permisiune | Simbol | Ce face pe un fișier | Ce face pe un director |
|---|---|---|---|
| Citire | r | Vizualizează conținutul fișierului | Listează numele fișierelor din interior |
| Scriere | w | Modifică sau șterge fișierul | Creează sau elimină fișiere din interior |
| Execuție | x | Rulează fișierul ca program | Intră (navighează în) directorul |
Aceste trei permisiuni sunt aplicate independent la trei categorii distincte de utilizatori:
- Proprietar (utilizator) — Utilizatorul care deține fișierul, de obicei creatorul acestuia.
- Grup — Orice utilizator care aparține grupului atribuit fișierului.
- Alții — Toți ceilalți din sistem.
Această matrice de permisiuni trei-la-trei oferă administratorilor Linux control granular și puternic asupra accesului la fiecare resursă din sistem.
Cum să verifici permisiunile de fișiere: Comanda ls -l
Cea mai rapidă și cea mai frecvent utilizată metodă pentru a verifica permisiunile de fișiere este comanda ls -l (format de listare lungă).
ls -l file.txtExemplu de ieșire:
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 file.txtSă analizez fiecare componentă a acestei ieșiri:
- 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)Deci -rw-r--r-- ne spune:
- Proprietar (
alice): Citire + Scriere (rw-) - Grup (
developers): Doar citire (r--) - Alții: Doar citire (
r--)
Verificarea permisiunilor pentru mai multe fișiere
Pentru a vedea permisiunile pentru toate fișierele dintr-un director deodată:
ls -la /var/www/htmlSteagul -a include fișierele ascunse (cele care încep cu un punct). Aceasta este deosebit de utilă atunci când auditezi directoare de servere web pe un mediu de Găzduire Web Partajată sau VPS.
Obținerea informațiilor detaliate despre permisiuni cu stat
Pentru o analiză mai amănunțită — inclusiv reprezentări atât simbolice cât și numerice — folosește comanda stat:
stat file.txtExemplu de ieșire:
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 +0000Linia cheie este:
Access: (0644/-rw-r--r--) Uid: ( 1000/ alice) Gid: ( 1000/developers)Aceasta îți oferă:
- Notație numerică (octală):
0644 - Notație simbolică:
-rw-r--r-- - ID utilizator (UID) și ID grup (GID) cu numele lor lizibile
Comanda stat este neprețuită atunci când rezolvi erori de permisiuni pe servere de producție, deoarece oferă tot contextul de care ai nevoie într-o singură ieșire.
Înțelegerea notației numerice (octale) a permisiunilor
Permisiunile Linux pot fi exprimate ca numere, care este formatul folosit de comenzi precum chmod. Fiecare tip de permisiune are o valoare atribuită:
| Permisiune | Valoare numerică |
|---|---|
Citire (r) | 4 |
Scriere (w) | 2 |
Execuție (x) | 1 |
Fără permisiune (-) | 0 |
Calculezi valoarea permisiunii pentru fiecare categorie de utilizator prin adunarea valorilor:
| Combinație | Calcul | Valoare numerică |
|---|---|---|
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 |
Un număr octal din trei cifre reprezintă setul complet de permisiuni:
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 (---)Verificarea permisiunilor pe directoare
Directoarele folosesc același model de permisiuni, dar semnificația fiecărui bit este ușor diferită. Folosește ls -ld (observă steagul -d) pentru a inspecta directorul în sine mai degrabă decât conținutul acestuia:
ls -ld myfolderExemplu de ieșire:
drwxr-x--- 2 alice developers 4096 Aug 16 12:30 myfolderd inițial confirmă că acesta este un director. Permisiunile se descompun ca:
- Proprietar (
alice):rwx— Poate lista, crea/șterge fișiere și intra în director - Grup (
developers):r-x— Poate lista fișiere și intra, dar nu poate crea sau șterge - Alții:
---— Niciun acces
> Important: Bitul de execuție (x) pe un director înseamnă capacitatea de a-l intra (adică să folosești cd). Fără x, un utilizator nu poate naviga în director chiar dacă are permisiune de citire. Aceasta este o sursă comună de confuzie pentru începători.
Biții de permisiuni speciale: setuid, setgid și Sticky Bit
Dincolo de cei nouă biți de permisiuni standard, Linux suportă trei biți de permisiuni speciale care oferă control avansat al accesului:
1. setuid (s pe bitul de execuție al proprietarului)
Când este setat pe un fișier executabil, programul rulează cu privilegiile proprietarului fișierului mai degrabă decât ale utilizatorului care apelează. Acesta este modul în care comenzi precum passwd permit utilizatorilor obișnuiți să modifice /etc/shadow (care este deținut de root).
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Mar 27 2023 /usr/bin/passwds în poziția de execuție a proprietarului indică setuid.
2. setgid (s pe bitul de execuție al grupului)
Pe un fișier, programul rulează cu privilegiile grupului. Pe un director, fișierele noi create în interior moștenesc automat grupul directorului — util pentru dosarele de proiecte partajate.
ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project3. Sticky Bit (t pe bitul de execuție al altora)
Când este setat pe un director, doar proprietarul fișierului (sau root) poate șterge sau redenumi fișiere din interior, chiar dacă alții au permisiune de scriere. Aceasta este configurația standard pentru /tmp:
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpt la final semnalează că sticky bit este activ.
Reprezentarea numerică a biților speciali:
| Bit special | Valoare numerică |
|---|---|
| setuid | 4000 |
| setgid | 2000 |
| Sticky bit | 1000 |
Deci drwxrwxrwt = 1777 (1000 + 777).
Tabel complet de referință a permisiunilor
| Simbolic | Numeric | Semnificație pe un fișier | Semnificație pe un director |
|---|---|---|---|
--- | 0 | Niciun acces | Niciun acces |
--x | 1 | Doar execuție | Doar intrare |
-w- | 2 | Doar scriere | Modifică conținut (cu x) |
-wx | 3 | Scriere + Execuție | Intră și modifică |
r-- | 4 | Doar citire | Listează nume (necesită x pentru a fi util) |
r-x | 5 | Citire + Execuție | Listează și intră |
rw- | 6 | Citire + Scriere | Listează și modifică (fără intrare) |
rwx | 7 | Acces complet | Control complet |
Exemple de permisiuni din lumea reală
Iată cele mai comune modele de permisiuni pe care le vei întâlni în practică:
-rw-r--r-- (0644) — Fișier standard
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 config.txtProprietarul poate citi și scrie. Grupul și alții pot doar citi. Tipic pentru fișiere de configurare și conținut web.
-rwxr-xr-x (0755) — Script executabil sau binar
-rwxr-xr-x 1 alice developers 4096 Aug 16 12:30 deploy.shProprietarul are acces complet. Toți ceilalți pot citi și executa dar nu pot modifica. Standard pentru scripturi shell, binare de servere web și executabile publice.
-rw------- (0600) — Fișier privat
-rw------- 1 alice alice 1679 Aug 16 12:30 id_rsaDoar proprietarul poate citi sau scrie. Niciun acces pentru alții. Necesar pentru chei private SSH — SSH va refuza să folosească un fișier de cheie cu permisiuni mai largi.
drwxr-xr-x (0755) — Director public standard
drwxr-xr-x 5 alice developers 4096 Aug 16 12:30 public_htmlComun pentru directoare rădăcină web. Proprietarul are control complet; alții pot răsfoi și intra.
drwx------ (0700) — Director privat
drwx------ 3 alice alice 4096 Aug 16 12:30 .sshComplet privat. Doar proprietarul poate accesa. Necesar pentru directorul ~/.ssh.
drwxrwxrwt (1777) — Scris de toți cu Sticky Bit
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpToți pot crea fișiere, dar doar proprietarul fiecărui fișier poate șterge propriul fișier.
Sfaturi practice pentru mediile de server
Dacă administrezi un server Linux — indiferent dacă este un VPS care rulează o aplicație web, un server de mail securizat cu un Certificat SSL, sau o mașină care găzduiește mai multe domenii înregistrate prin Înregistrare Domenii — iată câteva practici esențiale de permisiuni:
- Nu seta niciodată 777 pe fișiere sau directoare decât dacă ai un motiv foarte specific și temporar. Fișierele scrise de toți sunt un risc major de securitate.
- Fișierele serverului web (de exemplu, sub
/var/www/) ar trebui de obicei să fie644pentru fișiere și755pentru directoare, deținute de utilizatorul tău de aplicație.
