CATEGORII DOCUMENTE |
Nucleul asociaza doi identificatori utilizator (UID) unui proces, indenpendent de identificatorul procesului: identificatorul utilizator real si identificatorul utilizator efectiv sau setuid. Identificatorul utilizator real identifica utilizatorul care este responsabil pentru rularea procesului. Identificatorul utilizator efectiv este folosit pentru a asigna dreptul de proprietate asupra fisierelor nou create, pentru a verifica drepturile de acces la fisier si dreptul de a trimite semnale catre procese prin intermediul apelului sistem kill.
Nucleul permite unui proces sa-si schimbe propriul identificator utilizator efectiv cand executa un program de tip setuid sau cand acesta executa apelul sistem setuid explicit.
Un program de tip setuid este un fisier executabil care are setat bitul setuid in campul drepturilor de acces. Cand un proces executa un program de tip setuid, nucleul seteaza campurile identificatorului utilizator efectiv din tabela de procese si u area, la valoarea identificatorului proprietarului fisierului. Pentru a distinge cele doua campuri, vom numi campul din tabela de procese identificatorul utilizator " salvat ". Un exemplu va ilustra diferenta dintre cele doua campuri.
Sintaxa apelului sistem setuid este:
setuid(uid)
unde uid este noul identificator utilizator si rezultatul sau depinde de valoarea curenta a identificatorului utilizator efectiv. Daca identificatorul utilizator efectiv al procesului apelant este acela al superutilizatorului, nucleul reseteaza campurile celor doi identificatori utilizator real si efectiv din tabela de procese si u area, la valoarea uid. Daca identificatorul utilizator efectiv nu este acela al superutilizatorului, nucleul reseteaza identificatorul utilizator efectiv din u area la valoarea parametrului uid daca acesta are valoarea identificatorului utilizator real sau daca are valoarea identificatorului utilizator salvat. In celelalte cazuri, apelul sistem se intoarce cu eroare. In general, procesul mosteneste identificatorii sai (real si efectiv) de la procesul parinte in timpul apelului sistem fork si pastreaza aceste valori pe tot parcursul executiei apelului sistem exec.
Programul din figura 8.25 exemplifica apelul sistem setuid. Presupunem ca fisierul executabil generat prin compilarea programului are proprietar pe 'maury' (identificatorul utilizator 8319), bitul sau setuid este activat, si toti utilizatorii au permisiunea sa-l execute. In plus, presupunem ca utilizatorii 'mjb' (identificatorul utilizator 5088) si 'maury' au in proprietate fisierele cu aceleasi nume, si ambele fisiere au setat dreptul de acces " read-only" . Utilizatorul 'mjb' vede urmatoarele date la iesire cand executa programul:
uid 5088 euid 8319
fdmjb -1 fdmaury 3
dupa setuid (5088): uid 5088 euid 5088
fdmjb 4 fdmaury -1
dupa setuid (8319): uid 5088 euid 8319
Apelurile sistem getuid si geteuid intorc identificatorii utilizator real si efectiv ai procesului, 5088 si respectiv 8319 pentru utilizatorul 'mjb'. De aceea, procesul nu poate deschide fisierul 'mjb', pentru ca identificatorul sau utilizator efectiv (8319) nu are drept de citire a fisierului, dar poate deschide fisierul 'maury'.
#include<fnctl.h>
main()
Figura 8.25 Exemplu de intrebuintare a apelului setuid
Dupa apelul setuid pentru a schimba identificatorul utilizator efectiv al procesului cu identificatorul utilizator real ('mjb'), a doua instructiune printf tipareste valorile 5088 si 5088, si identificatorul utilizator pentru 'mjb'. Acum procesul poate deschide fisierul 'mjb', pentru ca identificatorul sau utilizator efectiv are drept de citire a fisierului, dar procesul nu poate deschide fisierul 'maury'. In final, dupa apelul setuid, pentru a schimba identificatorul utilizator efectiv cu valoarea setuid salvata (8319), a treia instructiune printf va tipari din nou valorile 5088 si 8319. Ultimul caz arata ca procesul poate executa un program de tip setuid si isi poate schimba identificatorul sau utilizator efectiv cu identificatorul utilizator real.
Utilizatorul 'maury' vede urmatoarele date la iesire cand executa programul:
uid 8319 euid 8319
fdmjb -1 fdmaury 3
dupa setuid (8319): uid 8319 euid 8319
fdmjb -1 fdmaury 4
dupa setuid (8319):uid 8319 euid 8319
Identificatorii utilizator real si efectiv sunt intotdeauna 8319: procesul nu poate deschide fisierul 'mjb' dar poate deschide fisierul 'maury'. Identificatorul utilizator efectiv pastrat in u area este rezultatul celui mai recent apel sistem setuid sau a executiei unui program de tip setuid; el este singurul responsabil pentru determinarea dreptulurilor de acces la fisier. Identificatorul utilizator salvat in tabela de procese permite unui proces sa-si schimbe propriul identificator utilizator efectiv prin executia apelului sistem setuid, reapeland astfel identificatorul utilizator efectiv initial.
Programul login executat de utilizatori cand acestia se logheaza in sistem este un program de tip setuid.) si ruleaza cu identificatorul utilizator efectiv al superutilizatorului. El cere utilizatorulului numele si parola si cand este satisfacut apeleaza setuid pentru a-si seta identificatorii utilizator efectiv si real la valorile identificatorilor utilizatorului care incearca sa se logheze (gasite in campurile din fisierul '/etc/passwd'). Programul login, in final, executa shell-ul care ruleaza cu identificatorii utilizator efectiv si real setati anterior.
Comanda mkdir este de asemenea un program de tip setuid . Asa cum s-a aratat in paragraful 5.8, doar un proces cu identificatorul utilizator efectiv al superutilizatorului poate crea un director. Pentru a permite utilizatorilor obisnuiti sa creeze directoare, comanda mkdir este un program de tip setuid care poseda drepturile superutilizatorului. Cand se executa comanda mkdir, procesul ruleaza cu drepturi de acces de superutilizator, creaza directorul si apoi schimba proprietarul si permisiunile de acces la director in acelea ale utilizatorului real.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1680
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved