Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

Comentariile sunt închise pentru Controlul permisiunilor cu umask

Prezentam in urma cu ceva vreme drepturile fisierelor in UNIX. Dupa cum am vazut, un fisier sau un director pot avea permisiuni diferite in functie de proprietarul si grupul acestuia. Spuneam ca exista trei tipuri de utilizatori care acceseaza o resursa: proprietarul, membrul grupului sau oricine altcineva. In functie de cele trei tipuri de utilizatori putem seta anumite permisiuni. Astfel putem da pe un fisier drept de citire si scriere proprietarului, drept de citire unui membru al grupului setat, si niciun drept utilizatorilor straini daca setam permisiunile pe 640.

Permisiunile grupate pe cele trei tipuri de utilizatori sunt bine gandite, dar in anumite situatii e greoi sau costisitor din punct de vedere al resurselor sa modificam permisiunile. De exemplu, daca avem nevoie de un script care creaza mii de fisiere ar fi mai comod sa ii spunem cu ce permisiuni sa creeze fisierele decat sa le schimbam mai tarziu. La fel in cazul aplicatiilor care creaza fisierele cu anumite drepturi, dar pe noi ne intereseaza o situatie mai permisiva sau mai stricta. Pentru astfel de situatii exista comanda umask

Comanda umask este uneori neinteleasa datorita modului de abordare. Spre deosebire de comanda chmod, comanda umask seteaza permisiunile care nu ne intereseaza. Adica, daca pentru chmod 022 inseamna niciun drept pentru proprietar si drept de scriere pentru grupul proprietar si straini, in cazul umask asta inseamna drepturi depline pentru proprietar si fara drept de scriere pentru membri grupului sau pentru straini. Astfel permisiunea 2 in octal, care reprezinta dreptul de scriere, nu mai este o permisiune garantata ci una restrictionata.

Inainte de a vedea un exemplu concret, trebuie sa avem in vedere doua lucruri atunci cand vine vorba de comanda umask:

  1. Comanda are efect pana la iesirea din mediul de lucru.
  2. Dreptul de executie (1 in octal) se aplica doar directoarelor, nu si fisierelor.

Luand in considerare cele de mai sus, sa vedem un exemplu practic:

lamp@lamp:~/tmp$ umask 022 && touch fisier1
lamp@lamp:~/tmp$ umask 000 && touch fisier2
lamp@lamp:~/tmp$ umask 066 && touch fisier3
lamp@lamp:~/tmp$ umask 077 && touch fisier4
lamp@lamp:~/tmp$ ls -al
-rw-r--r--  1 lamp lamp    0 2010-03-16 12:12 fisier1
-rw-rw-rw-  1 lamp lamp    0 2010-03-16 12:12 fisier2
-rw-------  1 lamp lamp    0 2010-03-16 12:12 fisier3
-rw-------  1 lamp lamp    0 2010-03-16 12:12 fisier4
lamp@lamp:~/tmp$

Urmarind cele patru fisiere create si mastile aplicate cu umask putem observa urmatoarele, in functie de u (proprietar), g (grup proprietar) si o (others – restul lumii):

  1. umask 022 – Fisierul s-a creat cu permisiuni 644. Pentru u exista drept de citire si scriere. Pentru g si o exista doar drept de citire (4 in octal) deoarece dreptul de scriere (2 in octal) a fost suprimat prin comanda umask 022666-022=644.
  2. umask 000 – Data fiind masca, care nu suprima niciun drept, fisierul creat va avea permite tuturor categoriilor de utilizatori drept de citire si scriere. Dupa cum am mentionat mai sus, dreptul de executie nu se aplica in cazul comenzii umask.
  3. umask 066 – Folosind o masca 066 oferim practic drepturi de citire si scriere proprietarului si suprimam orice alt drept celorlalte doua categorii de utilizatori.
  4. umask 077 – Pentru ca in cazul fisierelor dreptul de executie nu este luat in considerare, umask 066 si umask 077 au acelasi efect – ofera drept de citire si scriere pentru proprietar, dar suprima orice alt drept pentru celelalte doua grupuri de utilizatori.

Pentru a verifica masca actuala putem folosi comanda umask -S care ne va afisa masca in mod simbolic in functie de cele trei grupuri de utilizatori: u (proprietar), g (grup proprietar) si o (others).

sergiu@sergiu:~/tmp$ umask -S
u=rwx,g=,o=
sergiu@sergiu:~/tmp$

Trebuie luat in considerare, pentru a evita munca inutila, faptul ca umask isi pierde valabilitatea odata ce paraseste mediul de rulare. Astfel, daca aplicam comanda umask in cadrul unui shell script, aceasta va avea efect doar in cadrul scriptului. Pentru asta vom folosi urmatorul script:

#!/bin/sh
 
umask 022
umask -S
touch fisier

Pentru a verifica cele spuse il vom folosi in felul urmator:

lamp@lamp:~/tmp$ umask -S
u=rwx,g=,o=
lamp@lamp:~/tmp$ ./umask.sh 
u=rwx,g=rx,o=rx
lamp@lamp:~/tmp$ ls -al fisier
-rw-r--r-- 1 lamp lamp 0 2010-03-16 12:51 fisier
lamp@lamp:~/tmp$ umask -S
u=rwx,g=,o=
lamp@lamp:~/tmp$

Observam ca masca inainte de rularea fisierului este „u=rwx,g=,o=„. In cadrul fisierului am folosit comanda umask 022 si am verificat cu umask -S masca, care a devenit „u=rwx,g=rx,o=rx” conform mesajului afisat. S-a creat fisierul fisier care putem vedea ca are permisiuni 644, dupa cum era de asteptat. Verificam inca o data masca folosind umask -S si vedem ca in afara scriptului s-a pastrat masca initiala, adica „u=rwx,g=,o=„.

Linux

Comments are closed.