Üdvözöljük a PowerShell világában! Ha valaha is próbált már szkriptet futtatni Windows környezetben, szinte biztosan találkozott az úgynevezett Execution Policy fogalmával. Ez nem egy egyszerű beállítás, hanem egy alapvető biztonsági funkció, amely segít megvédeni rendszerét a rosszindulatú vagy nem kívánt szkriptek futtatásától. Sokan csupán megkerülik, vagy a legkevésbé biztonságos beállításra állítják a hibaelhárítás során, anélkül, hogy teljesen megértenék annak valódi célját és következményeit. Cikkünkben részletesen bemutatjuk a PowerShell Execution Policy-kat: mit jelentenek, hogyan működnek, és ami a legfontosabb, melyiket érdemes választania a biztonság és a hatékonyság egyensúlyának megteremtéséhez.
Mi is az a PowerShell Execution Policy?
A PowerShell Execution Policy egy olyan biztonsági beállítás, amely korlátozza, hogy a PowerShell milyen feltételekkel futtathat szkripteket. Ez a mechanizmus a Microsoft válasza a szkript alapú támadásokra, amelyek a rosszindulatú kódok futtatásával károsíthatják a rendszereket. Fontos megjegyezni, hogy az Execution Policy nem egy önálló biztonsági megoldás – nem akadályozza meg egy rosszindulatú parancs vagy kód végrehajtását, ha azt interaktívan, közvetlenül a konzolban írja be valaki. Kizárólag a .ps1 kiterjesztésű szkriptfájlok futtatására vonatkozik. Elsődleges célja, hogy megakadályozza a véletlen vagy nem kívánt szkriptek futtatását, különösen az internetről letöltötteket vagy e-mail mellékletekből származókat.
A PowerShell biztonsági modelljének ez az eleme rendkívül rugalmas. Többféle policy létezik, és ezek hatóköre is testreszabható, így különböző felhasználói vagy rendszerszintű igényekhez igazítható. Nézzük meg részletesen az egyes policy-kat, és hogy mit jelentenek a gyakorlatban.
A Különböző Execution Policy-k Részletesen
A PowerShell öt fő Execution Policy-t ismer, valamint egy hatodik, speciális állapotot. Mindegyiknek megvannak a maga előnyei és hátrányai a biztonság és a használhatóság szempontjából:
-
Restricted: A legszigorúbb (Alapértelmezett Windows kliens rendszereken)
Ez a legkorlátozóbb policy. A Restricted beállítás esetén a PowerShell nem futtat semmilyen szkriptet – még azokat sem, amelyeket Ön írt a saját gépén. Interaktív parancsokat természetesen továbbra is beírhat és futtathat a konzolban, de egyetlen
.ps1
fájlt sem hajthat végre. Ez ideális választás lehet olyan felhasználók számára, akik sosem szándékoznak PowerShell szkripteket futtatni, vagy akik maximális óvatosságra törekednek. Védelmet nyújt a nem kívánt szkriptfuttatások ellen, azonban jelentősen korlátozza a PowerShell automatizálási képességeit. -
AllSigned: Csak aláírt szkriptek
Az AllSigned policy lehetővé teszi a szkriptek futtatását, feltéve, hogy azokat egy megbízható kiadó digitálisan aláírta. Ez azt jelenti, hogy minden futtatandó szkriptnek érvényes digitális aláírással kell rendelkeznie egy olyan tanúsítványtól, amelyet a rendszer megbízhatónak ítél. Ha egy szkript nem aláírt, vagy az aláírás érvénytelen (például lejárt, visszavont, vagy a tanúsítvány kiadója nem megbízható), a PowerShell nem futtatja, és hibát jelez. Ez a policy magas szintű biztonságot nyújt, különösen vállalati környezetben, ahol a szkriptek integritása és eredete kulcsfontosságú. Hátránya, hogy minden saját írású szkriptet is alá kell írni, ami plusz adminisztrációt jelent.
-
RemoteSigned: Távoli szkriptek aláírást igényelnek (Alapértelmezett Windows szervereken)
Ez az egyik leggyakrabban használt és ajánlott policy sok adminisztrátor számára. A RemoteSigned beállítás értelmében a helyben írt és létrehozott szkriptek futtathatók aláírás nélkül is. Azonban minden olyan szkript, amelyet az internetről töltöttek le, hálózati megosztásról származik, vagy e-mail mellékletként érkezett (azaz „távoli” forrásból származik, és a fájl „Mark of the Web” (MOTW) attribútummal rendelkezik), csak akkor futtatható, ha azokat megbízható kiadó digitálisan aláírta. Ez egy jó kompromisszum a biztonság és a használhatóság között: védi a rendszert a külső, potenciálisan rosszindulatú szkriptektől, miközben lehetővé teszi a helyi szkriptek kényelmes fejlesztését és futtatását.
-
Unrestricted: Minden futhat (Nagy kockázat!)
Az Unrestricted policy, ahogy a neve is mutatja, lehetővé teszi az összes szkript futtatását, függetlenül azok eredetétől vagy aláírásától. Mielőtt egy internetről letöltött szkriptet futtatna, a PowerShell figyelmeztetést jeleníthet meg, de ezt könnyen figyelmen kívül lehet hagyni. Ez a beállítás a legkevésbé biztonságos, és csak nagyon ritkán, különösen ellenőrzött fejlesztői vagy tesztkörnyezetekben ajánlott. Valós munkakörnyezetben, éles rendszereken szinte sosem javasolt az Unrestricted policy használata, mivel rendkívül magas biztonsági kockázatot jelenthet, utat engedve a kártevőknek.
-
Bypass: Semmi ellenőrzés (Nagyon nagy kockázat!)
A Bypass policy gyakorlatilag teljesen kikapcsolja az Execution Policy ellenőrzéseket. Semmilyen figyelmeztetés, prompt vagy korlátozás nem jelenik meg. A szkriptek akadálytalanul futnak, függetlenül az eredetüktől, aláírásuktól vagy a bennük rejlő veszélyektől. Ezt a policy-t jellemzően csak automatizált tesztelési környezetekben használják, ahol a szkriptek megbízhatósága garantált, és a futtatás gyorsasága elsődleges. Soha ne használja ezt a policy-t éles vagy termelési környezetben, és legyen rendkívül óvatos a használatával bárhol máshol is.
-
Undefined: Nincs beállítva
Amikor az Execution Policy Undefined állapotban van egy adott hatókörben (scope), az azt jelenti, hogy abban a konkrét hatókörben nincs explicit policy beállítva. Ebben az esetben a PowerShell az alacsonyabb prioritású hatókörök policy-jét veszi figyelembe. Ha sehol sincs beállítva policy, akkor a rendszer alapértelmezett Execution Policy-ja lép életbe (Restricted kliensen, RemoteSigned szerveren). Ez az állapot nem egy biztonsági szint, hanem egy „nincs beállítva” állapot, ami lehetővé teszi, hogy a beállítások öröklődjenek más szintekről.
Execution Policy Hatókörök (Scopes)
Az Execution Policy beállításai nem csak globálisak lehetnek, hanem különböző hatókörökben (scopes) is definiálhatók. Ez lehetővé teszi, hogy finomhangoljuk a biztonsági beállításokat különböző felhasználók vagy folyamatok számára. A policy-k a következő sorrendben érvényesülnek, a legmagasabb prioritással rendelkező felülírja az alacsonyabbat:
-
MachinePolicy: Ez a legmagasabb prioritású hatókör, amelyet általában Csoportházirend (Group Policy) objektumok (GPO) vagy helyi házirendek segítségével állítanak be. Az itt definiált policy az összes felhasználóra és folyamatra érvényesül a gépen, és a felhasználók nem írhatják felül.
-
UserPolicy: Szintén Csoportházirenden keresztül állítható be, de specifikusan egy adott felhasználóra vagy felhasználói csoportra vonatkozik. Magasabb prioritású, mint a LocalMachine és CurrentUser policy-k, de alacsonyabb, mint a MachinePolicy.
-
Process: Ez a hatókör csak az aktuális PowerShell folyamatra érvényes. Ideiglenesen beállítható, és csak addig marad érvényben, amíg az adott PowerShell ablak nyitva van. Amint bezárja az ablakot, a beállítás elveszik. Kiválóan alkalmas egyedi szkriptek futtatására speciális policy-val anélkül, hogy a globális beállításokat módosítanánk.
-
CurrentUser: Ez a hatókör az aktuálisan bejelentkezett felhasználóra vonatkozik. A felhasználó a
Set-ExecutionPolicy
parancssal állíthatja be. Ez a beállítás megmarad a PowerShell munkamenetek között is. -
LocalMachine: Ez a policy a teljes gépre érvényes, de alacsonyabb prioritású, mint a Process, CurrentUser, UserPolicy és MachinePolicy. Ezt az alapértelmezett policy-t gyakran a telepítések vagy a rendszergazdák állítják be, és érvényesül, ha nincs magasabb prioritású policy definiálva.
A PowerShell először a MachinePolicy-t ellenőrzi, majd a UserPolicy-t, a Process-t, a CurrentUser-t, és végül a LocalMachine-t. Az első megtalált, explicit módon beállított policy érvényesül az adott hatókörben. Ha például a MachinePolicy Restricted, akkor semmilyen más, lazább beállítás nem írja felül azt.
Melyiket Válasszam? – Gyakorlati Tanácsok
A megfelelő Execution Policy kiválasztása nagyban függ az Ön szerepétől és a környezettől:
-
Otthoni Felhasználók / Általános Felhasználók: Ha Ön alapvető felhasználó, aki ritkán, vagy sosem futtat PowerShell szkripteket, a Restricted policy a legbiztonságosabb választás. Ez az alapértelmezett, és minimálisra csökkenti a kockázatot. Ha mégis futtatna valaha szkriptet, ideiglenesen módosíthatja a policy-t a Process hatókörben, vagy egyeztethet egy rendszergazdával.
-
Fejlesztők / Szkriptírók: A RemoteSigned policy általában jó kiindulópont. Lehetővé teszi, hogy kényelmesen fejlessze és tesztelje saját szkriptjeit anélkül, hogy azokat aláírná. Ugyanakkor védelmet nyújt a külső, nem ellenőrzött szkriptek ellen, amelyek esetleg tartalmazhatnak kártékony kódot. Ha rendszeresen megosztja szkriptjeit másokkal, érdemes lehet az AllSigned-et használni, és digitálisan aláírni a szkriptjeit.
-
Rendszergazdák / Vállalati Környezetek: Vállalati környezetben a RemoteSigned vagy az AllSigned az ajánlott. A RemoteSigned jó egyensúlyt teremt, lehetővé téve a helyi szkriptek futtatását, miközben ellenőrzi a távoli forrásból származókat. Az AllSigned a legmagasabb biztonságot nyújtja, de megköveteli az összes szkript digitális aláírását, ami nagyobb adminisztrációs terhet jelent. Célszerű Csoportházirend (GPO) segítségével központilag beállítani a MachinePolicy vagy UserPolicy szinteken, így biztosítva a konzisztenciát és megakadályozva, hogy a felhasználók felülírják azt. A Bypass vagy Unrestricted policy-k használata éles környezetben súlyos biztonsági hibának minősül.
Hogyan Kezeljük az Execution Policy-kat?
Az Execution Policy beállításainak megtekintéséhez és módosításához a PowerShell a következő parancsmagokat kínálja:
-
Get-ExecutionPolicy
: Ez a parancsmag megmutatja az aktuális, érvényes Execution Policy-t. Ha tudni szeretné az összes hatókör policy-jét, használja aGet-ExecutionPolicy -List
parancsot. Ez listázza az összes definiált policy-t és azok hatóköreit, prioritási sorrendben.Get-ExecutionPolicy Get-ExecutionPolicy -List
-
Set-ExecutionPolicy
: Ezzel a parancsmaggal módosíthatja az Execution Policy-t. Fontos, hogy rendszergazdai jogosultsággal kell futtatnia a PowerShell-t, ha a LocalMachine vagy magasabb prioritású hatókörökben szeretne változtatni.Például, ha a RemoteSigned policy-ra szeretné állítani a LocalMachine hatókörben (ami a leggyakoribb beállítás szervereken):
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
Ha csak az aktuális PowerShell munkamenetben szeretne ideiglenesen egy policy-t beállítani (például egy szkript futtatásához, ami az Unrestricted-et igényli, de nem akarja a gép policy-ját módosítani):
Set-ExecutionPolicy Unrestricted -Scope Process
Ez a beállítás csak addig él, amíg a PowerShell ablak nyitva van. Ha bezárja és újra megnyitja, a korábbi, tartós policy lép ismét életbe.
Szkriptek futtatása ideiglenesen más policy-val:
Néha szükség lehet egy olyan szkript futtatására, amelyhez lazább policy szükséges, de nem akarja globálisan megváltoztatni a gép beállításait. A -ExecutionPolicy
paramétert használhatja a powershell.exe
indításakor:
powershell.exe -ExecutionPolicy Bypass -File "C:PathToYourScript.ps1"
Ez a parancs elindít egy új PowerShell folyamatot a Bypass
policy-val, futtatja a megadott szkriptet, majd bezárja a folyamatot. Ez egy biztonságosabb módszer, mint a Set-ExecutionPolicy Unrestricted -Scope LocalMachine
parancs tartós futtatása.
Biztonsági Megfontolások és Best Practices
Mint említettük, az Execution Policy egy fontos, de nem egyetlen biztonsági réteg. Íme néhány további biztonsági megfontolás és legjobb gyakorlat:
-
Defense in Depth (Többrétegű védelem): Ne támaszkodjon kizárólag az Execution Policy-ra. Használjon víruskereső szoftvert, tűzfalat, tartsa naprakészen az operációs rendszert és az alkalmazásokat, és alkalmazzon szigorú felhasználói jogkezelést (Principle of Least Privilege – a legkevesebb jogosultság elve).
-
Digitális aláírások: Használjon digitális aláírásokat a szkriptek integritásának és eredetének ellenőrzésére. Ez különösen fontos vállalati környezetben, ahol sokan írnak és használnak szkripteket. Az AllSigned policy bevezetése, és a saját tanúsítványok kiadása a belső szkriptek aláírására jelentősen növeli a biztonságot.
-
Szkriptek átvizsgálása: Soha ne futtasson internetről letöltött vagy ismeretlen forrásból származó szkriptet anélkül, hogy alaposan átnézné a kódját. A digitális aláírás segít az eredet ellenőrzésében, de nem garantálja, hogy a kód nem rosszindulatú.
-
Rendszeres felülvizsgálat: Időről időre ellenőrizze a Execution Policy beállításait a
Get-ExecutionPolicy -List
paranccsal, különösen, ha új szoftvereket telepített vagy rendszergazdai feladatokat végzett. Győződjön meg róla, hogy a beállítások továbbra is megfelelnek a szervezet biztonsági előírásainak.
Gyakori Hibák és Tévhitek
-
Tévedés: Az Execution Policy teljes biztonsági megoldás.
Valóság: Nem az. Csak a szkriptfájlok futtatását korlátozza. Egy támadó továbbra is futtathat rosszindulatú parancsokat interaktívan a PowerShell konzolban, vagy más programokból. -
Tévedés: Mindig Unrestricted-re kell állítani, hogy működjön.
Valóság: Ez hatalmas biztonsági kockázatot jelent. A RemoteSigned vagy az AllSigned a legtöbb esetben megfelelő, és sokkal biztonságosabb. -
Tévedés: Ez egy vírusirtó.
Valóság: Nem. Nem végez kód-szkennelést a vírusok után. Csupán az alapján dönt, hogy egy szkript futtatható-e, hogy az megfelel-e a meghatározott biztonsági szabályoknak (pl. digitális aláírás).
Összefoglalás
A PowerShell Execution Policy egy alapvető, de gyakran félreértett biztonsági funkció. Nem egy univerzális biztonsági pajzs, de fontos elsődleges védelmi vonalat biztosít a nem kívánt szkriptfuttatások ellen. A megfelelő policy kiválasztása kulcsfontosságú a rendszer biztonsága szempontjából, miközben lehetővé teszi a hatékony szkriptelést és automatizálást. Mindig mérlegelje a környezetét és a kockázatokat, és válassza a legszigorúbb policy-t, amely még lehetővé teszi a szükséges feladatok elvégzését. A RemoteSigned policy általában a legjobb választás a legtöbb felhasználó és adminisztrátor számára, míg az AllSigned a vállalati környezetek számára kínál robusztusabb védelmet. Soha ne feledje, hogy a biztonság egy többrétegű megközelítést igényel, és az Execution Policy ennek csak egyetlen, de elengedhetetlen része.
Leave a Reply