**Princíp najnižšieho privilégia**, tiež známy ako **princíp minimálneho privilégia** alebo jednoducho **najnižšie privilégium**, je pojem využívaný v informačnej bezpečnosti, počítačovej vede a iných odvetviach. Je to princíp, ktorý vyžaduje, aby v príslušnej abstraktnej vrstve počítačového prostredia, každý modul (ako napríklad proces, používateľ alebo program podľa toho, o ktorú vrstvu ide) bol schopný pristupovať len k informáciám a prostriedkom, ktoré sú nevyhnutné pre dosiahnutie jeho opodstatneného zámeru.

Používané sú tiež pojmy **prístup najnižšieho používateľa** (LUA) alebo **najmenej privilegovaný používateľský účet**, vzťahujúce sa ku konceptu, v ktorom všetci používatelia v ľubovoľnom čase pracujú s čo najmenším možným počtom privilégií a taktiež spúšťajú aplikácie s najmenšími možnými privilégiami.

Použitie
--------

Princíp najnižšieho privilégia je široko uznávaný ako podstatný prvok vo zvyšovaní ochrany dát a funkčnosti pred chybami (tolerancia chýb) a škodlivého správania (počítačová bezpečnosť). 

Princíp najnižšieho privilégia je tiež známy ako '*princíp najnižšej autority* (*Principle of least authority* - POLA). 

Jadro (kernel) zvyčajne pracuje s maximálnymi privilégiami, pretože je jadrom operačného systému a má prístup k hardvéru. Jednou zo základných povinností operačného systému, obzvlášť multiužívateľských operačných systémov, je správa a riadenie dostupnosti hardvéru a požiadaviek na prístup k nemu od bežiacich procesov. Keď jadro havaruje, mechanizmy, ktorými je udržiavaný stav, tiež zlyhajú. I keď pre CPU existuje možnosť obnovenia bez potreby tvrdého resetu, kód, ktorý pokračuje vo vykonávaní, nie je vždy taký, aký by mal byť. Bezpečnosť zostáva byť presadzovaná, ale operačný systém nedokáže vhodne správne reagovať na zlyhanie, pretože detekcia zlyhania nie je možná. Dôvodom je, že vykonávanie jadra sa buď zastavilo, alebo počítadlo programu pokračovalo vo vykonávaní programu v nekonečnom a zvyčajne nefunkčnom cykle.

Ak po havárii vykonávanie pokračuje načítaním a spustením kódu trójskeho koňa, autor škodlivého kódu sa môže zmocniť riadenia všetkých procesov. Princíp najnižšieho privilégia núti kód bežať s najnižším možným stupňom privilégií/práv, takže v prípade tejto situácie — alebo situácie, keď vykonávanie pokračuje z neočakávanej lokality — to, čo pokračuje vo vykonávaní, nemá možnosť vykonať škodu. Jedna z metód používaných na dosiahnutie tohto efektu môže byť implementovaná v hardvéri mikroprocesoru. V architektúre x86 výrobca navrhol štyri (ring 0 - ring 3) „módy". (Tento výraz môže byť mätúci, pretože termín "mód" je v niektorých druhoch operačných systémov uvádzaný do súvislosti s množinou bitov spájajúcou sa s daným prostriedkom).

Termín „najnižšie privilégium"„" býva často nepochopený a občas nesprávne zamieňaný s konceptom TCSEC zmenšenia dôveryhodnej výpočtovej bázy (TCB). Zmenšenie je ďaleko prísnejšou požiadavkou, ktorá je použiteľná iba pre funkčne silnejšie zaisťovacie triedy, konkrétne B3 a A1 

Najnižšie privilégium býva často spájané s metódou zvanou privilege bracketing, čo je prijatie nevyhnutných privilégií v najneskoršom možnom momente a ich prepustenie okamžite po tom, ako už nie sú absolútne nevyhnutné, čo pomáha vyhnúť sa dopadom vyplývajúcim z chybného kódu, ktorý neúmyselne využíva väčšie privilégiá, ako si zaslúži. Najnižšie privilégium býva tiež interpretované v súvislosti s distribúciou DAC práv. Príkladom je uplatnenie toho, že odovzdanie prístupu na čítanie a zapisovanie do súboru F používateľovi P porušuje princíp najnižšieho privilégia, ak P stačí na dokončenie svojej úlohy iba právo na čítanie súboru F. 

V niektorých operačných systémoch je možné sa stretnúť s implementáciou, v ktorej sa procesy vykonávajú s množinou potenciálnych privilégií a množinou aktívnych privilégií. Samotné množiny privilégií sú dedené od rodičov, o čom je rozhodnuté sémantikou *fork()*. Spustiteľný súbor, ktorý vykonáva privilegovanú funkciu, môže byť označený množinou privilégií, logickým rozšírením pojmov set user ID a set group ID. Dedenie súborových privilégií procesom je určené sémantikou skupiny systémových volaní *exec()*. Presný spôsob, ktorým potenciálne privilégiá procesov, aktuálne privilégiá procesov a súborové privilégiá vzájomne interagujú, môže byť zložitý. Prakticky, princíp najnižšieho privilégia je vykonávaný prinútením procesu bežať iba s privilégiami vyžadovanými vykonávanou úlohou. Dodržiavanie tohto modelu je pomerne zložité a tiež náchylné k chybám.

Najstarším historickým prípadom najnižšieho privilégia je pravdepodobne zdrojový kód *login.c*, ktorý začína vykonávanie s právami superužívateľa (root) a vo chvíli, keď už nie sú viac nevyhnutné, odoberá ich pomocou *setuid()* s nenulovým argumentom.

Výhody
------

* Lepšia stabilita systému. Keď je kód limitovaný v možnostiach zmien, ktoré môže vykonať v systéme, je jednoduchšie testovať jeho možné akcie a interakcie s ostatnými aplikáciami. Napríklad, aplikácie bežiace s obmedzenými právami nebudú mať možnosť vykonávať operácie, ktoré by mohli viesť k zrúteniu systému, alebo nepriaznivo ovplyvňovať ostatné aplikácie spustené v rovnakom systéme.

* Vyššia bezpečnosť systému. Keď je kód obmedzovaný v celosystémových akciách, ktoré môže vykonávať, zraniteľnosť jednej aplikácie nemôže byť zneužitá na ovládnutie zvyšku systému. Napríklad, Microsoft tvrdí "Práca v štandardnom používateľskom režime poskytuje zákazníkom zvýšenú ochranu voči neúmyselnému poškodeniu na úrovni systému, spôsobenému "shatter útokmi" a malwarom, tak isto ako root kitmi, spywarom a nedetekovateľnými vírusmi".

* Zjednodušenie nasadenia aplikácií (deployment). Vo všeobecnosti, čím nižšie privilégiá aplikácia požaduje, tým jednoduchšie je nasadenie vo väčšom prostredí. Toto je obvykle dôsledkom prvých dvoch výhod, aplikácie, ktoré inštalujú ovládače zariadení alebo vyžadujú zvýšené bezpečnostné privilégiá, majú obvykle vo svojom nasadení zahrnuté dodatočné kroky, napríklad vo Windowse riešenie bez ovládačov zariadení môže byť spustené bez akejkoľvek inštalácie, kým ovládače zariadení musia byť inštalované samostatne s použitím Windows inštalačnej služby za účelom udelenia zvýšených privilégií ovládaču.

Obmedzenia
----------

Podľa Jamesa Whittakera nie je v praxi skutočné najnižšie privilégium definovateľné a taktiež nie je možné ho dosiahnuť. Neexistuje žiadny spôsob, ako vyhodnotiť najnižší počet privilégií, ktoré bude kedy proces potrebovať na vykonanie svojich funkcií. Je totiž nemožné poznať všetky hodnoty premenných, ktoré spracuje, všetky adresy, ktoré bude potrebovať, presný čas vykonávania atď. Najlepším praktickým riešením je obmedzenie privilégií, aby sa eliminovali tie, u ktorých predpokladáme, že nebudú nikdy potrebné. Toto riešenie sa ukazuje byť dosť odlišné od minimálnej množiny privilégií. Takéto obmedzenie podstatne znižuje efektivitu prevedenia najnižšieho privilégia. 

Podľa Matta Bishopa je ďalším obmedzením nespojitosť kontroly, ktorú má operačné prostredie (bezpečný operačný systém) nad privilégiami pre jednotlivé procesy. V reálnej praxi je takmer nemožné riadiť prístup procesu k pamäti, čas behu procesu, adresy vstupných a výstupných zariadení alebo módy s presnosťou potrebnou na elimináciu presnej množiny privilégií, ktoré proces naisto nebude potrebovať. To ešte viac redukuje použiteľnosť tohto princípu.

História
--------

**Pôvodná formulácia** pochádza od Saltzera a Schroedera: 

*Každý program a každý užívateľ systému by mal pracovať s použitím najmenšej množiny privilégií potrebných na dokončenie práce.* (*Ochrana informácií v počítačových systémoch*, 1974)
Peter J. Denning sa tomu vo svojom článku "Operačné systémy tolerantné voči chybám" venoval v širšej perspektíve pri opísaní 4 základných princípov tolerancie voči chybám.

Dynamické priraďovanie privilégií bolo neskoršie prejednané Rogerom Needhamom v roku 1972

Pozri aj
--------

* Počítačová bezpečnosť

Referencie
----------

1. ↑  Saltzer 75
2. ↑  Denning 76
3. ↑  James Whittaker, *Why secure applications are difficult to write*, IEEE Security & Privacy, vol. 1, issue 2, pp. 81-83
4. ↑  Matt Bishop, *Computer Security: Art and Science* Archivované 2007-10-20 na Wayback Machine, Boston, MA: Addison-Wesley, 2003. pp. 343-344 cited Barnum & Gegick 2005
5. ↑  Roger Needham, *[Protection systems and protection implementations]*, Proc. 1972 Fall Joint Computer Conference, AFIPS Conf. Proc. vol. 41, pt. 1, pp. 571-578
6. ↑  Schroeder Least Privilege and More

* Ben Mankin, *The Formalisation of Protection Systems*, Ph. D thesis, University of Bath, 2004
* P. J. Denning. Fault tolerant operating systems. *ACM Computing Surveys*, December 1976, s. 359–389. Dostupné online. DOI: 10.1145/356678.356680. ISSN 0360-0300.
* Jerry H. Saltzer, Mike D. Schroeder. The protection of information in computer systems. *Proceedings of the IEEE*, September 1975, s. 1278–1308. Dostupné online. DOI: 10.1109/PROC.1975.9939.
* DEITEL, Harvey M.. *An introduction to operating systems*. revisited first. vyd. [s.l.] : Addison-Wesley. Dostupné online. ISBN 0-201-14502-2. S. 673.  page 31.

Externé odkazy
--------------

* The Saltzer and Schroeder paper cited in the references.
* NSA (the one that implemented SELinux) talks about the principle of least privilege
* A discussion of the implementation of the principle of least privilege in Solaris
* "Proof that LUA makes you safer" by Dana Epp Archivované 2010-05-23 na Wayback Machine
* Applying the Principle of Least Privilege to User Accounts on Windows XP, by Microsoft
* Privilege Bracketing in the Solaris 10 Operating System, Sun Microsystems[nefunkčný odkaz]

Zdroj
-----

* *Tento článok je čiastočný alebo úplný preklad článku Principle\_of\_minimum\_privilege na anglickej Wikipédii (číslo revízie nebolo určené).*