UNIX,Linux,Retele,Programare

23 Sep 06 03:50

Agkelos
SkullBox Guardian
Locaţie: Ouranos
Înregistrat: 22 Sep 06
Mesaje: 4324
Site web

Despre drepturi in UN*X

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:

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:

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# 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.

Cod:

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):

Cod:

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 citire).
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:

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 ../
-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 smile 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:

Cod:

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:

Cod:

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.

Sper ca am fost explicit si am ajutat... Pentru nelamuriri sau greseli postati aici si incerc sa dau mai multe detalii sau sa corectez greselile.

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

Sper ca v-a placut tutorialul si il gasiti util  wink


PM - Modalitate de a trimite mesaje private/personale utilizatorilor; aici nu se rezolva probleme si nu se dau sfaturi.
Forum - Locul in care se cer sfaturi si se rezolva probleme; aici nu se dau datele personale/confidentiale.

Docendo discimus.

Offline

 

» If at first you don't succeed call it a beta release

tutoriale,programare

Scuze de offtopic

08 Feb 08 13:57

HexString
Moderator
Locaţie: Oradea
Înregistrat: 17 Oct 06
Mesaje: 772
Site web

Re: Despre drepturi in UN*X

Foarte bun tutorialul. Te ajuta sa ai gija cum dai permisiunile la fisiere, pentru ca poate sa conteze foarte mult permisiunile care le dai unui folder, ma refer ca multi care ar putea ajunge pe server-ul tau, printr-o vulnerabilitate php, trebuie sa intampine dificultati cu permisiunile sale spre alte directoare big_smile, chiar daca a ajuns pe server, trebuie sa te gandesti sa nu faci sa nu aiba "dreptul" sa faca nimic tongue.

Tot din cauza permisiunilor am avut cateva probleme cu sistemul ca am incercat sa ma joc putin cu permisiunile folderelor si am avut grija sa dau chmod si la home :-", si nu a iesit ceva prea frumos. Asadar "reinviere topic".


Tutoriale WEB - www.tutoriale-web.com

Puccu - Blogul meu personal

Offline

 

25 Apr 08 20:47

redkar23
Gamer
Locaţie: Timisoara
Înregistrat: 25 Mar 08
Mesaje: 151
Site web

Re: Despre drepturi in UN*X

@ HexString  : ce zici de experimentul acesta : 

sudo chmod a= /

cool

The best way to learn is by trial and error lol

Cheers

Editat ultima oară de redkar23 (25 Apr 08 20:47)


http://tn3-1.deviantart.com/fs32/300W/i/2008/233/5/7/Boo_by_Redkar23.png
What doesn't kill you, makes you stronger .       - Friedrich Nietzsche
O noua definitie a ironiei : life itself .                 - Redkar23

Offline

 

25 Apr 08 23:25

Agkelos
SkullBox Guardian
Locaţie: Ouranos
Înregistrat: 22 Sep 06
Mesaje: 4324
Site web

Re: Despre drepturi in UN*X

redkar23 a scris:

The best way to learn is by trial and error lol

Da, da' nu chiar in halu' asta lol

Acum sincer, nu recomanda chestii din astea unui incepator. E posibil sa piarda accesul la date importante si din lipsa cunostintelor sa nu stie cum se pot recupera chiar daca solutia e relativ usoara. Oamenii cand se panicheaza apeleaza la solutii extreme (format) si nu e bine smile


PM - Modalitate de a trimite mesaje private/personale utilizatorilor; aici nu se rezolva probleme si nu se dau sfaturi.
Forum - Locul in care se cer sfaturi si se rezolva probleme; aici nu se dau datele personale/confidentiale.

Docendo discimus.

Offline

 

26 Apr 08 00:01

redkar23
Gamer
Locaţie: Timisoara
Înregistrat: 25 Mar 08
Mesaje: 151
Site web

Re: Despre drepturi in UN*X

eu de obicei fac experimente de genu lol si nu in virtual machine or sth :-"
de fapt vroiam sa dau comanda

sudo chmod a= u=rwx /

dar am uitat partea cu "u=rwx" si nah:D a iesit ceva de genu :

redkar23@localhost $ ls
bash : ls : operation not permmited

Am reinstalat sistemul, of course

Da, deci pentru incepatori :
"sudo chmod a= /" sterge orice drepturi asupra sistemului, deci incercati sa nu folositi comanda aceasta ( cel putin nu pe root directory )

Si eu vroiam sa sterg orice drepturi ale userilor de a accesa fisierele inafara de proprietar ( u=rwx ) , dar eram obosit si am uitat sa scriu si partea aceasta smile


http://tn3-1.deviantart.com/fs32/300W/i/2008/233/5/7/Boo_by_Redkar23.png
What doesn't kill you, makes you stronger .       - Friedrich Nietzsche
O noua definitie a ironiei : life itself .                 - Redkar23

Offline

 

» Press CTRL+ALT+DEL now for an IQ test

tutoriale,programare

Scuze de offtopic


Antet forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson



Ethical hacking and programming community