Gestionați accesul la fișiere, căutările în directoare și execuția scripturilor folosind comanda `chmod` în Linux. Această comandă este esențială pentru a schimba permisiunile fișierelor, iar deși poate părea complicată la început, devine simplă odată ce îi înțelegi funcționarea.
Modificarea permisiunilor fișierelor cu `chmod`
În Linux, accesul la fișiere și directoare este controlat prin intermediul permisiunilor. Aceste permisiuni sunt grupate în trei seturi principale: unul pentru proprietarul fișierului, unul pentru membrii grupului fișierului și un ultim set pentru toți ceilalți utilizatori.
Permisiunile stabilesc ce acțiuni pot fi efectuate asupra unui fișier sau director. Ele permit sau interzic citirea, scrierea (modificarea) și, în cazul scripturilor sau programelor, execuția. Pentru directoare, permisiunile controlează cine poate accesa directorul și cine poate crea sau modifica fișiere în interiorul acestuia.
Comanda `chmod` este utilizată pentru a defini fiecare dintre aceste permisiuni. Pentru a vizualiza permisiunile actuale ale unui fișier sau director, putem folosi comanda `ls`.
Vizualizarea și interpretarea permisiunilor
Folosind opțiunea `-l` (format lung) cu `ls`, putem afișa permisiunile pentru fișiere și directoare.
ls -l
Pe fiecare linie, primul caracter indică tipul intrării. O liniuță (-) semnifică un fișier, iar litera ‘d’ indică un director.
Următoarele nouă caractere reprezintă setările pentru cele trei seturi de permisiuni.
Primele trei caractere indică permisiunile pentru proprietarul fișierului (permisiuni utilizator).
Următoarele trei caractere arată permisiunile pentru membrii grupului fișierului (permisiuni grup).
Ultimele trei caractere afișează permisiunile pentru orice alt utilizator care nu aparține primelor două categorii (alte permisiuni).
Fiecare set de permisiuni conține trei caractere. Acestea sunt fie o liniuță (-), indicând absența permisiunii, fie o literă (r, w sau x), semnalând prezența unei permisiuni.
Literele reprezintă următoarele permisiuni:
r: Permisiune de citire. Fișierul poate fi deschis și conținutul său poate fi vizualizat.
w: Permisiune de scriere. Fișierul poate fi editat, modificat sau șters.
x: Permisiune de executare. Dacă fișierul este un script sau un program, acesta poate fi rulat.
De exemplu:
–: Înseamnă că nu există permisiuni acordate.
rwx: Înseamnă că toate permisiunile (citire, scriere și executare) sunt acordate.
În imaginea de exemplu, prima linie începe cu `d`, indicând un director numit „arhivă”. Proprietarul directorului este „dave”, iar grupul căruia îi aparține este tot „dave”.
Următoarele trei caractere (rwx) indică permisiunile proprietarului, care în acest caz are toate drepturile asupra directorului: citire, scriere și executare.
Al doilea set de trei caractere (rx) reprezintă permisiunile grupului, indicând că membrii grupului „dave” pot citi și executa în director, dar nu pot crea, edita sau șterge fișiere (nu au permisiune de scriere).
Ultimul set de trei caractere (rx) se referă la permisiunile „altora”, cei care nu sunt nici proprietari, nici membri ai grupului, care, similar grupului, pot doar citi și executa în director.
În concluzie, proprietarul (dave) are permisiuni complete, în timp ce membrii grupului și ceilalți au doar drepturi de citire și executare.
Pentru majoritatea fișierelor (cu excepția scriptului mh.sh), proprietarul și membrii grupului au permisiuni de citire și scriere, iar ceilalți doar de citire.
În cazul scriptului mh.sh, proprietarul și membrii grupului au toate permisiunile (citire, scriere și executare), în timp ce ceilalți au doar permisiuni de citire și executare.
Sintaxa permisiunilor `chmod`
Pentru a folosi comanda `chmod`, trebuie să specificăm:
Cine: cărui utilizator sau grup îi modificăm permisiunile.
Ce: ce fel de modificare facem (adăugăm sau eliminăm permisiunea).
Care: ce permisiune specifică modificăm (citire, scriere sau executare).
Utilizăm indicatori pentru a reprezenta aceste valori, formând instrucțiuni scurte de permisiuni, cum ar fi `u+x` (unde „u” este utilizatorul, „+” înseamnă adăugare, iar „x” este permisiunea de executare).
Valorile pentru „cine” sunt:
u: Utilizatorul, adică proprietarul fișierului.
g: Grupul, adică membrii grupului căruia îi aparține fișierul.
o: Alții, utilizatorii care nu fac parte nici din categoria ‘u’ nici din categoria ‘g’.
a: Toți, adică toate categoriile de mai sus.
Dacă nu specificăm una dintre categoriile de mai sus, `chmod` se va comporta ca și cum am fi folosit `a`.
Valorile pentru „ce” sunt:
-: Semnul minus. Elimină permisiunea.
+: Semnul plus. Acordă permisiunea, adăugând-o la cele existente. Dacă dorim să setăm doar permisiunea specificată, folosim semnul =, descris mai jos.
=: Semnul egal. Setează permisiunea specificată, eliminând toate celelalte.
Valorile pentru „care” sunt:
r: Permisiunea de citire.
w: Permisiunea de scriere.
x: Permisiunea de executare.
Exemple de setare și modificare a permisiunilor
Să presupunem că avem un fișier cu permisiuni complete pentru toți utilizatorii.
ls -l new_file.txt
Dorim ca proprietarul (dave) să aibă permisiuni de citire și scriere, iar grupul și ceilalți utilizatori doar de citire. Putem realiza acest lucru cu următoarea comandă:
chmod u=rw,og=r new_file.txt
Utilizarea operatorului „=” șterge toate permisiunile existente, apoi le setează pe cele specificate.
Să verificăm noile permisiuni:
ls -l new_file.txt
Permisiunile inițiale au fost eliminate, iar cele noi au fost setate conform așteptărilor.
Dar cum adăugăm o permisiune fără a elimina permisiunile existente? Putem face asta ușor.
Să presupunem că avem un script pe care l-am terminat de editat și trebuie să-l facem executabil pentru toți. Permisiunile actuale arată astfel:
ls -l new_script.sh
Putem adăuga permisiunea de executare pentru toți cu următoarea comandă:
chmod a+x new_script.sh
Verificând permisiunile, vom vedea că permisiunea de executare a fost adăugată, iar cele existente au rămas valabile.
ls -l new_script.sh
Am fi putut obține același rezultat fără să specificăm `a` în comanda `a+x`. Comanda `chmod +x new_script.sh` ar fi funcționat la fel de bine.
Setarea permisiunilor pentru mai multe fișiere
Putem aplica permisiuni pentru mai multe fișiere simultan.
Acestea sunt fișierele din directorul curent:
ls -l
Să presupunem că vrem să eliminăm permisiunile de scriere pentru „ceilalți” utilizatori din fișierele cu extensia „.page”. Putem face acest lucru cu următoarea comandă:
chmod o-w *.page
Să vedem ce efect a avut:
ls -l
După cum vedem, permisiunea de scriere a fost eliminată din fișierele „.page” pentru categoria „alții”. Restul fișierelor nu au fost afectate.
Pentru a include și fișierele din subdirectoare, putem folosi opțiunea -R (recursivă).
chmod -R o-w *.page
Sintaxa numerică
O altă modalitate de a folosi `chmod` este prin specificarea permisiunilor sub formă de numere din trei cifre. Cifra din stânga reprezintă permisiunile pentru proprietar, cea din mijloc pentru membrii grupului, iar cea din dreapta pentru ceilalți utilizatori.
Valorile pe care le putem folosi și semnificația lor sunt:
0: (000) Nicio permisiune.
1: (001) Permisiune de executare.
2: (010) Permisiune de scriere.
3: (011) Permisiuni de scriere și executare.
4: (100) Permisiune de citire.
5: (101) Permisiuni de citire și executare.
6: (110) Permisiuni de citire și scriere.
7: (111) Permisiuni de citire, scriere și executare.
Fiecare permisiune (citire, scriere, executare) corespunde unui bit din echivalentul binar al numărului zecimal. De exemplu, 5 (101 în binar) înseamnă permisiune de citire și executare, iar 2 (010 în binar) înseamnă permisiune de scriere.
Folosind această metodă, specificăm permisiunile dorite; nu le adăugăm la cele existente. Astfel, dacă permisiunile de citire și scriere erau deja active, ar trebui să folosim 7 (111) pentru a adăuga permisiunea de executare. Utilizarea lui 1 (001) ar elimina permisiunile de citire și scriere și ar adăuga permisiunea de executare.
Să restabilim permisiunea de citire pentru categoria „alții” a fișierelor „.page”. Trebuie să setăm și permisiunile pentru proprietar și grup. Aceste categorii au deja permisiuni de citire și scriere, adică 6 (110). Dorim ca „ceilalți” să aibă permisiunea de citire, adică 4 (100).
Comanda următoare va face acest lucru:
chmod 664 *.page
Această comandă setează permisiunile dorite pentru fiecare categorie de utilizatori. Proprietarul și grupul își păstrează permisiunile inițiale, iar ceilalți au permisiunea de citire restaurată.
ls -l
Opțiuni avansate
Dacă consultați pagina de manual pentru `chmod`, veți descoperi că există și opțiuni avansate legate de biții SETUID și SETGID, precum și de bitul „sticky”.
În 99% din situații, opțiunile descrise aici vor fi suficiente pentru a utiliza `chmod` eficient.