PowerShell-ExecutionPolicy setzen, Scripts signieren und ausführen


    Tags: ,

    Unsignierte Scripts werden von PowerShell nicht ausgeführtIn der Vorein­stellung ist Power­Shell kompr­omiss­los auf Sicher­heit getrimmt: Man kann generell keine Scripts ausführen, nur die Shell interaktiv benutzen. Damit soll ver­hindert werden, dass Schad­code ausge­führt und ein Computer oder Benutzer­konto dadurch kompro­mittiert wird.

    Je nach Erfordernis will man diese Einstellung ändern, um PowerShell-Scripts ausführen zu können, etwa selbst entwickelte. Um dies zu können, muss man die Tore seines Systems nicht sperrangelweit öffnen, sondern wählt eine Lösung, die sicher und dennoch handhabbar ist.

    Man signiert PowerShell-Scripts, die man selbst erstellt hat oder denen man vertraut, und verbietet die Ausführung unsignierter Scripts (zum begrenzten Schutz durch die Execution Policy siehe diese ausführliche Erläuterung).

    Richtlinien für die Ausführung: Get-ExecutionPolicy und Set-ExecutionPolicy

    Ob und welche PowerShell-Scripts auf einem System ausgeführt werden können, legt eine Richtlinie fest. Über das Kommando Get-ExecutionPolicy in einem PowerShell-Fenster erfährt man, welche gültig ist.

    Ändern kann man sie, und zwar nur mit Administratorrechten, mittels des Befehls Set-ExecutionPolicy oder per Gruppenrichtlinie für die Domäne. Die möglichen Werte für ExecutionPolicy sind folgende:

    WertAuswirkung
    Restricted Es werden keine Konfigurationsdateien geladen und keine Scripts ausgeführt (Standard)
    AllSigned Signierte Scripts und Konfigurationsdateien von einem vertrauenswürdigen Herausgeber werden ausgeführt. Auch lokal erstellte Scripts müssen signiert sein.
    RemoteSigned Aus dem Internet heruntergeladenen Scripts und Konfigurationsdateien müssen von einem vertrauenswürdigen Herausgeber signiert sein.
    Unrestricted Alle Konfigurationsdateien und alle Scripts werden ausgeführt. Bei nicht signierten Scripts aus dem Internet muss man jede Ausführung am Prompt bestätigen
    Bypass Keinerlei Blockade, keine Warnungen oder Prompts.
    Undefined Entfernt die gerade zugewiesene Richtlinie (nur für lokal zugewiesene Richtlinien, nicht für GPO-applizierte)

    Eigene Scripts signieren

    Bei der Zertifizierungsstelle besorgt man sich ein Zertifikat für die CodesignaturUm eigene Scripts ausführen zu können, jedoch trotzdem die Sicherheit zu behalten, dass unsignierter oder nach der Signatur veränderter Code nicht ausgeführt werden kann, eignet sich als ExecutionPolicy am besten AllSigned. Um sie sinnvoll zu verwenden, muss man eigene Scripts und solche, denen man vertraut, fortan signieren.

    Dazu fordert man von seiner Zertifizierungsstelle zunächst ein Zertifikat mit dem Zweck Codesignatur an. Mittels des Kommandos

    Get-ChildItem cert:\CurrentUser\My -codesigning

    prüft man dessen Vorhandensein in der PowerShell-Umgebung. Signieren kann man sein Script dann per

    Set-AuthenticodeSignature ‹Script.ps1› @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

    Mit dem Zertifikat signiert man eigene und zu vertrauenden Scriptswozu im Gegensatz zu einer globalen Richtlinienänderung keine Administratorrechte nötig sind. Direkt nach der Installation des Codesignatur-Zertifikats muss man noch einmal am Prompt bestätigen, dass man dem Herausgeber vertraut. Damit wird das Zertifikat in den Speicher für die Vertrauenswürdigen Herausgeber kopiert und man kann fortan damit signierte Scripts ohne weitere Nachfragen ausführen.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Andreas Kroschel

    Andreas Kroschel ist Buchautor und Verfasser von Fachartikeln zu Hardware, Windows und Linux sowie IT-Sicherheit. Er arbeitete als Redakteur unter anderem für BYTE Deutschland und die PC-Welt.

    Verwandte Beiträge

    Weitere Links

    2 Kommentare

    Danke für die Anleitung. Auf die Powershell Befehle zum Signieren wäre ich im Leben nicht gekommen. Was man vielleicht noch erwähnen sollte ist, dass man sich das Zertifikat von der Zertifizierungsstelle für die Codesignatur über die mmc als Benutzer holen muss, und nicht über den Computer. Hilfreich wäre evtl. auch noch der Pfad in der GPO um die Einstellungen für die Scripts anzupassen. (Computerkonfiguration - Richtlinien - Administrative Vorlagen -Windows Komponenten - Windows Powershell - Skriptausführung aktivieren).

    Hallo, wie sollte den die executionpolicy auf einem W10Pro gesetzte sein? bei mir steht überall 'undefined', da ist doch alles zu gelassen, oder?
    und wie sieht das auf einem Server 2016/2019 aus?
    MfG