ExecutionPolicy verhindert Ausführung von Scripts

Unter Windows gibt es für PowerShell die ExecutionPolicy, welche die ungewünschte Ausführung von PowerShell Script´s verhindert. Somit wird verhindert, dass ungewollt Schadcode geladen und ausgeführt wird. Je nach Einstellung der Execution Policy erscheint beim Ausführen einer .ps1 Datei:

  • Die Datei “…” kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter “about_Execution_Policies”
  • Die Datei “…” kann nicht geladen werden. Die Datei “…” ist nicht digital signiert. Sie können dieses Skript im aktuellen System nicht ausführen. Weitere Informationen zum Ausführen von Skripts und Festlegen der Ausführungsrichtlinie erhalten Sie unter “about_Execution_Policies”

Da es für die Ausführung der Dateien einige verschiedene Modi gibt, muss man sein System nicht zwangsweise aufsperren, um ein Script ausführen zu können. Beispielsweise stellt man ein, dass nur signierte PS-Scripte ausgeführt werden dürfen. Wir können dann natürlich davor die Scripte selbst signieren.

 

Die Datei kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist

Die Datei kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Das ist wohl die bekannteste Meldung beim Starten einer .ps1-Datei. Das ist die Fehlermeldung die besagt, dass die aktuelle Execution Policy die Ausführung verweigert. Fürt man in PowerShell den Befehl Get-ExecutionPolicy aus, so wird einem die aktuelle Richtlinie angezeigt. Als Standard ist Restricted eingestellt, damit keine unerwünschten Scripte gestartet werden.

Get-ExecutionPolicy PowerShell

Auch bei der Verwendung eines Scripts in der Aufgabenplanung werden diese Einstellungen benötigt.

 

Die verschiedenen Arten der ExecutionPolicy in PowerShell

Wie oben schon genannt, gibt es verschiedene Execution Policy´s in PowerShell. Ein Best-Practise gibt es nicht, da jedes Unternehmen oder Netzwerk seine eigenen Anforderungen besitzt. Wir zeigen aber nachfolgend alle Erklärungen und Definitionen zu den einzelnen Richtlinien. Doch wie stellt man eine Ausführungsrichtlinie um? Das kann auch ganz einfach mit einem PowerShell Befehl erledigt werden. Hierzu nutzt man den Grundbefehl Set-ExecutionPolicy und die dazugehörige Richtlinie.

Set-ExecutionPolicy AllSigned -force

Der Parameter -force kann verwendet werden, um die Richtlinie ohne Nachfrage umstellen zu lassen.

 

Restricted

Die Richtlinie Restricted ist der Standard auf neuen Windows-Betriebssystemen. In dieser Richtlinie werden keine Scripts ausgeführt und keine Konfigurationsdateien geladen. Das ist wohl die sicherste Variante und kann mit folgendem Befehl gesetzt werden.

  • Set-ExecutionPolicy Restricted -force

Da Powershell in vielen Anwendungsgebieten benötigt wird, wird diese Richtlinie oft umgestellt.

 

AllSigned

Mit AllSigned werden lediglich signierte Scripts und Konfigurationsdateien ausgeführt, welche von einem vertrauenswürdigen Herausgeber stammen. Auch lokale Scripts die selbst erstellt wurden, müssen signiert sein.

  • Set-ExecutionPolicy AllSigned -force

Das ist die wohl sicherste Variante, welche auch noch managebar ist. Trotzdem ist es ein enormer Aufwand die Scripts zu signieren.

 

RemoteSigned

Die Richtlinie RemoteSigned besagt, dass Scripte, die aus dem Internet heruntergeladen worden sind, von einem vertrauenswürdigen Herausgeber signiert müssen sein. Das ist meiner Meinung nach die wohl praktikabelste Lösung für kleinere bis mittelständische Unternehmen.

  • Set-ExecutionPolicy RemoteSigned -force

Ich selbst verwende diese Richtlinie für ps1-Dateien, da es zum einen sicher ist, aber auch praktikabel.

 

Unrestricted

Unrestricted lässt so gut wie alle Scripte zu. Eine Ausnahme machen die heruntergeladenen Scripte. Hier muss die Ausführung bestätigt werden, diese werden aber nicht komplett blockiert. Nicht mehr ganz so sicher, aber wenn man weiß was man tut ist das auch noch eine gute Lösung.

  • Set-ExecutionPolicy Unrestricted -force

Natürlich sollte man auch hier vorsichtig sein und sich die Scripte zuvor genau ansehen.

 

Bypass

Mit der Policy Bypass lässt man alle Scripte und Konfigurationsdateien ohne Einschränkung zu. Hier werden keine Warnungen angezeigt und nichts blockiert.

  • Set-ExecutionPolicy Bypass -force

Diese Einstellung kann ich nicht empfehlen, da alles ausgeführt werden kann, ohne dass Warnungen angezeigt werden. Kann unter Umständen gefährlich sein.

 

Die ExecutionPolicy Gruppenrichtlinie (GPO) für die globale Verwendung

Natürlich kann man die PowerShell ExecutionPolicy unternehmensweit per GPO setzen. Hierzu gibt es von Microsoft eine vordefinierte Gruppenrichtlinie, welche global im Unternehmen verteilt werden kann. Hierzu erstellt man eine neue Computer-Richtlinie, da diese Einstellung für jeden Benutzer am System gelten soll.

Zu finden ist die GPO dann unter folgendem Pfad:

Computerkonfiguration\Richtlinien\Administrative Vorlagen\Windows Komponenten\Windows Powershell

Hier gibt es die Einstellung Skriptausführung aktivieren, in der dann zwischen den oben genannten Ausführungsrichtlinien gewählt werden kann:

  • Nur signierte Skripts zulassen
  • Lokale Skripts und remote signierte Skripts zulassen
  • Alle Skripts zulassen

Das Aktivieren der Skriptausführung ist wichtig, denn manche Programme benötigen bei der Installation oder Konfiguration ein PS-Script.

 

PowerShell Script signieren für die Verwendung der Execution Policy “AllSigned”

Wie oben schon genannt gibt es eine Policy, welche nur signierte Scripts zulässt. Da man oft selbst ps1-Dateien erstellt, könnte man diese danach nicht ausführen, da diese sich nicht “von selbst” signieren. Deswegen gibt es natürlich die Möglichkeit seine Skripte selbst zu signieren.

  1. Es gibt spezielle Codesignatur-Zertifikate, welche die eigene CA (Zertifizierungsstelle) bereitstellen kann. Um solch ein spezielles Zertifikat von der CA zu erhalten, muss es mit folgendem Befehl angefordert werden:
    Get-ChildItem cert:\CurrentUser\My -codesigning

    Ist das Zertifikat abgeholt, können wir es weiter verwenden.

  2. Als nächsten und auch letzten Schritt, signieren wir nun das PS-Script, also die .ps1-Datei mit dem Zertifikat, welches wir eben erhalten haben. Die Signatur zuweißen erledigen wir mit folgendem Befehl:
    Set-AuthenticodeSignature ‹Dein-PS-Script.ps1› @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

    Die [0] wird verwendet, um das eine Zertifikat mit dem Index 0 zu wählen. Sind im Zertifikatsspeicher des Benutzers mehrere Codesignatur-Zertifikate enthalten, so kann der Index natürlich ein anderer sein.

Sind diese bedien Schritte ausgeführt, so wurde das PowerShell Script signiert und kann nun ausgeführt werden.

Johannes Huber
 

In seiner Freizeit macht Johannes nichts lieber, als für ITnator Beiträge zu schreiben. Input bekommt er hierfür von Problemen in der IT Administration von Servern, Clients und vielen weiteren IT Komponenten.

sidebar
>