Megosztás a következőn keresztül:


JEA szerepkörök képességei

JEA-végpont létrehozásakor meg kell határoznia egy vagy több szerepkör-képességet, amely leírja, hogy mit tehet valaki egy JEA-munkamenetben. A szerepkör-képesség egy PowerShell-adatfájl, .psrc amelynek bővítménye felsorolja a felhasználók számára elérhetővé tett parancsmagokat, függvényeket, szolgáltatókat és külső programokat.

Az engedélyezni kívánt parancsok meghatározása

A szerepkör-képességfájl létrehozásának első lépése annak mérlegelése, hogy a felhasználóknak mire van szükségük. A követelmények összegyűjtési folyamata eltarthat egy ideig, de fontos. Ha a felhasználók túl kevés parancsmaghoz és függvényhez férnek hozzá, azzal megakadályozhatják, hogy elvégezzék a feladatukat. A túl sok parancsmaghoz és függvényhez való hozzáférés engedélyezése lehetővé teszi a felhasználók számára, hogy többet tegyenek, mint amit ön tervezett, és gyengítse a biztonsági álláspontot.

A folyamat menete a szervezettől és a céloktól függ. Az alábbi tippek segítenek biztosítani, hogy a megfelelő úton járhasson.

  1. Azonosítsa a felhasználók által a feladataik elvégzéséhez használt parancsokat. Ez magában foglalhatja az informatikai személyzet felmérését, az automatizálási szkriptek ellenőrzését, vagy a PowerShell-munkamenetek átiratainak és naplóinak elemzését.
  2. Ha lehetséges, frissítse a parancssori eszközök használatát PowerShell-megfelelőkre a legjobb naplózási és JEA-testreszabási élmény érdekében. A külső programok nem korlátozhatók olyan részletesen, mint a natív PowerShell-parancsmagok és -függvények a JEA-ban.
  3. Korlátozza a parancsmagok hatókörét, hogy csak adott paramétereket vagy paraméterértékeket engedélyezzen. Ez különösen akkor fontos, ha a felhasználóknak csak a rendszer egy részét kell kezelnie.
  4. Egyéni függvények létrehozása a JEA-ban nehezen korlátozható összetett parancsok vagy parancsok helyére. Az összetett parancsokat burkoló vagy további érvényesítési logikát alkalmazó egyszerű függvények további vezérlést biztosíthatnak a rendszergazdák és a végfelhasználók egyszerűsége számára.
  5. Tesztelje az engedélyezett parancsok hatókörön belüli listáját a felhasználókkal vagy az automatizálási szolgáltatásokkal, és szükség szerint módosítsa őket.

Példák potenciálisan veszélyes parancsokra

A parancsok gondos kiválasztása fontos annak érdekében, hogy a JEA-végpont ne engedélyezze a felhasználó számára az engedélyek emelését.

Fontos

A JEA-munkamenetek felhasználói sikeréhez szükséges alapvető információk gyakran emelt szintű jogosultságokkal futnak.

Az alábbi lista példákat tartalmaz azokra a parancsokra, amelyek rosszindulatúan használhatók, ha nem korlátozott állapotban engedélyezettek. Ez nem teljes lista, és csak óvatos kiindulási pontként használható.

  • Kockázat: A csatlakozó felhasználói rendszergazdai jogosultságok biztosítása a JEA megkerüléséhez

    Példa:

    Add-LocalGroupMember -Member 'CONTOSO\jdoe' -Group 'Administrators'
    

    Kapcsolódó parancsok:

    • Add-ADGroupMember
    • Add-LocalGroupMember
    • net.exe
    • dsadd.exe
  • Kockázat: Tetszőleges kód futtatása, például kártevők, biztonsági rések vagy egyéni szkriptek futtatása a védelem megkerüléséhez

    Példa:

    Start-Process -FilePath '\\san\share\malware.exe'
    

    Kapcsolódó parancsok:

    • Start-Process
    • New-Service
    • Invoke-Item
    • Invoke-WmiMethod
    • Invoke-CimMethod
    • Invoke-Expression
    • Invoke-Command
    • New-ScheduledTask
    • Register-ScheduledJob

Szerepkör-képességfájl létrehozása

A New-PSRoleCapabilityFile parancsmaggal létrehozhat egy új PowerShell-szerepkör-képességfájlt.

New-PSRoleCapabilityFile -Path .\MyFirstJEARole.psrc

A létrehozott szerepkör-képességfájlt úgy kell szerkesztenie, hogy csak a szerepkörhöz szükséges parancsokat engedélyezze. A PowerShell súgódokumentációja számos példát tartalmaz a fájl konfigurálására.

PowerShell-parancsmagok és függvények engedélyezése

Ha engedélyezni szeretné a felhasználók számára a PowerShell-parancsmagok vagy függvények futtatását, adja hozzá a parancsmagot vagy a függvény nevét a VisibleCmdlets vagy a VisibleFunctions mezőkhöz. Ha nem biztos abban, hogy egy parancs parancsmag vagy függvény, futtathatja Get-Command <name> és ellenőrizheti a CommandType tulajdonságot a kimenetben.

VisibleCmdlets = @('Restart-Computer', 'Get-NetIPAddress')

Előfordulhat, hogy egy adott parancsmag vagy függvény hatóköre túl széles a felhasználók igényeihez. Előfordulhat például, hogy egy DNS-rendszergazdának csak a DNS-szolgáltatás újraindításához van szüksége hozzáférésre. Több-bérlős környezetekben a bérlők hozzáférhetnek az önkiszolgáló felügyeleti eszközökhöz. A bérlőknek a saját erőforrásaik kezelésére kell korlátozódniuk. Ezekben az esetekben korlátozhatja, hogy mely paraméterek legyenek közzétéve a parancsmagból vagy a függvényből.

VisibleCmdlets = @{
    Name       = 'Restart-Computer'
    Parameters = @{ Name = 'Name' }
}

Speciálisabb helyzetekben előfordulhat, hogy korlátoznia kell azokat az értékeket is, amelyek alapján a felhasználó ezeket a paramétereket használhatja. A szerepkör-képességek lehetővé teszik értékkészlet vagy reguláris kifejezési minta definiálását, amely meghatározza, hogy milyen bemenet engedélyezett.

VisibleCmdlets = @(
    @{
        Name       = 'Restart-Service'
        Parameters = @{ Name = 'Name'; ValidateSet = @('Dns', 'Spooler') }
    }
    @{
        Name       = 'Start-Website'
        Parameters = @{ Name = 'Name'; ValidatePattern = 'HR_*' }
    }
)

Feljegyzés

A gyakori PowerShell-paraméterek mindig engedélyezettek , még akkor is, ha korlátozza az elérhető paramétereket. A Paraméterek mezőben nem szabad explicit módon felsorolni őket.

Az alábbi lista a látható parancsmagok vagy függvények testreszabásának különböző módjait ismerteti. A VisibleCmdlets mezőben az alábbi lehetőségek bármelyikét kombinálhatja és egyeztetheti.

  • Használati eset: Lehetővé teszi a felhasználó számára, hogy a paraméterek korlátozása nélkül fusson My-Func .

    @{ Name = 'My-Func' }
    
  • Használati eset: Lehetővé teszi, hogy a felhasználó a MyModule modulból a paraméterek korlátozása nélkül fussonMy-Func.

    @{ Name = 'MyModule\My-Func' }
    
  • Használati eset: A parancsmagok vagy függvények futtatásának engedélyezése a felhasználó számára az igével My.

    @{ Name = 'My-*' }
    
  • Használati eset: Bármely parancsmag vagy függvény futtatásának engedélyezése a felhasználó számára a főnévvel Func.

    @{ Name = '*-Func' }
    
  • Használati eset: A felhasználó futtatásának My-Func engedélyezése a paraméterekkel és Param2 a Param1 paraméterekkel. A paraméterek bármilyen értéket megadhatnak.

    @{ Name = 'My-Func'; Parameters = @{ Name = 'Param1'}, @{ Name = 'Param2' }}
    
  • Használati eset: A felhasználó futtatásának My-Func engedélyezése a Param1 paraméterrel. Csak Value1 a Value2 paraméternek adható meg és adható meg.

    @{
        Name       = 'My-Func'
        Parameters = @{ Name = 'Param1'; ValidateSet = @('Value1', 'Value2') }
    }
    
  • Használati eset: A felhasználó futtatásának My-Func engedélyezése a Param1 paraméterrel. A paraméterhez bármilyen, a következőtől contoso kezdődő érték adható meg.

    @{
        Name       = 'My-Func'
        Parameters = @{ Name = 'Param1'; ValidatePattern = 'contoso.*' }
    }
    

Figyelmeztetés

Az ajánlott biztonsági eljárásokhoz nem ajánlott helyettesítő karaktereket használni látható parancsmagok vagy függvények definiálásakor. Ehelyett kifejezetten fel kell sorolnia az egyes megbízható parancsokat, hogy ne legyenek véletlenül engedélyezve az azonos elnevezési sémával rendelkező más parancsok.

A ValidatePattern és a ValidateSet nem alkalmazható ugyanarra a parancsmagra vagy függvényre.

Ha igen, a ValidatePattern felülbírálja a ValidateSetet.

A ValidatePatternről további információt a Hey, Scripting Guy! bejegyzésben és a PowerShell Reguláris kifejezések hivatkozási tartalmában talál.

Külső parancsok és PowerShell-szkriptek engedélyezése

Ahhoz, hogy a felhasználók futtathassanak végrehajtható fájlokat és PowerShell-szkripteket (.ps1) egy JEA-munkamenetben, a VisibleExternalCommands mező minden programjához hozzá kell adnia a teljes elérési utat.

VisibleExternalCommands = @(
    'C:\Windows\System32\whoami.exe'
    'C:\Program Files\Contoso\Scripts\UpdateITSoftware.ps1'
)

Ha lehetséges, használja a PowerShell-parancsmagokat vagy a függvények megfelelőit minden olyan külső végrehajtható eszközhöz, amelyet engedélyez, mivel ön szabályozhatja a PowerShell-parancsmagokkal és -függvényekkel engedélyezett paramétereket.

Számos végrehajtható fájl lehetővé teszi az aktuális állapot beolvasását, majd módosítását különböző paraméterek megadásával.

Vegyük például egy olyan fájlkiszolgáló-rendszergazda szerepét, amely a rendszeren üzemeltetett hálózati megosztásokat kezeli. A megosztások kezelésének egyik módja a használat net share. Az engedélyezése net.exe azonban veszélyes, mert a felhasználó a parancs használatával rendszergazdai jogosultságokat szerezhet a paranccsal net group Administrators unprivilegedjeauser /add. Biztonságosabb megoldás a Get-SmbShare parancsmag engedélyezése, amely ugyanazt az eredményt éri el, de hatóköre sokkal korlátozottabb.

Amikor külső parancsokat tesz elérhetővé a felhasználók számára egy JEA-munkamenetben, mindig adja meg a végrehajtható fájl teljes elérési útját. Ez megakadályozza a rendszer más részein található, hasonló nevű és potenciálisan rosszindulatú programok végrehajtását.

A PowerShell-szolgáltatókhoz való hozzáférés engedélyezése

Alapértelmezés szerint a JEA-munkamenetekben nem érhetők el PowerShell-szolgáltatók. Ez csökkenti annak a kockázatát, hogy bizalmas információkat és konfigurációs beállításokat tegyenek közzé a csatlakozó felhasználó számára.

Szükség esetén engedélyezheti a PowerShell-szolgáltatók elérését a VisibleProviders parancs használatával. A szolgáltatók teljes listájához futtassa a következőt Get-PSProvider: .

VisibleProviders = 'Registry'

A fájlrendszerhez, a beállításjegyzékhez, a tanúsítványtárolóhoz vagy más bizalmas szolgáltatókhoz hozzáférést igénylő egyszerű feladatokhoz érdemes lehet olyan egyéni függvényt írni, amely a felhasználó nevében együttműködik a szolgáltatóval. A JEA-munkamenetekben elérhető függvényekre, parancsmagokra és külső programokra nem vonatkoznak ugyanazok a korlátozások, mint a JEA-ra. Alapértelmezés szerint bármely szolgáltatóhoz hozzáférhetnek. Akkor is érdemes a felhasználói meghajtót használni, ha a felhasználóknak egy JEA-végpontra vagy onnan kell fájlokat másolniuk.

Egyéni függvények létrehozása

Egyéni függvényeket is létrehozhat egy szerepkör-képességfájlban, hogy egyszerűbbé tegye a végfelhasználók számára az összetett feladatokat. Az egyéni függvények akkor is hasznosak, ha speciális érvényesítési logikára van szükség a parancsmag paraméterértékeihez. Egyszerű függvényeket írhat a FunctionDefinitions mezőbe:

VisibleFunctions = 'Get-TopProcess'

FunctionDefinitions = @{
    Name        = 'Get-TopProcess'
    ScriptBlock = {
        param($Count = 10)

        Get-Process |
            Sort-Object -Property CPU -Descending |
            Microsoft.PowerShell.Utility\Select-Object -First $Count
    }
}

Fontos

Ne felejtse el hozzáadni az egyéni függvények nevét a VisibleFunctions mezőhöz, hogy a JEA-felhasználók futtathassák őket.

Az egyéni függvények törzse (szkriptblokkja) a rendszer alapértelmezett nyelvi módban fut, és nincsenek kitéve a JEA nyelvi korlátainak. Ez azt jelenti, hogy a függvények hozzáférhetnek a fájlrendszerhez és a beállításjegyzékhez, és olyan parancsokat futtathatnak, amelyeket nem tettek láthatóvá a szerepkör-képességfájlban. Ügyeljen arra, hogy a paraméterek használatakor ne futtasson tetszőleges kódot. Kerülje a felhasználói bemenet közvetlen beírását olyan parancsmagokba, mint a Invoke-Expression.

A fenti példában figyelje meg, hogy a teljes modulnevet (FQMN) Microsoft.PowerShell.Utility\Select-Object használták a gyorsírás Select-Objecthelyett. A szerepkör-képességfájlokban definiált függvények továbbra is a JEA-munkamenetek hatókörére vonatkoznak, amely magában foglalja a JEA által létrehozott proxyfüggvényeket a meglévő parancsok korlátozásához.

Alapértelmezés szerint egy korlátozott parancsmag az összes JEA-munkamenetben, Select-Object amely nem teszi lehetővé az objektumok tetszőleges tulajdonságainak kiválasztását. A nem engedélyezett Select-Object függvények használatához explicit módon kell kérnie a teljes implementációt a teljes tartománynévvel. A JEA-munkamenetek korlátozott parancsmagjai ugyanazokra a korlátozásokra vannak hatással, amikor függvényből hívják meg őket. További információ: about_Command_Precedence.

Ha több egyéni függvényt is ír, kényelmesebb egy PowerShell-szkriptmodulba helyezni őket. Ezeket a függvényeket láthatóvá teheti a JEA-munkamenetben a VisibleFunctions mező használatával, ahogyan a beépített és külső modulok esetében tenné.

Ahhoz, hogy a tabulátor megfelelően működjön a JEA-munkamenetekben, fel kell vennie a beépített függvényt tabexpansion2 a VisibleFunctions listába.

A szerepkör-képességek elérhetővé tétele egy konfiguráció számára

A PowerShell 6 előtt ahhoz, hogy a PowerShell megtaláljon egy szerepkör-képességfájlt, azt egy RoleCapabilities PowerShell-modul mappájában kell tárolni. A modul a környezeti változóban található bármely mappában $env:PSModulePath tárolható, azonban nem szabad olyan mappába $env:SystemRoot\System32 helyeznie, amelyben a nem megbízható felhasználók módosíthatják a fájlokat.

Az alábbi példa egy ContosoJEA nevű PowerShell-szkriptmodult hoz létre a $env:ProgramFiles szerepkör-képességfájl üzemeltetésének elérési útján.

# Create a folder for the module
$modulePath = Join-Path $env:ProgramFiles "WindowsPowerShell\Modules\ContosoJEA"
New-Item -ItemType Directory -Path $modulePath

# Create an empty script module and module manifest.
# At least one file in the module folder must have the same name as the folder itself.
$rootModulePath = Join-Path $modulePath "ContosoJEAFunctions.psm1"
$moduleManifestPath = Join-Path $modulePath "ContosoJEA.psd1"
New-Item -ItemType File -Path $RootModulePath
New-ModuleManifest -Path $moduleManifestPath -RootModule "ContosoJEAFunctions.psm1"

# Create the RoleCapabilities folder and copy in the PSRC file
$rcFolder = Join-Path $modulePath "RoleCapabilities"
New-Item -ItemType Directory $rcFolder
Copy-Item -Path .\MyFirstJEARole.psrc -Destination $rcFolder

A PowerShell-modulokról további információt a PowerShell-modul ismertetése című témakörben talál.

A PowerShell 6-tól kezdve a RoleDefinitions tulajdonság hozzá lett adva a munkamenet konfigurációs fájljához. Ez a tulajdonság lehetővé teszi egy szerepkör-konfigurációs fájl helyének megadását a szerepkördefinícióhoz. Lásd a New-PSSessionConfigurationFile példáit.

Szerepkör-képességek frissítése

A szerepkör-képességfájlt bármikor szerkesztheti a beállítások frissítéséhez. A szerepkör-képesség frissítése után megkezdett új JEA-munkamenetek a módosított képességeket tükrözik.

Ezért olyan fontos a szerepkör-képességek mappához való hozzáférés szabályozása. Csak a megbízható rendszergazdák módosíthatják a szerepkör-képességfájlokat. Ha egy nem megbízható felhasználó módosíthatja a szerepkör-képességfájlokat, egyszerűen hozzáférést adhat nekik olyan parancsmagokhoz, amelyek lehetővé teszik számukra a jogosultságok megemeltségét.

A szerepkör-képességekhez való hozzáférést zárolni kívánó rendszergazdák számára győződjön meg arról, hogy a helyi rendszer írásvédett hozzáféréssel rendelkezik a szerepkörképesség-fájlokhoz és a modulokat tartalmazó fájlokhoz.

A szerepkör-képességek egyesítése

A felhasználók hozzáférést kapnak a munkamenet-konfigurációs fájlban lévő összes egyező szerepkör-képességhez, amikor jeA-munkamenetet írnak be. A JEA a szerepkörök bármelyike által engedélyezett parancsok közül a legmegfelelőbb parancskészletet próbálja biztosítani a felhasználónak.

VisibleCmdlets és VisibleFunctions

A legösszetettebb egyesítési logika hatással van a parancsmagokra és a függvényekre, amelyek paraméterei és paraméterértékei korlátozottak lehetnek a JEA-ban.

A szabályok a következők:

  1. Ha egy parancsmag csak egy szerepkörben látható, akkor az a felhasználó számára is látható, bármilyen alkalmazható paraméterkorlátozással.
  2. Ha egy parancsmag több szerepkörben is láthatóvá válik, és mindegyik szerepkörre ugyanazok a korlátozások vannak hatással a parancsmagra, a parancsmag látható lesz a felhasználó számára ezekkel a korlátozásokkal.
  3. Ha egy parancsmag több szerepkörben is láthatóvá válik, és mindegyik szerepkör különböző paramétereket tesz lehetővé, a parancsmag és az összes szerepkörben definiált összes paraméter látható lesz a felhasználó számára. Ha egy szerepkör nem korlátozza a paramétereket, minden paraméter engedélyezett.
  4. Ha az egyik szerepkör érvényesítési készletet vagy érvényesítési mintát határoz meg egy parancsmagparaméterhez, és a másik szerepkör engedélyezi a paramétert, de nem korlátozza a paraméterértékeket, a rendszer figyelmen kívül hagyja az érvényesítési csoportot vagy mintát.
  5. Ha egy érvényesítési csoport egynél több szerepkörben ugyanahhoz a parancsmagparaméterhez van definiálva, az összes érvényesítési készlet összes értéke engedélyezett.
  6. Ha egy érvényesítési minta egynél több szerepkörben ugyanazon parancsmagparaméterhez van definiálva, a minták bármelyikének megfelelő értékek engedélyezve lesznek.
  7. Ha egy érvényesítési csoport egy vagy több szerepkörben van definiálva, és egy érvényesítési minta egy másik szerepkörben van definiálva ugyanahhoz a parancsmagparaméterhez, a rendszer figyelmen kívül hagyja az érvényesítési készletet, és a szabály (6) a fennmaradó érvényesítési mintákra vonatkozik.

Az alábbiakban egy példa látható arra, hogyan egyesíthetők a szerepkörök az alábbi szabályok szerint:

# Role A Visible Cmdlets
$roleA = @{
    VisibleCmdlets = @(
        'Get-Service'
         @{
            Name       = 'Restart-Service'
            Parameters = @{ Name = 'DisplayName'; ValidateSet = 'DNS Client' }
        }
    )
}

# Role B Visible Cmdlets
$roleB = @{
    VisibleCmdlets = @(
        @{
            Name       = 'Get-Service';
            Parameters = @{ Name = 'DisplayName'; ValidatePattern = 'DNS.*' }
        }
        @{
            Name       = 'Restart-Service'
            Parameters = @{ Name = 'DisplayName'; ValidateSet = 'DNS Server' }
        }
    )
}

# Resulting permissions for a user who belongs to both role A and B
# - The constraint in role B for the DisplayName parameter on Get-Service
#   is ignored because of rule #4
# - The ValidateSets for Restart-Service are merged because both roles use
#   ValidateSet on the same parameter per rule #5
$mergedAandB = @{
    VisibleCmdlets = @(
        'Get-Service'
        @{
            Name = 'Restart-Service';
            Parameters = @{
                Name = 'DisplayName'
                ValidateSet = 'DNS Client', 'DNS Server'
            }
        }
    )
}

VisibleExternalCommands, VisibleAliases, VisibleProviders, ScriptsToProcess

A szerepkör-képességfájl összes többi mezője hozzáadódik az engedélyezett külső parancsok, aliasok, szolgáltatók és indítási szkriptek halmozott készletéhez. Az egy szerepkör-képességben elérhető parancsok, aliasok, szolgáltatók vagy szkriptek a JEA-felhasználó számára érhetők el.

Ügyeljen arra, hogy az egyes szerepkör-képességek és parancsmagok/függvények/parancsok együttes szolgáltatói készlete ne engedélyezze a felhasználók számára a rendszererőforrásokhoz való véletlen hozzáférést. Ha például az egyik szerepkör engedélyezi a Remove-Item parancsmagot, a másik pedig a FileSystem szolgáltatót, akkor fennáll a veszélye, hogy egy JEA-felhasználó tetszőleges fájlokat töröl a számítógépen. A felhasználók tényleges engedélyeinek azonosításával kapcsolatos további információk a naplózási JEA-cikkben találhatók.

Következő lépések

Munkamenet-konfigurációs fájl létrehozása