ID-uri de cont în Windows 2000

Ultima revizuire: 31.07.07

ID-uri de cont în Windows 2000 / XP / 2003 / VISTA

După cum este descris în Platform SDK, un SID este o structură de date cu lungime variabilă care identifică un utilizator, un grup sau un cont de computer. Fiecărui cont i se atribuie un identificator unic, SID, la momentul creării contului. Sistemul funcționează cu SID-uri de cont, nu cu nume de cont.

Listele de control al accesului discreționar (DACL) stochează SID-urile conturilor (utilizatori și grupuri) și drepturile de acces atribuite acelor conturi pentru a oferi controlul accesului la obiectele securizate. La deschiderea unui obiect, programul utilizator solicită drepturile de acces necesare la obiect, iar subsistemul de control al accesului OS compară datele din DACL cu drepturile solicitate și cu SID-ul utilizatorului în numele căruia se execută programul (utilizatorul apartenența la grupuri ale căror SID-uri sunt, de asemenea, atașate contextului de securitate al programului). Pentru controlul accesului, sistemul de operare nu necesită nume de cont - conturile sunt identificate prin SID-uri.

Unicitatea unui SID este asigurată de formarea sa din două domenii:AUTHORITYșiSUBAUTHORITY. Primul câmp are lungime fixă ​​și definește clasa contului, al doilea câmp are lungime variabilă și identifică contul în cadrul clasei. Câmpul SUBAUTHORITY poate fi de lungime zero, caz în care SID-ul identifică clasa de cont.

În Platform SDK, structura SID este definită după cum urmează:Revision- Revizuire SID. Acest câmp trebuie să fie egal cu constantaSDK SID_REVISION(1).SubAuthorityCount- numărul de cuvinte (DWORD) din câmpulSubAuthority.IdentifierAuthority-câmpul AUTORITATE.SubAuthority- câmp SUBATHORITY.

Conform descrierii structurii SID, AUTHORITY este reprezentată ca o structurăSID_IDENTIFIER_AUTHORITYdefinită în Platform SDK după cum urmează: Astfel, AUTHORITY este reprezentată ca o secvență de 6 octeți. Platforma SDK definește constante pentru a inițializa valoarea SID AUTHORITY la construirea sau analizarea unui SID: În plus, există un altul care nu este documentat în Platform SDK AUTHORITY: Aceste constante pot fi utilizate, de exemplu, la inițializarea unei instanțe de struct declarate. :

SUBAUTHORITY este un câmp de lungime variabilă format din cuvinte (DWORD), al căror număr este stocat în structura SID. Declararea unui câmp într-o structură ca: vă permite să accesați orice DWORD în SubAuthority fără a recurge la turnarea pointerului. Dar, în același timp, dimensiunea structurii SID fără SUBAUTORITY trebuie calculată ca un DWORD din câmpul SUBAUTHORITY este declarat în structură.

Sa observat mai devreme că lungimea minimă a SUBAUTHORITY este 0 cuvinte. Lungimea maximă este determinată de constanta Platform SDKSID_MAX_SUB_AUTHORITIES(15).

Dimensiunea maximă (în octeți) necesară pentru stocarea unui SID poate fi calculată după cum urmează: Dacă numărul de cuvinte din SUBAUTHORITY este cunoscut, atunci dimensiunea SID poate fi calculată după cum urmează:

Pentru a afișa date binare ale SID-urilor, acestea pot fi reprezentate ca un șir de următorul format: unde: S - identificatorul constant al reprezentării șirului SID; R -SID_REVISION(1); I - valoarea SID AUTORITY; s - valorile cuvântului din câmpul SUBAUTORITY. În reprezentarea cu șir, fiecare s corespunde unui DWORD din SUBATHORITY

SID-ul grupului Administratori pentru computerul local ca șir arată astfel:S-1-5-32-544În această intrare: 1 -SID_REVISION; 5 - valoarea AUTHORITY (corespunde cuSECURITY_NT_AUTHORITY); 32 - valoarea primului cuvânt SUBAUTORITY; 544 - valoarea celui de-al doilea cuvânt SUBAUTORITY. Numărul de cuvinte din SUBAUTHORITY este 2.

SID-ul contului „Toată lumea” ca șir este:S-1-1-0În această intrare: 1 -SID_REVISION; 1 - valoarea AUTHORITY (corespunzătoare cuSECURITY_WORLD_SID_AUTHORITY); 0 - valoarea primului cuvânt SUBAUTHORITY. Numărul de cuvinte din SUBAUTORITY este 1.

SID-ul contului „NT Pseudo Domain” ca șir este:S-1-5În această intrare: 1 -SID_REVISION; 5 - valoarea AUTHORITY (corespunde cuSECURITY_NT_AUTHORITY); Numărul de cuvinte din SUBAUTHORITY este 0.

SID-ul unui utilizator de computer local ca șir poate arăta astfel:S-1-5-21-789336058-484763869-725345543-1003În această intrare: 1 -SID_REVISION; 5 - valoarea AUTHORITY (corespunde cuSECURITY_NT_AUTHORITY); 21 - valoarea primului cuvânt SUBAUTORITATE; 789336058 - valoarea celui de-al doilea cuvânt SUBAUTORITY; 484763869 - sensul celui de-al treilea cuvânt SUBAUTORITATE; 725345543 - sensul celui de-al patrulea cuvânt SUBAUTORITATE; 1003 - valoarea celui de-al cincilea cuvânt SUBAUTORITY. Numărul de cuvinte din SUBAUTHORITY este 5.

Sistemul are un SID special pentru a indica ID-ul sesiunii (SID de conectare). Acest SID poate fi utilizat în listele de control al accesului pentru a controla accesul la obiecte de către utilizatorii care lucrează în prezent în mod interactiv pe sistem. ID-ul sesiunii SID există până când utilizatorul se deconectează. Fiecare conectare nouă generează unSID de conectarediferit. Permisiuni pentruLogon SIDsunt setate la stația de fereastră WinSta0, care afișează ferestre ale programelor utilizatorului în timpul sesiunii sale în sistem. Când rulați un program grafic ca alt utilizator, trebuie să adăugați permisiuni la stația fereastră pentruLogon SIDal utilizatorului respectiv, pentru ca ferestrele programului să fie afișate. Aceste acțiuni sunt efectuate atunci când un proces este pornit ca alt utilizator de către funcțiaCreateProcessAsUser.

Cunoașterea structurii SID-ului vă permite să identificați o listă de conturi Windows încorporate. Pentru a obține lista, completați câmpurile structurii SID într-o buclă și încercați să obțineți numele contului pentru care a fost completat SID-ul (folosindLookupAccountName, care returnează numele contului după SID) . Lista conturilor încorporate obținute în acest fel în diferite Windows este dată în tabel.

Conturi Windows încorporate

Pentru a gestiona SID-ul, programatorii Microsoft au oferit mai multe funcții (vezi tabelul).

Funcții pentru gestionarea SID-urilor

La scrierea acestui articol, au fost observate unele particularități în activitatea funcțiilor de gestionare a SID. De exemplu, funcția IsValidSid verifică nu complet câmpulRevision, ci doar cei patru octeți mai mici și ia în considerare SID-urile cu valori setate în câmpulRevision, cum ar fi 0x41, 0xF1 etc. să fie valide. d. În acest caz, funcțiaConvertSidToStringSidconvertește doar SID-urile cuRevision„corectă” egală cu 0x01 într-un șir. FuncțiaConvertSidToStringSidînscrie incorect SID-uri care conțin valori diferite de zero în primii doi octeți AUTHORITY. De exemplu, pentru două SID-uri cu SUBAUTHORITY goală și AUTHORITY egală pentru primul SID, pentru al doilea SID, șirul returnat de funcție va fi același:„S-1-10”.AddAccessAllowedAcevă permite să adăugați o intrare cu un SID nevalid la DACL (câmpulRevisiondin SID este nevalid, de exemplu, 0x41). Dar nu este posibil să setați un DESCRIPTOR DE SECURITATE cu un astfel de DACL pe un obiect (funcția de setare a permisiunilor returnează o eroare care indică formatul de date greșit). Cu toate acestea,AddAccessAllowedAceîmpiedică crearea de intrări de control al accesului cu SID-uri dacă cei 4 biți mai puțin semnificativi sunt incorecți înRevision(de exemplu,Revisioneste 0x0F).