Ako umožniť bežnému užívateľovi spustiť niečo ako admin

Ak ste niekedy potrebovali umožniť užívateľovi spustiť nejakú aplikáciu ako administrátor, typicky napríklad nejaký .exe na aktualizáciu software, ktorý vyžaduje admin práva alebo nejakú legacy aplikáciu, ktorú prosto inak nespustíte.
Presne to, som potreboval ja, potreboval som umožniť bežnému userovi spustiť .cmd na registráciu DLL súborov a prekopírovať pár súborov do C:\Windows. Pravda existuje kopa platených riešení ako napríklad CyberArk, ktoré umožňujú oveľa viac vecí ale tento malý „hack“ je zdarma a funkčný.

Tak som začal pátrať.. Napadla mi idea „Čo tak vytvoriť task, ktorý sa bude spúšťať pod NT AUTHORITY\SYSTEM, nastaviť mu Allow run on demand, ten deploynuť cez GPO a nasledne si ho dokážem následne spustiť z CMD

well yes, but actually no... áno je to riešenie avšak commandom

SCHTASKS.EXE /RUN /TN "task name"

task spustíte iba ak máte administrátora. Dôvodom je to, že pokiaľ chceme aby task bežal s admin právami potrebujeme zakliknúť Run with highest privileges. Pokiaľ však user nemá tieto práva, spustenie tasku skončí Access denied 😕.

 

Hm čo teraz do rici,“ povedal som si. No nič, s týmto skrátka neurobíme nič, nedá sa s tým nijako vybabrať, jednoducho ten task pomocou schtasks /run nespustíme.

Nasledoval research - ako to obísť ... ako to vymyslieť a čo s tým urobiť aby som to mohol spustiť.

A jedno riešenie predsalen existuje!

Ako na to

Tasky vedia byť spúštané aj na základe eventu v Event Logu

Čo tak si vytvoriť event pomocou commandu, na základe ktorého sa task spusti?“ Áno, ale...

Pri tvorení eventu sa dostávame znova na problém práv bežného užívateľa – do systémových Event logov (Application,Security,System,...) nemôže bežný user zapisovať. Vytvoriť si však vieme vlastný Event log do ktorého už vieme zapisovať aj ako bežný user.

V GPO si teda vytvoríme Immediate task v scope Computer kde si vyberieme usera NT AUTHORITY\System, Run with highest privileges a do Actions nastavíme Start a program:

powershell.exe "& New-EventLog -LogName MojEventLog -Source MojEventLog"

V Conditions NEZABUDNITE odškrknúť Start the task only if the computer is on AC power, inak by sa task nespustil na baterke.
 

Po gpupdate sa nám log vyrobí a do toho už zapisovať možeme.

Najskôr si ale nastavme samotný task, ktorý takisto deployneme cez GPO tentokrát ako Scheduled task v scope Computer kde si znovu vyberieme usera NT AUTHORITY\System, Run with highest privileges. V karte Triggers pridáme nový On an event, vyberieme náš MojEventLog ako Log aj Source a napíšeme na aký EventID (1-999) sa tento task bude spúštať:

 .. V Conditions NEZABUDNITE odškrknúť Start the task only if the computer is on AC power, inak by sa task nespustil na baterke a do Actions si už nastavíme Start a program... a tam.. čo len chceme 😊

Nodóbre, a teraz to poďme spustiť!

EVENTCREATE /T INFORMATION /ID 999 /L MojEventLog /D "Nejaky text do eventu" >nul 2>&1

Pomocou tohto commandu vytvoríme Event a ten si prevezme task, ktorý sa spustí. Ja som si pre skúšku nastavil do tasku

cmd /c "echo Test > C:\Windows\Test.txt“

Funguje! Vytvoril som event, spustil sa task!

Tento command a teda task si následne vieme spustiť z iného (.cmd,bat,exe hocičo) alebo na to urobiť priamo shortcut a deploynuť to uživateľovi na plochu.