Távoli futtatási környezet futtatása speciális fiók nevében

A távoli futtatás során alaphelyzetben minden távoli parancs a futtató személy nevében és jogkörében fut. Láthattuk korábban, hogy lehetőségünk van szűkített környezet kialakítására is, ahol például csak a Get kezdetű parancsokat engedjük és ezen kívül készítünk a Restart-Service-hez egy olyan burkoló függvényt, amiben csak bizonyos, nem kritikus szolgáltatások újraindítását tesszük lehetővé. Viszont ehhez egy „sima” felhasználónak nem lesz joga, így jön az ötlet, hogy kombináljuk a szűkítést azzal, hogy viszont azt a szűkített parancskészlet rendszergazdaként futtassuk „futtatás más nevében” jelleggel.

Erre a PowerShell 3.0-tól kezdődően van lehetőség, itt a távoli futtatási környezetet beállíthatjuk, hogy valamilyen adott szolgáltatási fiók nevében fusson, ne a hozzá csatlakozó felhasználó nevében. Így ha ez a szolgáltatási fiók rendszergazda jogosultságokkal bír, akkor a felhasználó ezeket birtokolni fogja ebben a távoli környezetben, így magának a felhasználónak nem is kell rendszergazda jogokat biztosítani.

Most a környezet szűkítését nem mutatom újra, csak a más nevében történő futtatás beállítását, aminek a kulcsa a -RunAsCredential paraméter megadása a Register-PSSessionConfiguration cmdletnél:

PS C:\> Register-PSSessionConfiguration -Name RunAsServiceAccount -RunAsCredent

ial mydomain\servacct -ShowSecurityDescriptorUI -Confirm:$false

WARNING: When RunAs is enabled in a Windows PowerShell session configuration,

the Windows security model cannot enforce a security boundary between

different user sessions that are created by using this endpoint. Verify that

the Windows PowerShell runspace configuration is restricted to only the

necessary set of cmdlets and capabilities.

WARNING: Register-PSSessionConfiguration may need to restart the WinRM service

 if a configuration using this name has recently been unregistered, certain

system data structures may still be cached. In that case, a restart of WinRM

may be required.

All WinRM sessions connected to Windows PowerShell session configurations,

such as Microsoft.PowerShell and session configurations that are created with

the Register-PSSessionConfiguration cmdlet, are disconnected.

 

 

   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin

 

Type            Keys                                Name

----            ----                                ----

Container       {Name=RunAsServiceAccount}          RunAsServiceAccount

A parancs végrehajtása során, mivel itt nem „teljes” hitelesítési információkkal szolgáltam, hanem csak a felhasználói névvel, így a jelszót egy grafikus ablakban bekéri a PowerShell, valamint a ‑ShowSecurityDescriptor kapcsoló hatására a jogosultságokat is egy grafikus ablakban tudom megadni, a Domain Users-nek biztosítottam Execute jogokat.

Nézzük, hogyan lehet ehhez csatlakozni egy „sima” felhasználó nevében és hogy mit tapasztal az:

PS C:\> $s = New-PSSession -ComputerName dc2016 -ConfigurationName RunAsService

Account

PS C:\> Enter-PSSession -Session $s

[dc2016]: PS C:\Users\servacct\Documents> cd c:\

[dc2016]: PS C:\> whoami

mydomain\servacct

Látható, hogy annak ellenére, hogy ST fiók nevében vagyok bejelentkezve, amikor a távoli környezethez csatlakozva kérdezem le magamat, akkor a mydomain\servacct a válasz. Ezzel az a baj, hogy ha naplózni szeretnénk a felhasználók tevékenységét, akkor akárki is csatlakozik ehhez a távoli futtatási környezethez, mindenki mydomain\servacct felhasználónak látszik, ami a beazonosítást lehetetlenné teszi.

Szerencsére van egy kis segítségünk. Ilyen távoli munkamenetekben egy $PSSenderInfo automatikus változó is létrejön:

[dc2016]: PS C:\> $PSSenderInfo

 

 

UserInfo             : System.Management.Automation.Remoting.PSPrincipal

ClientTimeZone       : System.CurrentSystemTimeZone

ConnectionString     : http://dc2016:5985/wsman?PSVersion=5.0.10514.0

ApplicationArguments : {PSVersionTable}

ConnectedUser        : MYDOMAIN\st

RunAsUser            : MYDOMAIN\servacct

Ebben pedig a ConnectedUser tulajdonságban ott az eredeti felhasználó! A teljes megoldás a következő tehát:

Szűkítsük le a távoli futtatási környezet parancskészletét burkolófüggvényekre

Olyan burkolófüggvényeket engedélyezzünk csak, aminek első tevékenysége a ConnectedUser eseménynaplóba történő bejegyzése az aktuális parancs meghívott szintaxisával

A függvény folytassa az „igazi” tevékenységgel

Ennek a teljes végigvitele túlnő a könyv kitűzött céljain, de ha valakit részletesebben érdekel a teljes technológia, a „Just Enough Administration” koncepcióra kidolgozott JEA DSC konfigurációval valami hasonlót old meg a Microsoft és a PowerShell közösség. (DSC-ről, azaz a Desired State Configuration-ről a 3.3 Desired State Configuration fejezetben lesz szó.) A könyv írásának időpontjában még a fent említett auditálási képesség még nincs benne a JEA csomagban, de viszonylag kevés változtatással betehető.



Word To HTML Converter