Administrare server open source

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

Introducere

Sistemele UNIX si UNIX-Like, fiind multi-user si multi-tasking au nevoie de o delimitare foarte clara a permisiunilor. Pe scurt, datorita faptului ca in UNIX orice este, de fapt, un fisier s-a implementat sistemul de permisiuni a fisierelor (implicit si al directoarelor). Astfel, un fisier se poate comporta in diferite moduri in functie de persoana care o acceseaza. Daca un fisier este accesat de proprietarul fisierului se comporta intr-un anumit fel… daca este accesat de altcineva dar face parte din grupul care este asociat fisierului se comporta in alt fel iar daca este accesat de oricine altcineva (care nu are nici o legatura cu fisierul) se comporta intr-un mod diferit.

Cum se face asta ? Este un sistem relativ simplu. Dupa cum ati observat fisierele au 3 cateogrii de utilizatori si anume: proprietarul fisierului, membrii grupului asociat fisierului, si restul utilizatorilor. Fiecarei categorii i se pot da 3 drepturi si anume: executare, citire, scriere (sau combinatii ale acestor 3 categorii). Ca sa dau un exemplu concret, prezit urmatorul cod:

su-2.05b# ls -al
total 4
drwxr-xr-x   2 root  wheel  512 Jun 25 21:00 ./
drwxrwxrwt  13 root  wheel  512 Jun 25 21:00 ../
-rw-r--r--   1 root  wheel    0 Jun 25 21:00 fisier.txt
su-2.05b#

Se poate observa ca fiecare linie incepe cu o secventa de 10 caractere. Primul caracter arata daca ceea ce vedem este un fisier simplu (-) sau daca e director (d). Urmatoarele 9 caractere sunt grupe de cate 3 corespunzatoare celor 3 categorii de utilizatori (proprietar, membru al grupului, utilizator simplu). Fiecare grup de 3 caractere prezinta permisiunile asupra fisierului.

Adica, caracterele 2, 3, 4 ne arata ce drepturi are proprietarul fisierului, caracterele 5, 6, 7 ne arata ce drepturi au utilizatorii din grupul asociat (in cazul nostru wheel) iar caracterele 8, 9, 10 ne arata ce drepturi au ceilalti utilizatori.

In cazul nostru, proprietarul (root) are drepturile rw- adica citire (r – read) si scriere (w – write). Linia de dupa rw ne arata ca proprietarul NU are dreptul de executie asupra fisierului. Ce inseamna asta ? fisierul respectiv poate fi citit sau modificat de proprietar dar sistemul de operare nu il vede ca script sau program executabil. Utilizatorii din grupul asociat fisierului si restul utilizatorilor au aceleasi drepturi (r–), adica au doar dreptul de citire.

Modificarea drepturilor

Modificarea drepturilor asupra unui fisier se face cu ajutorul comenzii chmod. Comanda chmod are urmatoarea sintaxa: chmod optiuni mod fisier.

Mai jos, un exemplu concret:

su-2.05b# ls -al
total 4
drwxr-xr-x   2 root  wheel  512 Jun 25 21:00 ./
drwxrwxrwt  13 root  wheel  512 Jun 25 21:00 ../
-rw-r--r--   1 root  wheel    0 Jun 25 21:00 fisier.txt
su-2.05b# chmod 700 fisier.txt
su-2.05b# ls -al
total 4
drwxr-xr-x   2 root  wheel  512 Jun 25 21:00 ./
drwxrwxrwt  13 root  wheel  512 Jun 25 21:00 ../
-rwx------   1 root  wheel    0 Jun 25 21:00 fisier.txt*
su-2.05b#

Dupa cum observati primele 10 caractere aveau valorile initiale „-rw-r–r–” iar dupa executarea comenzii chmod cele 10 caractere s-au schimbat in „-rwx——„. Adica, tradus in romana, caracterul – de la inceput ramane la fel (adica e tot fisier simplu), proprietarul are acum drepturile rwx (citire, scriere, executare) iar restul utilizatorilor (inclusiv cei din grupul asociat fisierului) nu mai au nici un drept.

Drepturile asociate pot fi date comenzii in doua moduri: modul octal sau cel simbolic. Mai jos incerc sa fac o scurta descriere a acestor doua moduri.

Modul octal

Modul octal e modul standard de specificare a drepturilor unui fisier. I se spune octal dintr-un motiv simplu… drepturile sunt de fapt, in reprezentarea interna, 3 octeti. Probabil pare ciudat, deci nu intru in mai multe detalii (tutorialul e pentru incepatori).

In modul octal drepturile sunt reprezentate printr-un grup de 3 cifre intre 0 si 7 care reprezinta drepturile cele 3 tipuri de utilizatori. Pentru unii pare cam derutant, dar este foarte simplu. Mai jos prezint un tabel ca sa intelegeti exact ce reprezinta fiecare cifra.

0 - Nu exista nici un drept asupra fisierului
1 - Drept de executare, dar fara drept de citire sau scriere
2 - Drept de scriere dar fara drept de citire sau executare
3 - Drept de scriere si executare a fisierului dar fara drept de citire
4 - Drept de citire a fisierului, dar fara drept de scriere sau executare
5 - Drept de citire si executare a fisierului, dar fara drept de scriere
6 - Drept de citire si scriere dar fara drept de executare
7 - Drept de citire, scriere si executare a fisierului

Ok, o gramada de cifre pe aici, dar probabil acum va dati seama de ce am dat mai devreme „chmod 700 fisier.txt” si de ce dupa executarea comenzii proprietarul avea drept de citire, scriere si executare a fisierului iar restul utilizatorilor nici un drept.

Acum, dupa cum e obiceiul in UNIX, totul are o logica. Aceste cifre nu au fost alese la intamplare. Ca sa intru putin in amanunte, explic si cum sunt „formate” aceste cifre.
De fapt, tot ce trebuie sa stiti e urmatorul tabel (mai mic):

0 - Nici un drept
1 - Drept de executare
2 - Drept de scriere
4 - Drept de citire

Daca vrem sa facem ceva drepturi avansate, tot ce avem de facut e sa adunam aceste numere. Adica, daca unui fisier ii dam drept 1, inseamna ca il putem executa. Daca e un script, vrem sa vada si altii cum arata el in interior, adica ii dam si drept de citire. Asta inseamna 1 (drept de executare) adunat cu 4 (drept de citire). Rezultatul este 5 (adica drept de executare si citire). De aici puteti deduce mai departe cum se formeaza drepturile pentru fiecare user (adica de ce 7 da drepturi depline, 3 da drept de executare si scriere).
Ca sa setati permisiunile pentru toate cele 3 tipuri de utilizatori tot ce aveti de facut e sa formati o cifra corespunzatoare fiecarui tip. Astfel, daca aveti un fisier care trebuie sa-l poata citi toata lumea, dar sa poata fi scris doar de proprietar, ii puneti drepturile 644, adica proprietarul are dreptul 6 (citire+scriere < -> 4+2) iar restul utilizatorilor au doar dreptul 4 (citire). Daca vrei ca fisierul sa fie citit doar de cei care sunt din grupul corespunzator fisierului, folositi comanda chmod cu modul 640 (utilizatorii obisnuiti au 0, adica nici un drept).

Modul simbolic

Pentru incepatori sau pentru cei care nu sunt de specialitate e greu sau incomod sa foloseasca modul octal asa ca s-a implementat si modul simbolic care e ceva mai sugestiv. La fel ca in modul octal, drepturile se aloca pentru fiecare din cele 3 tipuri de utilizatori in parte, cu mentiunea modul este specificat sub forma (cine)(actiune)(mod).

(cine) va fi inlocuit de u(pentru proprietar), g(pentru grup), o(others – restul utilizatorilor) sau o combinatie intre cele 3 (ug = proprietar si membrii grupului).

(actiune) va fi inlocuit cu actiunea necesara. Actiunile puse la dispozitie de modul simbolic sunt +(adaugare de drept), -(eliminarea unor drepturi) sau = (adaugare explicita de drepturi). Astfel putem adauga, de exemplu, cu + dreptul de citire, putem elimina cu – dreptul de scriere sau putem folosi = care reseteaza toate drepturile si le seteaza dupa cum se specifica in campul (mod).

(mod) va fi inlocuit de modul sau de drepturile care le alocam. Dupa cum spuneam, e ceva simbolic deci mai sugestiv. Modul poate fi r(read), w(write) sau x(execute).

Ca sa dau un exemplu concret, revenim la fisier.txt pe care rulam comanda chmod si specificam drepturile in mod simbolic:

su-2.05b# ls -al
total 4
drwxr-xr-x   2 root  wheel  512 Jun 25 21:00 ./
drwxrwxrwt  13 root  wheel  512 Jun 25 21:00 ../
-rwx------   1 root  wheel    0 Jun 25 21:00 fisier.txt*
su-2.05b# chmod u-x,g+r,o=rx fisier.txt
su-2.05b# ls -al
total 4
drwxr-xr-x   2 root  wheel  512 Jun 25 21:00 ./
drwxrwxrwt  13 root  wheel  512 Jun 25 21:00 ../
-rw-r--r-x   1 root  wheel    0 Jun 25 21:00 fisier.txt*
su-2.05b#

Ce am facut, de fapt ? Am executat comanda chmod cu parametrul „u-x,g+r,o=rx„. Aceasta secventa ne spune asa: pentru u(proprietar) scoatem dreptul de executare, pentru g(persoanele din grupul aferent) adaugam dreptul de citire iar pentru o(restul utilizatorilor) resetam toate drepturile (semnul =) iar apoi dam dreptul de citire si scriere.

Mai sugestiv, nu ? Poate nu e neaparat mai simplu, dar sigur e mai sugestiv. De obicei incepatorii folosesc modul simbolic de setare a drepturilor pentru ca e mai usor de tinut minte, dar odata inteles mecanismul drepturilor toti utilizatorii tind sa foloseasca modul octal care e mai logic si mai „curat” in cazul scripturilor.

Alte drepturi

In cazul unor sisteme UNIX-Like mai exista si alte drepturi asupra fisierelor. Aici prezint doar unul dintre aceste drepturi care mi se pare foarte util si anume protectia la stergere. Daca un fisier este protejat la stergere, nici un utilizator (incluzand proprietarul si utilizatorul root) nu poate sterge acel fisier indiferent de drepturile care le are.

Acest mod se aplica fisierelor cu ajutorul comenzii chflags. Pentru a vedea daca e setat modul de protejare se utilizeaza comanda „ls -lo„.

Comanda chflags are urmatoarea sintaxa: chflags optiuni flag fisier. In cazul nostru, protejarea la scriere, comanda se foloseste ca in exemplul de mai jos:

su-2.05b# ls -lo
total 0
-rw-r--r-x  1 root  wheel  - 0 Jun 25 21:00 fisier.txt*
su-2.05b# chflags sunlink fisier.txt
su-2.05b# ls -lo
total 0
-rw-r--r-x  1 root  wheel  sunlnk 0 Jun 25 21:00 fisier.txt*
su-2.05b# rm fisier.txt
rm: fisier.txt: Operation not permitted
su-2.05b#

Dupa cum vedeti, am executat comanda chflags cu modul sunlink asupra fisierului fisier.txt. La executarea comenzii „ls -lo” apare flag-ul „sunlnk” care ne arata ca fisierul este protejat la scriere. Cand am incercat sa-l sterg (rm fisier.txt) mi-a aparut mesajul „rm: fisier.txt: Operation not permited„. Adica nu ma lasa sa sterg fisierul chiar daca eu sunt proprietarul (si, in acelasi timp si root).

Pentru a putea sterge fisierul se foloseste comanda chflags pentru a elimina flag-ul de protejare la stergere. Asta ar trebui sa arate cam asa:

su-2.05b# chflags nosunlink fisier.txt
su-2.05b# rm fisier.txt
su-2.05b# ls -lo
total 0
su-2.05b#

Dupa cum vedeti, am folosit chflags cu parametru nosunlink asupra fisierului fisier.txt. Adica, am scos flag-ul sunlnk ceea ce mi-a permis sa sterg fisierul fara nici o problema.

Pentru alte detalii, studiati paginile de manual chmod(1), ls(1) si chflags(1).

Linux

6 Responses so far.

  1. Eugen says:

    Foarte clare aceste axplicatii.
    Intrebare :
    As putea sa invat un limbaj de programare pentru a face diverse programe,aplicatii?

  2. Sergiu Tot says:

    Nu vad de ce nu ai putea sa inveti. Programarea nu e foarte complicata, si daca vrei poate fi chiar usoara daca te orientezi spre limbaje high-level (ex. Java) sau limbaje de scripting.

    Daca ai intrebari sau nu stii de unde sa incepi, intra pe NetHelp si spune ce vrei sa faci. Sigur primesti sfaturi bune 😉

  3. Naghi Stefan says:

    Multe mulțumiri ! Este un articol din care am putut învăța .Domnul să te ajute !

  4. Sergiu Tot says:

    Merci de apreciere, Stefan! 😉

  5. Stefan says:

    Salut,

    Foarte interesant articol.
    Incerc sa trec de la windows la linux si am ceva mici probleme.
    M-ar interesa niste sfaturi de protectie la stergere a unor anumite fisiere si subdirectoare din cadrul unui director parinte.
    [email protected]

    Mersi,
    Ștefan

  6. Sergiu Tot says:

    Salut,

    Merci de apreciere!

    Protectia la stergere se poate face cu chattr:

    chattr +i fisier.txt

    Ca sa scoti protectia folosesti aceeasi comanda, dar cu -i in loc de +i 😉