Identificator utilizator - User identifier

Sistemele de operare asemănătoare Unix identifică un utilizator printr-o valoare numită identificator de utilizator , adesea abreviată cu ID de utilizator sau UID . UID, împreună cu identificatorul de grup (GID) și alte criterii de control al accesului, este utilizat pentru a determina la ce resurse de sistem poate accesa un utilizator. Fișierul de parolă mapează numele de utilizator textuale la UID-uri. UID sunt stocate în Inodes de Unix sistemul de fișiere , care rulează procese , gudron arhive, și acum caduce Network Information Service . În mediile compatibile cu POSIX , comanda din linia de comandă idoferă UID-ul utilizatorului curent, precum și mai multe informații, cum ar fi numele de utilizator, grupul principal de utilizatori și identificatorul de grup (GID).

Atribute de proces

Standardul POSIX a introdus trei câmpuri UID diferite în tabelul descriptor de proces, pentru a permite proceselor privilegiate să preia diferite roluri dinamic:

ID de utilizator eficient

UID-ul eficient ( euid) al unui proces este utilizat pentru majoritatea verificărilor de acces. De asemenea, este folosit ca proprietar pentru fișierele create de acel proces. GID-ul eficient ( egid) al unui proces afectează, de asemenea, controlul accesului și poate afecta, de asemenea, crearea fișierelor, în funcție de semantica implementării kernelului specific în uz și, eventual, de opțiunile de montare utilizate. Conform semanticii BSD Unix, proprietatea grupului acordată unui fișier nou creat este moștenită necondiționat de la proprietatea grupului din directorul în care este creat. Conform semanticii AT&T UNIX System V (adoptată și de variantele Linux), unui fișier nou creat i se acordă în mod normal proprietatea grupului specificată de egidprocesul care creează fișierul. Majoritatea sistemelor de fișiere implementează o metodă pentru a selecta dacă BSD sau semantica AT&T ar trebui folosită în ceea ce privește proprietatea de grup a unui fișier nou creat; Semantica BSD este selectată pentru directoare specifice atunci când este setată permisiunea S_ISGID (s-gid).

ID-ul utilizatorului sistemului de fișiere

Linux are, de asemenea, un ID de utilizator al sistemului de fișiere ( fsuid) care este utilizat în mod explicit pentru controlul accesului la sistemul de fișiere. Se potrivește cu euidexcepția cazului în care este stabilit în mod explicit altfel. Acesta poate fi ID - ul de utilizator root numai în cazul în care ruid, suidsau euideste rădăcină. Ori de câte ori euideste modificat, modificarea se propagă către fsuid.

Intenția fsuideste de a permite programelor (de exemplu, serverul NFS ) să se limiteze la drepturile sistemului de fișiere ale unor date, uidfără a acorda uidpermisiunea de a le trimite semnale. De la kernel 2.0, existența lui fsuidnu mai este necesară deoarece Linux respectă regulile SUSv3 pentru trimiterea de semnale, dar fsuidrămâne din motive de compatibilitate.

ID de utilizator salvat

ID-ul utilizatorului salvat ( suid) este utilizat atunci când un program care rulează cu privilegii ridicate trebuie să facă o muncă temporară; trecerea de euidla o valoare privilegiată (de obicei 0) la o valoare neprivilegiată (orice altceva decât valoarea privilegiată) determină stocarea valorii privilegiate suid. Mai târziu, un program euidpoate fi setat înapoi la valoarea stocată suid, astfel încât privilegiile ridicate să poată fi restaurate; un proces lipsit de privilegii poate stabili euiduna dintre cele trei valori: valoarea lui ruid, valoarea lui suidsau valoarea lui euid.

ID utilizator real

UID-ul real ( ruid) și GID-ul real ( rgid) identifică proprietarul real al procesului și afectează permisiunile pentru trimiterea semnalelor. Un proces fără privilegii de superutilizator poate semnaliza un alt proces numai dacă expeditorul ruidsau se euidpotrivește cu receptorul ruidsau suid. Deoarece un proces copil își moștenește acreditările de la părintele său, copilul și părintele se pot semnala reciproc.

Convenții

Tip

POSIX necesită ca UID să fie un tip întreg. Majoritatea sistemelor de operare de tip Unix reprezintă UID ca un întreg nesemnat. Mărimea valorilor UID variază între diferite sisteme; unele sisteme de operare UNIX au folosit valori pe 15 biți, permițând valori de până la 32767, în timp ce altele precum Linux (înainte de versiunea 2.4) au acceptat UID - uri pe 16 biți , făcând posibile 65536 ID-uri unice. Majoritatea sistemelor moderne de tip Unix (de exemplu, Solaris-2.0 în 1990, Linux 2.4 în 2001) au trecut la UID - uri pe 32 de biți , permițând 4.294.967.296 (2 32 ) ID-uri unice.

Intervalele rezervate

În Linux Standard Base precizează Core Specification că valorile UID în intervalul 0-99 ar trebui să fie alocate static de sistem, și nu vor fi create de aplicațiile, în timp ce UID de la 100-499 ar trebui să fie rezervată pentru alocarea dinamică de către administratorii de sistem și post - instalare scripturi.

Debian Linux nu numai că rezervă intervalul 100–999 pentru utilizatorii și grupurile alocate dinamic, ci și alocă central și static utilizatori și grupuri în intervalul 60000-64999 și rezervă în continuare intervalul 65000–65533.

Systemd definește o serie de game UID speciale, inclusiv

  • 60001-60513: UID-uri pentru directoare de start gestionate de sistem-homed
  • 61184-65519 (0xef00-0xffef): UID-uri pentru utilizatori dinamici

Pe FreeBSD, portarii care au nevoie de un UID pentru pachetul lor pot alege unul gratuit din intervalul 50 - 999 și apoi pot înregistra alocarea statică.

Unele sisteme POSIX alocă UID-uri pentru noii utilizatori începând de la 500 ( macOS , Red Hat Enterprise Linux până la versiunea 6), altele încep de la 1000 (Red Hat Enterprise Linux de la versiunea 7, openSUSE , Debian ). Pe multe sisteme Linux, aceste intervale sunt specificate în /etc/login.defs, pentru useraddși instrumente similare.

Alocările UID centrale în rețelele de întreprindere (de exemplu, prin intermediul serverelor LDAP și NFS ) se pot limita la utilizarea numai a numerelor UID mult peste 1000 și în afara intervalului 60000-65535, pentru a evita potențialele conflicte cu UID-urile alocate local pe computerele client.

Virtualizarea la nivel de sistem de operare poate remapa identificatorii de utilizator, de exemplu, folosind spații de nume Linux și, prin urmare, trebuie să aloce intervale în care sunt mapate UID-urile și GID-urile remapate:

  • snapd mapează UID-urile și GID-urile în intervalul 524288-589823 (0x80000-0x8ffff)
  • systemd-nspawn alocă automat gamele UID pentru fiecare container utilizează intervalul 524288-1879048191 (0x80000-0x6fffffff)

Autorii systemd recomandă ca sistemele de virtualizare la nivel de SO să aloce 65536 (2 16 ) UID-uri pe container și să le mapeze adăugând un multiplu întreg de 2 16 .

Valori speciale

  • 0: Superutilizatorul are în mod normal un UID zero (0).
  • -1: Valoarea (uid_t) -1este rezervată de POSIX pentru a identifica un argument omis.
  • 65535: Această valoare este încă evitată deoarece a fost valoarea de returnare a erorii API când uid_t avea 16 biți.
  • Nimeni: Din punct de vedere istoric, utilizatorului „ nimănui ” i s-a atribuit UID -2de mai multe sisteme de operare, deși sunt utilizate și alte valori precum 2 15 -1 = 32.767, cum ar fi OpenBSD . Pentru compatibilitate între UID 16 biți și 32 de biți, multe distribuții Linux acum setat pentru a fi 2 16 -2 = 65,534; kernel-ul Linux implicit returnează această valoare atunci când un UID pe 32 de biți nu se încadrează în valoarea returnată a apelurilor de sistem pe 16 biți. Fedora Linux nu atribuie ultimului UID al intervalului alocat static pentru utilizarea sistemului (0–99) nimănui: 99 și apelează în schimb 65534 nfsnobody.

Alternative

NFSv4 a fost destinat să ajute la evitarea coliziunilor numerice ale identificatorilor prin identificarea utilizatorilor (și a grupurilor) în pachetele de protocol folosind nume textuale „utilizator @ domeniu”, mai degrabă decât numere întregi. Cu toate acestea, atâta timp cât nucleele sistemului de operare și sistemele de fișiere locale continuă să utilizeze identificatori de utilizatori întregi, acest lucru vine în detrimentul etapelor de traducere suplimentare (folosind procese de daune idmap), care pot introduce puncte de eșec suplimentare dacă mecanismele de mapare UID locale sau bazele de date obțin configurat incorect, pierdut sau sincronizat. Partea „@domeniu” a numelui de utilizator ar putea fi utilizată pentru a indica care autoritate a alocat un anumit nume, de exemplu sub formă de

  • un nume de tărâm Kerberos
  • un nume de domeniu Active Directory
  • numele unui furnizor de sistem de operare (pentru alocări specifice distribuției)
  • numele unui computer (pentru alocări specifice dispozitivului)

Dar, în practică, multe implementări existente permit doar setarea domeniului NFSv4 la o valoare fixă, făcându-l astfel inutil.

Vezi si

Referințe