PowerShell (Execution Policy) Nedir?
💡 PowerShell yürütme politikası (Execution Policy) Nedir?
PowerShell komutlarının nasıl çalıştırılacağını denetleyen bir güvenlik mekanizmasıdır. PowerShell yürütme politikası, PowerShell oturumunun başladığında belirli komutları veya komut dosyalarını çalıştırmak için belirli bir politikayı gerektirir. Bu, kötü amaçlı yazılımların veya zararlı komut dosyalarının yanlışlıkla veya kötü niyetle çalıştırılmasını önlemeye yardımcı olur.
PowerShell "ExecutionPolicy" parametreleri:
- Restricted (Sınırlı): Varsayılan olarak gelen parametredir. Bu politika, hiçbir PowerShell betiğinin çalıştırılmasına izin vermez, yani Internet'ten indirilen betikler veya yerel olarak oluşturulan betikler çalıştırılamaz. Bu en güvenli yürütme politikasıdır, ancak betik tek tek komut çalıştırmaya müsaittir.
- Unrestricted (Sınırsız): Bu politika, her türlü PowerShell betiğinin çalıştırılmasına izin verir. İnternetten indirilen betikler bile onay gerektirmez. Bu, daha az güvenli bir seçenektir ve dikkatli kullanılmalıdır.
- AllSigned (Tüm İmzalı): Bu politika, yalnızca güvenilir bir yayıncı tarafından dijital olarak imzalanmış PowerShell betiklerinin çalıştırılmasına izin verir. Yerelde oluşturulan betikler dahil, imzalı betikler çalıştırılabilir.
- RemoteSigned (Uzaktan İmzalı): Bu politika, yerelde oluşturulan betiklerin imza gerektirmeden çalıştırılmasına izin verirken, Internet'ten indirilen betiklerin güvenilir bir yayıncı tarafından imzalanmasını şart koşar. Yerelde oluşturulan betikler imza gerektirmez.
- Undefined (Tanımsız): Bu parametre, geçerli ExecutionPolicy ayarını siler. Ancak GPO (Grop Policy) tarafından ayarlanmış ExecutionPolicy'e müdahale edemez. Yani, bilgisayarınıza veya kullanıcınıza uygulanan "GPO" tarafından belirlenen neyse o ExecutionPolicy geçerli olur.
- Bypass (Atla): Bu politika, her türlü PowerShell betiğinin çalıştırılmasına izin verir, ve hiçbir şekilde onay istemez. Bu, en az güvenli seçenektir ve dikkatli bir şekilde kullanılmalıdır.
✍ Ayrıca bunların dışında kalan (7.) değerde Default değeridir. Bu değer yürütme ilkesini Windows istemci bilgisayarları için "Restricted" , Windows Server makineleri için ise "RemoteSigned" olarak ayarlar.
"Get-ExecutionPolicy -List" Nedir?
"Get-ExecutionPolicy -List" komutu, PowerShell'de mevcut olan tüm yürütme politikalarını ve bunların öncelik sıralamasını görüntülemenize olanak tanır. Ayrıca bu politikaların etki alanı düzeyinde (GPO tarafından) ayarlanmış olup olmadığını da gösterir.
PS C:\Windows\system32> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine Bypass
#PowerShell betiği yürütme politikaları hakkında detaylı bilgi al: Get-Help about_Execution_Policy #Mevcut execution policies ve kapsamlarını göster: Get-ExecutionPolicy -List #PowerShell yürütme politikası durumunu kontrol et: Get-ExecutionPolicy ##Yürütme Politikalarını Ayarlayın: #Restricted: Set-ExecutionPolicy Restricted #AllSigned: Set-ExecutionPolicy AllSigned #RemoteSigned: Set-ExecutionPolicy RemoteSigned #Unrestricted: Set-ExecutionPolicy Unrestricted #Bypass: Set-ExecutionPolicy Bypass #Undefined: Set-ExecutionPolicy Undefined
🚩 PowerShell ExecutionPolicy kapsamları (Scopes)
Öğrendiğiniz gibi "PowerShell ExecutionPolicy" komut dosyası yürütmesini kısıtlamaktadır, ancak PowerShell komut dosyalarını birçok farklı bağlamda yürütebilir. PowerShell, komut dosyalarını kullanıcının oturum açtığı bağlam veya genel makine bağlamı altında, SİSTEM olarak çalışan zamanlanmış görevler aracılığıyla veya tek bir açık PowerShell konsolu aracılığıyla yürütülebilir.
✍ Tüm bu bağlamlara uyum sağlamak için PowerShell'de bir yürütme ilkesi tanımlayabileceğiniz beş farklı bağlam veya scope vardır.
- MachinePolicy: Bu kapsam düzeyi, bilgisayarın Grup Politika Nesneleri (GPO) tarafından belirlenen yürütme politikalarını ifade eder. Bilgisayar düzeyinde uygulanır ve tüm kullanıcılar için geçerlidir.
- UserPolicy: Bu kapsam düzeyi, kullanıcının Grup Politika Nesneleri (GPO) tarafından belirlenen yürütme politikalarını ifade eder. Kullanıcı düzeyinde tanımlanan politikalar, yalnızca belirli bir kullanıcı hesabı için geçerli olur.
- Process: Bu kapsam düzeyi, on andaki PowerShell oturumu veya işlemi için geçerli olan yürütme politikasıdır. Bu, PowerShell oturumları veya işlemleri arasında farklı yürütme politikaları kullanmanız gereken durumlarda kullanılır. Powershell oturumu kapandığında bu policy silinir.
- CurrentUser: Bu kapsam düzeyi, mevcut kullanıcı hesabının yürütme politikasını ifade eder. Yani, yalnızca belirli bir kullanıcı için geçerlidir.
- LocalMachine: Kapsamı, PowerShell'de bilgisayarın yerel yürütme politikasını temsil eder. Bu yürütme politikası, bilgisayarın genel yürütme politikasını ifade eder ve tüm kullanıcı hesapları için geçerlidir.
📜 PowerShell (Execution Policy) GPO
- "Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell" ✍(öncelikli)
- "User Configuration > Administrative Templates > Windows Components > Windows PowerShell"
- "Not Configured" : Belirli bir ayarın yapılmadığını veya belirli policy' in kullanılmadığını ifade eder.
- "Allow all scripts" : Tüm komut dosyalarının çalıştırılmasına izin verir.
- "Allow only signed scripts" : komut dosyalarının yalnızca güvenilir bir yayımcı tarafından imzalanmış olması durumunda yürütülmesine izin verir.
- "Allow local scripts and remote signed scripts" : Tüm yerel komut dosyalarının çalıştırılmasına izin verir; İnternetten gelen komut dosyalarının güvenilir bir yayıncı tarafından imzalanmasını şart koşar.
- "Disabled" : Bu ilke ayarını devre dışı bırakırsanız "hiçbir komut dosyasının" çalıştırılmasına" izin verilmez.
🩸 PowerShell (Execution Policy) REG
HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
Değer verisi girdileri: Restricted, AllSigned, RemoteSigned, Unrestricted, UnDefinition, etc.