Szűkített környezet beállítása és detektálása

A távoli futtatási környezetek („játszóterek”) számos paraméterét be lehet állítani annak érdekében, hogy például túl sok, vagy néhány nagyon túlbuzgó helpdeskes nehogy túl nagy terhelést rakjon a tartományvezérlőnkre. Ezen lehetőségek feltérképezésére nézzünk bele az eddig még nem igazán feltérképezett WSMAN: meghajtónkra:

[1] PS C:\> cd wsman:

[2] PS WSMan:\> dir

 

 

   WSManConfig:

 

ComputerName                                  Type

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

localhost                                     Container

Itt nem sok minden van, menjünk még mélyebbre:

 

[3] PS WSMan:\> cd .\localhost

[4] PS WSMan:\localhost> dir | ft -AutoSize

 

 

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

 

Name                Value      Type

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

MaxEnvelopeSizekb   150        System.String

MaxTimeoutms        60000      System.String

MaxBatchItems       32000      System.String

MaxProviderRequests 4294967295 System.String

Client                         Container

Service                        Container

Shell                          Container

Listener                       Container

Plugin                         Container

ClientCertificate              Container

Itt már van néhány paraméterünk, de ezek un. „globális” paraméterei a WinRM szolgáltatásnak. Láthatók ebben a listában „könyvtárszerű” elemek, amelyekbe be lehet lépni, és ott újabb elemek találhatók majd. Nézzük ezeknek a fő könyvtáraknak a szerepét:

Könyvtár neve

Szerepe

Client

A távoli futtatás kliensoldali jellemzői. Ez a tartományvezérlőnkön ebben a helyzetben nem érdekes, hiszen az a mi szempontunkból most nem kliens.

Service

A WinRM szolgáltatás globális paraméterei, a „szerver” oldal.

Shell

Ez a távoli futtatási környezet, és annak jellemzői.

Listener

A kiszolgáló „figyelő” komponensének beállításai, pl. milyen porton és melyik IP címére érkező kéréseket fogadja.

Plugin

Itt vannak a „játszóterek”, azaz a különböző távoli futtatási környezetek. Vannak itt már alaphelyzetben létrehozottak, de ide jött létre az én „helpdesk” környezetem is.

ClientCertificate

Ha tanúsítványalapú hitelesítés van megkövetelve, akkor itt lehet tárolni a kliens által felmutatott tanúsítványokat.

Nézzünk bele elsőként a Plugin könyvtárba:

[36] PS WSMan:\localhost\Plugin> dir

 

 

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

 

Name                      Type                 Keys

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

Event Forwarding Plugin   Container            {Name=Event Forwarding Plugin}

HelpDesk                  Container            {Name=HelpDesk}

microsoft.powershell      Container            {Name=microsoft.powershell}

Microsoft.PowerShell32    Container            {Name=Microsoft.PowerShell32}

microsoft.ServerManager   Container            {Name=microsoft.ServerManager}

SEL Plugin                Container            {Name=SEL Plugin}

WMI Provider              Container            {Name=WMI Provider}

Az általam létrehozott HelpDesk környezet mellett megtalálhatók a Windows által egyéb célokra használt WinRM futtatási környezetei, valamint az alaphelyzet szerinti PowerShell távoli futtatásoknak otthont adó microsoft.powershell és Microsoft.PowerShell32 futtatási környezetek. Ezeket is testre lehet szabni, de inkább menjünk bele a HelpDesk-be:

[42] PS WSMan:\localhost\Plugin> cd .\HelpDesk

[43] PS WSMan:\localhost\Plugin\HelpDesk> dir

 

 

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

 

WARNING: column "Type" does not fit into the display and was removed.

 

Name                      Value

----                      -----

xmlns                     http://schemas.microsoft.com/wbem/wsman/1/config/...

Name                      HelpDesk

Filename                  %windir%\system32\pwrshplugin.dll

SDKVersion                1

XmlRenderingType          text

lang                      en-US

InitializationParameters

Resources

Látható, hogy ezen a szinten is van néhány beállítás, de nézzük a két alkönyvtárt:

[44] PS WSMan:\localhost\Plugin\HelpDesk> cd .\InitializationParameters

[45] PS WSMan:\localhost\Plugin\HelpDesk\InitializationParameters> dir

 

 

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

itializationParameters

 

ParamName            ParamValue

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

PSVersion            2.0

startupscript         C:\lurdy\startup...

Itt látható a környezet létrehozásánál megadott szkript, nézzük a Resources mappát, illetve egy kicsit mélyebbre is megyek:

[46] PS WSMan:\localhost\Plugin\HelpDesk\InitializationParameters> cd ..\resour

ces

[47] PS WSMan:\localhost\Plugin\HelpDesk\Resources> dir

 

 

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

sources

 

Name                      Type                 Keys

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

Resource_201271944        Container            {Uri=http://schemas.microsof...

 

 

[48] PS WSMan:\localhost\Plugin\HelpDesk\Resources> cd .\Resource_201271944

[49] PS WSMan:\localhost\Plugin\HelpDesk\Resources\Resource_201271944> dir

 

 

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

sources\Resource_201271944

 

WARNING: column "Type" does not fit into the display and was removed.

 

Name                      Value

----                      -----

ResourceUri               http://schemas.microsoft.com/powershell/HelpDesk

SupportsOptions           true

ExactMatch                true

Capability                {Shell}

Security

Látható itt, majdnem legalul, hogy a Capability elemnél hivatkozik a Shell-re, mint alkalmazásra, azaz itt a háttérben egy konzol fut. Ezt a Shell elemet korábban már láttunk a localhost szint alatt. Menjünk oda most vissza:

[54] PS WSMan:\localhost> cd .\Shell

[55] PS WSMan:\localhost\Shell> dir

 

 

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

 

WARNING: column "Type" does not fit into the display and was removed.

 

Name                      Value

----                      -----

AllowRemoteShellAccess    true

IdleTimeout               180000

MaxConcurrentUsers        5

MaxShellRunTime           2147483647

MaxProcessesPerShell      15

MaxMemoryPerShellMB       150

MaxShellsPerUser          5

Na, itt már nagyon konkrét dolgok vannak a távoli futtatási környezetre vonatkozólag, például az, hogy engedélyezett-e ez egyáltalán. Vagy ha a helpdeskes nem csinál semmit, akkor mennyi idő múlva törölje a neki dinamikusan kialakított „játszóteret”. Ez itt 18000 másodperc, azaz 5 óra. Láthatjuk azt is, hogy egy időben 5 távoli csatlakozást enged és környezetenként 150 MB memória felhasználását engedélyezi és felhasználónként maximum 5 környezetet lehet nyitni.

Természetesen átírhatjuk ezeket a paramétereket:

[69] PS WSMan:\localhost\Shell> Set-Item .\AllowRemoteShellAccess -Value $false

Azaz ideiglenesen megtiltottam a távoli futtatás lehetőségét. Ezután a helpdeskes ezt tapasztalja:

PS C:\> Get-ADUser -Filter {name -like "főn*"}

Starting a command on remote server failed with the following error message :

The WS-Management service cannot process the request. The service is configure

d to not accept any remote shell requests. For more information, see the about

_Remote_Troubleshooting Help topic.

    + CategoryInfo          : OperationStopped: (System.Manageme...pressionSy

   ncJob:PSInvokeExpressionSyncJob) [], PSRemotingTransportException

    + FullyQualifiedErrorId : JobFailure

Azaz nem tud távoli parancsokat futtatni.

Ezekkel a lehetőségekkel tehát olyan speciális futtatási környezeteket tudunk kialakítani, amelyeket a célközönség számára testre tudunk szabni, így pont azokat a szolgáltatásokat tudják elérni, amelyek számukra a munkájuk végzéséhez szükségesek.

Előfordulhat, hogy nem mi állítunk be valaki másnak ilyen távoli, korlátozott környezetet, hanem bennünk merül fel a gyanú, hogy más által nekünk biztosított környezet szűkített. Ezt a következő kifejezéssel tudjuk ellenőrizni:

$result = Invoke-Command -Session $s -ScriptBlock {$ExecutionContext.SessionState.LanguageMode} -ErrorAction SilentlyContinue

$fullLanguageMode = ($result -eq [System.Management.Automation.PSLanguageMode]::FullLanguage)



Word To HTML Converter