Cunoștințe, prelegere, autentificare și drepturi de acces în unix

Numele de utilizator complet a fost redus la GECOS deoarece, de-a lungul timpului, cineva de la dezvoltatorii UNIX a folosit un server de imprimare care rulează General Electric Comprehensive Operating System. Într-un singur câmp. conținutul cărora nu este utilizat de UNIX. A trebuit să stochez o parolă pentru trimiterea de documente pentru imprimare. Informațiile din / etc / passwd sunt neclasificate, acest fișier poate fi citit de orice utilizator.

Se pune întrebarea: unde este stocată parola de sistem a utilizatorului? Răspunsul este: nicăieri. UNIX nu stochează parole în text clar sau în formă criptată. În loc de parolă, este stocată o cheie (hash) - o secvență de caractere obținută din parolă prin criptare nerecuperabilă. Pentru o lungă perioadă de timp, această cheie a fost stocată în al doilea câmp / etc / passwd. Fiecare parolă corespunde în mod unic cheii. și pentru a verifica dacă utilizatorul a introdus-o corect, este suficient să faceți a doua cheie din tasta introdusă și să o comparați cu câmpul corespunzător din / etc / passwd. Calculați parola. având o singură cheie. este imposibil; tot ce rămâne pentru presupusul atacator este să încercați să îl ridicați (să vină cu opțiunile de parolă și să compare cheile).

Într-un mod bun, este cheia pentru oricine, cu excepția sistemului în sine, să știe și nu are nevoie. În plus, dacă aveți cunoștințe despre structura parolei (ziua de naștere, conținutul GECOS, numele preferat al pisicilor etc.), poate fi foarte ușor să îl ridicați. Puteți utiliza un computer foarte puternic (de exemplu, un cluster de calcul) și pur și simplu ridicați această parolă "pe frunte". Pentru a exclude posibilitatea de selecție în principiu, în versiunile moderne ale FreeBSD și Linux, cheia din fișierul / etc / passwd a fost ștearsă în fișier. Inaccesibil pentru oricine altcineva decât rădăcina. Este, de asemenea, obișnuit să se noteze extensiile pasului standard. cum ar fi expirarea parolei și a clasei de cont sau utilizator. Pe sistemele de soclu BSD, acest fișier este numit /etc/master.passwd, conține toate informațiile despre utilizator. Multe alte sisteme utilizează o schemă cu / etc / shadow. care conține doar informații suplimentare.

Superuserul. Înlocuirea identificatorului

Utilizatorul root (denumit și "superuser") are zero UID-uri și GID-uri și acționează ca un subiect UNIX de încredere. Aceasta înseamnă că nu respectă legile care guvernează drepturile de acces. și poate, la discreția sa, să modifice aceste drepturi. Majoritatea setărilor sistemului pot fi scriute numai de către superuser (chiar dacă fișierul are drepturi de acces 0444, root-ul poate încă să scrie). În general, rădăcina este o persoană teribilă! Se poate șterge toate fișierele, indiferent dacă vă place sau nu. Se poate edita / etc / passwd și, în general, poate toate. Ca regulă, numai administratorul de sistem cunoaște parola de root. În acord cu O. el este responsabil pentru tot ceea ce se întâmplă în sistem - deoarece el este capabil să schimbe toate acestea. Este un utilizator super care deține fișierul / etc / group. care determină ce alte grupuri. în plus față de cele menționate în / etc / passwd. include utilizatorii sistemului.

Cu ID-urile de utilizatori și de grup zero, este inițiată logarea. acest lucru îi permite să "devină oricare utilizator" mai târziu, schimbându-și propriile UID și GID. Multe alte acțiuni de sistem necesită, de asemenea, privilegii de root. dar prin bunul simț poate fi de încredere unui utilizator obișnuit (nu super). De exemplu, pentru a gestiona coada trimite e-mailuri și să trimită aceste scrisori la destinație poate fi un proces care nu are privilegii de root. Cu toate acestea, are nevoie de acces complet la coada de corespondență. Pe de altă parte, este bine că nici un utilizator sistem real, - o persoană care nu a putut trage cu ochiul chiar și în acest loc. Deci, există pseudo-utilizatori - conturi. la care nici o parolă nu este potrivită. câmp SHELL la pseudo-utilizatorul este de multe ori egal cu / sbin / nologin (probleme Acest cont nu este în prezent disponibilă imediat și completat de program), iar HOME teren - / inexistenta (directorul care sunt deja acolo). Dar sistemul, care rulează procesul "în numele" unui astfel de pseudo-utilizator. Sunt sigur că nimic nu sedițioase în afara jurisdicției sale, acest proces nu comite nici din greșeală.

Utilizatorul își poate schimba propria parolă (uneori SHELL și GECOS) cu comanda passwd. Această acțiune simplă și destul de obișnuită, luând în considerare tot ceea ce sa spus mai sus, este imposibilă. De fapt: procesul inițiat de utilizator va avea UID-ul său, iar fișierul passwd este deținut de root. și numai procesele cu zero UID sunt disponibile pentru scriere. Deci, avem nevoie de un mecanism pentru înlocuirea unui identificator. Acesta permite utilizatorilor obișnuiți să execute procese "în numele" altora, în special ca root.

Pentru a face acest lucru, sistemul de fișiere are încă două atribute - setuid și setgid. Când executați un fișier care are atributul setuid. sistemul creează un proces al cărui UID este egal cu UID-ul acelui fișier. mai degrabă decât UID-ul procesului părinte. Acesta este programul Passwd. Făcând-o, utilizatorul primește rădăcină. dar acțiunile sale sunt limitate de capacitățile acestui program.

După cum se poate observa, ls afișează s setuid ca în locul utilizatorului x-biți (bit x- nu a dispărut, pur și simplu, fără a setuid încă nu are nici un sens). În mod similar, lucrările setgid. moștenind codul GID al procesului din fișierul executabil. Changeling GID este necesară în acele cazuri în care este necesar să se deschidă și accesul la dosar, și de a salva identitatea reală a utilizatorului - de exemplu, pentru a înregistra înregistrările în necinstiți joc. Apropo, este inutil să puneți scripturi setuid sau setgid. deoarece procesul va porni de la fișierul care conține interpretul. iar fișierul script va fi doar o opțiune de linie de comandă.

Chiar dacă passwd (sau o altă utilitate, angajate în autentificare) nu poate face nimic pentru a provoca dincolo de prescris, trebuie cel puțin să citiți fișierul cu cheile toate parolele (umbră sau master.passwd). Dacă obțineți într-un fel accesul la memoria acestui proces, puteți ajunge la cheile altor persoane. Dar, de fapt, utilizatorul care își schimba parola. Ai nevoie doar de o linie cu propriul cont. Pentru a evita acest lucru - ipotetic - sistem de risc, care se aplică o bază de calcul de încredere (de exemplu, ALT Linux), pentru fiecare utilizator păstrate separat fișier / etc / TCB / utilizator / umbră.

Trebuie remarcat faptul că UNIX nu poate implementa cu strictețe regulile unui model de securitate simplu (NoRU / NoWD - confidențialitate sau NoWU / NoRD - fiabilitate). Și nu este nici măcar un subiect de încredere - rădăcină. dar că regulile precum "No Something Down" contravin O. În conformitate cu O și schema responsabilității domeniului. este proprietarul fișierului care determină deschiderea accesului la acesta. care este echivalentă cu fluxul WD.

Articole similare