Am constatat că foarte mulți autointitulați "specialiști în computere" habar n-au ce sunt permisiunile și cu ce se mănâncă ele. Dacă pentru windozauri este de înțeles asta (ei nu fac decât click -> click -> next), pentru utilizatorii Linux este de neconceput să nu știe câteva noțiuni de bază. Cele de mai jos sunt scrise pentru începătorii în Linux și cei din Windows care vor să știe mai multe sau intenționează să încerce acest minunat sistem de operare.
Pentru început, trebuie reținut că într-un sistem UNIX (se aplică și sistemelor Linux) orice este un fișier; dacă nu este un fișier, atunci este un proces.
Linuxul nu face nicio diferență între un director și un fișier, pentru că directorul nu este altceva decât un fișier care conține numele altor fișiere.
Aproape tot ceea ce întâlnim într-un sistem Linux este un fișier; dacă nu este fișier, atunci este un proces.
Tipuri de fișiere în Linux
- directoare: fișiere care conțin o listă a altor fișiere;
- fișiere speciale: mecanismele folosite pentru introducerea comenzilor și returnarea răspunsurilor (cele mai multe fișiere speciale se găsesc în /dev);
- legături: este modalitatea prin care un fișier sau un director este făcut vizibil în mai multe părți ale sistemului de fișiere;
- socket-uri (de domenii): un fel special de fișiere, asemănătoare cu socket-urile TCP/IP, care asigură desfășurarea proceselor în rețea, protejate prin controlul asupra accesului la sistemul de fișiere.
- conexiuni (pipe): se comportă mai mult sau mai puțin ca socket-urile și formează o cale pentru comunicarea între procese.
Pentru a afișa conținutul unui director, precum și tipul fiecărui fișier, se folosește comanda ls cu opțiunea -l:
bobses@bobsesland:~/Desktop$ ls -l
total 52
drwxrwxr-x 4 bobses bobses 4096 nov 26 08:31 diverse
-rwxrwxrwx 1 bobses bobses 93 nov 25 19:42 HO_script
-rw-r----- 1 bobses bobses 37126 nov 25 10:21 ubuntu.jpg
Comanda de mai sus executată în folderul Desktop al utilizatorului bobses arată că folderul respectiv conține directorul diverse, dar și 2 fișiere: HO_script și ubuntu.jpg. Primul caracter ne arată tipul fișierului, astfel:
Simbol | Semnificație |
- | fișier obișnuit (poate fi un fișier text, un executabil, un fișier grafic, o arhivă, etc.) |
d | director (în linux, directoarele sunt fișiere ca oricare altele, dar care conțin alte nume de fișiere și țintesc către inode-uri) |
l | legătură simbolică (fișierul legătură conține numele unuialt fișier sau director; când Linux accesează o legătură simbolică, încearcă să citească fișierul țintă) |
c | character device - fișier special (un fișier care corespunde unui dispozitiv hardware de la care și către care datele sunt transferate în unități de câte 1 B (1 byte = 8 biți); exemple: port paralel, RS-232 serial, dispozitive audio) |
s | socket - un socket este similar unei conexiuni, dar permite, în plus, legăruri bidirecționale și de rețea |
p | conexiuni (pipe) - o conexiune activează două programe care rulează în linux și care comunică unul cu celălaltul; unul deschide conexiunea pentru citire, iar celălalt o deschide pentru scriere, fiind posibil, astfel, transferul de date între programe |
b | dispozitiv (block device) - este un tip de fișier care corespunde unui dispozitiv hardware de la care și către care datele sunt transferate în blocuri mai mari de 1 B (1 byte = 8 biți); exemple: hard disk-uri, memorii USB, CD-ROM ș.a.m.d. |
Utilizatori și grupuri de utilizatori
Totul într-un sistem Linux se petrece într-un mod foarte strict. Nimic nu este întâmplător. Priviți tabelele de mai jos:
Cod | Semnificație |
u | permisiuni acordate utilizatorilor (user) |
g | permisiuni acordate grupurilor (group) |
o | permisiuni acordate celorlalți (other) |
În tabelul următor sunt prezentate codurile pentru acordarea drepturilor de acces asupra unui fișier:
Cod (ce se permite) | Semnificație |
0 sau - | fără niciun drept de acces asupra fișierului respectiv |
4 sau r | sunt acordate drepturi de citire (read) asupra fișierului |
2 sau w | sunt acordate drepturi de scriere (write) asupra fișierului |
1 sau x | sunt acordate drepturi de execuție (exec) asupra fișierului |
Fiecare utilizator al unui sistem Linux are un nume (de exemplu bobses); acest utilizator se află asociat anumitor grupuri; pentru a vedea grupurile în care se află un anumit utilizator se rulează comanda groups nume_utilizator:
bobses@bobsesland:~/Desktop$ groups bobses
bobses : bobses adm cdrom sudo dip plugdev lpadmin sambashare
Ca să n-o mai lungim, fiecare utilizator al unui sistem are sau nu are anumite drepturi asupra unui fișier. Să presupunem că este vorba de un document: poate să nu vadă deloc fișierul respectiv, îl poate doar citi sau îl poate și modifica, având drepturi de scriere asupra sa.
Permisiunile sunt acordate proprietarului (owner), unui grup (group) sau celorlalți (other):
proprietar (owner) | grup (group) | ceilalți (other) | |
octal | 6 | 6 | 6 |
binar | 1 1 0 | 1 1 0 | 1 1 0 |
ce se permite | r w x | r w x | r w x |
- Proprietar (owner) - cel care a creat fișierul respectiv
- Grup (group) - utilizatorii care fac parte din grupurile unde proprietarul este membru
- Ceilalți (other) - toți ceilalți utilizatori
Calculul permisiunilor
În sistemul binar 1 înseamnă că opțiunea respectivă este activată, 0 că este dezactivată. Nu facem matematică, dar ne amintim că sistemul octal (cifre doar de la 0 la 7) poate fi reprezentat în binar cu 3 caractere: primul din dreapta are valoarea 0, al doilea din dreapta are valoarea 2, al treilea din dreapta are valoarea 4 (2 la puterea a doua). Astfel, în exemplul de mai sus, 110 înseamnă 4+2+0=6. Alt exemplu: 111 = 4+2+1 = 7.
Tot din ultimul tabel, observăm că:
- proprietarul are drept de scriere și citire asupra fișierului respectiv (fără drept de execuție)
- grupul are drept de scriere și citire asupra fișierului respectiv (fără drept de execuție)
- ceilalți au drept de scriere și citire asupra fișierului respectiv (fără drept de execuție)
Este foarte simplu să vedem toate drepturile pe care le are un fișier în Linux. Revenim la cele prezentate un pic mai sus:
bobses@bobsesland:~/Desktop$ ls -l
total 52
drwxrwxr-x 4 bobses bobses 4096 nov 26 08:31 diverse
-rwxrwxrwx 1 bobses bobses 93 nov 25 19:42 HO_script
-rw-r----- 1 bobses bobses 37126 nov 25 10:21 ubuntu.jpg
Să analizăm primul rând de la stânga la dreapta:
- d - ne arată că este vorba de un director
- următoarele 3 caractere (rwx) definesc drepturile pe care le are proprietarul (owner): rwx = 4+2+1 = 7, adică drepturi totale (citire, scriere, execuție)
- următoarele 3 caractere (rwx) definesc drepturile pe care le au utilizatorii din grupurile din care face parte proprietarul bobses: rwx = 4+2+1 = 7, adică drepturi totale (citire, scriere, execuție)
- ultimele 3 caractere (r-x) definesc drepturile pe care le au ceilalți utilizatori: r-x = 4+0+1 = 5, adică doar drept de citire și execuție (deschidere a directorului)
Altfel spus, permisiunile pentru directorul diverse pot fi scrise ca 775.
În mod similar determină și permisiunile pentru celelalte fișiere din output-ul dat ca exemplu:
- HO_script este un fișier obișnuit (nu apare caracterul d, ci numai -) cu permisiunile 777 - toți utilizatorii sistemului au drepturi totale supra lui (citire, scriere, execuție)
- ubuntu.jpg este un fișier obișnuit cu permisiunile 640 - proprietarul are drept de citire și scriere, grupurile din care face parte proprietarul îl pot doar citi (vizualiza imaginea respectivă), iar ceilalți nu au nici nu drept asupa acestui fișier.
Cele descrise mai sus sunt prezentate schemati în imaginea următoare:
Un calculator online pentru permisiuni poate fi găsit aici.
Schimbarea permisiunilor unui fișier
Pentru a schimba atributele (permisiunile) unui fișier sau folder, se folosește comanda chmod:
chmod permisiuni_noi nume_fișier
Exemplu (vedem cum s-au schimbat atributele fișierului ubuntu.jpg din 640 în 777):
chmod 777 ubuntu.jpg
ls -l
-rwxrwxrwx 1 bobses bobses 37126 nov 25 10:21 ubuntu.jpg
Protejarea fișierelor cu chmod
Comanda | Semnificație |
chmod 400 nume_fișier | protejează fișierul pentru o suprascriere accidentală |
chmod 500 nume_director | protejează directorul pentru ștergere, redenumire sau mutare accidentală a fișierelor din interior |
chmod 600 nume_fișier | fișier privat, care poate fi schimbat doar de utilizatorul care a introdus această comandă (proprietar) |
chmod 644 nume_fișier | fișier public, care poate fi accesat de toți, dar poate fi schimbat doar de proprietar |
chmod 660 nume_fișier | fișier care poate fi accesat și schimbat de utilizatorii care aparțin grupurilor din care face parte prorpietarul, ceilalți neavând niciun drept asupra lui |
chmod 700 nume_fișier | numai propriatarul (cel care l-a creat) are drepturi depline asupra lui, grupurile și ceilalți neavând niciun drept asupra lui |
chmod 755 nume_director | pentru fișierele care trebuie să fie citite sau rulate și de alți utilizatori, dar pot fi schimbate (scrise) doar de proprietar (cel care l-a creat și a introdus comanda) |
chmod 775 nume_fișier | modul standard de acordare a permisiunilor unui grup |
chmod 777 nume_fișier | oricine poate face orice cu acest fișier |
Schimbarea proprietarului unui fișier
Și acest lucru se poate vface extrem de simplu din termina folosind comanda chown:
chown utilizator_nou:grup_default_utilizator_nou nume_fișier
sau (de reținut caracterul punct . după numele utilizatorului nou - adaugă automat grupul default al acelui utilizator și mai economisim câteva tastări :))
chown utilizator_nou. nume_fișier
Acum cred că nu veți mai avea probleme în înțelegerea permisiunilor unui fișier sau director, ce reprezintă utilizatorul proprietar, grupul și ceilalți. Eventualele nelămuriri le aștept în comentarii.
Bogdan a zis
drwxrwxr-x 4 bobses bobses 4096 nov 26 08:31 diverse
bobses bobses -primul bobses reprezinta owner-ul directorului si cel de-al doilea reprezinta grupul din care face parte?
Bobses a zis
Da, pe serverul respectiv al doilea bobses e grupul principal al userului bobses. 🙂
Donald Carol a zis
salut. am avut deseori problema urmatoare: nu puteam accesa un director anume. Solutia era sa-i dau din terminal sudo chmod 777 numedirector ?
Bobses a zis
Salut
Asta e una din soluții - și cea mai puțin recomandată. Dacă dai 777 pe un fișier sau un folder, e indicat ca, după ce-ți termini treaba, să-i refaci permisiunile anterioare. În sistemele linux nu e indicat să ai fișiere cu 777 (înseamnă că dai acces tuturor la ele, de aici putând să-ți fie spart sistemul).
În cele mai multe cazuri, problema se rezolvă schimbând proprietarul cu
chown
- descris în articol.Din cauza sistemnului de permisiuni foarte strict este Linux așa de sigur.
Donald Carol a zis
Thanks. You're the best.
Bobses a zis
You're welcome. 🙂
Şerban Stănescu a zis
Foarte fain articolul!
Chiar am avut probleme la acest capitol, zilele trecute, când am făcut "revoluţie" pe HDD.
Am trecut partiţia de date de pe NTFS, pe ext3fs...
O să trimit lumea care întreabă aici. E totuşi pe româneşte. Parcă e mai uşor de priceput!
Acum a ajuns să-mi fie indiferent, dar parcă sună altfel în Română...
Bobses a zis
Mulțumesc! 🙂
icealinutza a zis
Foarte bun articolul!
Bobses a zis
Mersi!