Читать книгу PowerShell 7 und Windows PowerShell - Tobias Weltner - Страница 65

Skriptausführung erlauben

Оглавление

Interaktive Befehle dürfen Sie in PowerShell jederzeit ausführen. Skripte, also Dateien mit der Erweiterung .ps1, sind anfangs allerdings verboten.

Das ist natürlich Unsinn, weil sich so PowerShell kaum nutzen lässt, und Sie müssen diese Sperre unbedingt sofort aufheben. Selbst wenn Sie gar nicht planen, eigene Skripte zu schreiben, nutzen viele PowerShell-Befehlserweiterungen intern Skripte und funktionieren nicht, solange die Skriptausführung verboten ist.

Ob Skripte erlaubt sind, bestimmt die sogenannte ExecutionPolicy. Set-ExecutionPolicy kann die Einstellungen ändern. Der folgende Befehl erlaubt dem aktuellen Benutzer, künftig lokale Skripte auszuführen. Skripte, die aus dem Internet heruntergeladen wurden, bleiben allerdings gesperrt:

PS> Set-ExecutionPolicy –Scope CurrentUser –ExecutionPolicy RemoteSigned –Force

Die gewählte Einstellung RemoteSigned ist zugegebenermaßen alles andere als intuitiv, denn was haben »Remote« und »Signed« miteinander zu tun? Tabelle 1.1 erklärt die möglichen Einstellungen deshalb etwas genauer.

Einstellung Bedeutung
RemoteSigned Lokale Skripte sind erlaubt. Skripte, die aus dem Internet heruntergeladen wurden oder auf Computern lagern, die nicht zur Domäne gehören, sind verboten. Sie können nur durch eine gültige digitale Signatur am Ende des Skriptcodes individuell erlaubt werden. Dies ist die empfohlene Einstellung für normale Anwender.
Bypass Alle Skripte sind erlaubt. Dies ist die empfohlene Einstellung für Administratoren und versierte Anwender, weil sie auch die unbeaufsichtigte Ausführung erlaubt und diese Anwendergruppe selbst entscheiden kann, ob ein Skript legitim ist oder nicht.
Unrestricted Alle Skripte sind erlaubt, aber wenn die Skripte nicht lokal gespeichert sind oder aus dem Internet heruntergeladen wurden, erfolgt vor der Ausführung eine Sicherheitsabfrage.
Undefined Es wird keine Festlegung vorgenommen. Die nächstniedrigere Einstellung wird zurate gezogen. Wenn alle Einstellungen auf Undefined stehen, wird die Einstellungen auf Undefined stehen, wird die Einstellung Restricted aktiviert, und die Ausführung von Skripten ist verboten. Dies ist die Grundeinstellung.
Restricted Die Skriptausführung ist verboten.
AllSigned Alle Skripte müssen digital signiert sein. In der Praxis wirkt diese Einstellung ähnlich wie Restricted, weil Skripte typischerweise nie signiert sind.

Tabelle 1.1: Skriptausführungsrichtlinien

Ob die gerade geänderte neue Einstellung auch tatsächlich wirksam geworden ist, verrät GetExecutionPolicy.

PS> Get-ExecutionPolicy

RemoteSigned

Falls hier nicht die gleiche Einstellung genannt wird, die Sie gerade gesetzt haben, schauen Sie genauer nach, wer dazwischenfunkt: Es gibt nämlich mehrere Stellen, an denen diese Einstellung gesetzt werden kann:

PS> Get-ExecutionPolicy –List

Scope ExecutionPolicy

----- ---------------

MachinePolicy Undefined

UserPolicy Undefined

Process Undefined

CurrentUser RemoteSigned

LocalMachine Undefined

PowerShell bestimmt die effektive Einstellung, indem es die fünf Richtlinien von oben nach unten prüft. Die erste Einstellung, die nicht Undefined lautet, wird wirksam. Sind alle Einstellungen auf Undefined gesetzt, wird die Skriptausführung verboten. Das ist der Ausgangszustand der PowerShell.

Besonderes Augenmerk verdienen die ersten beiden Richtlinien: MachinePolicy und UserPolicy werden zentral über Gruppenrichtlinien festgelegt. Sie können diese Einstellungen nicht manuell ändern. Da es die obersten beiden Einstellungen sind, haben sie Vorrang vor allen übrigen. Wenn an diesen obersten beiden Stellen also Vorgaben zu sehen sind, können Sie zwar darunter eigene Einstellungen treffen, doch werden diese niemals wirksam.

Es ist ein Fehler – häufig auf einem Missverständnis beruhend –, wenn in MachinePolicy und/oder UserPolicy etwas anderes eingestellt ist als Undefined. In diesem Fall zwingt man die Einstellung nämlich allen Anwendern unwiderruflich auf. Stattdessen sollte man sie höchstens vorschlagen: Eine Gruppenrichtlinie sollte allenfalls einen Standardwert wie RemoteSigned für die Einstellung LocalMachine hinterlegen. Diese Einstellung würde dann für alle Anwender gelten, solange sie selbst keine andere Einstellung wählen.

Wer die ExecutionPolicy zwingend vorschreiben will, unterliegt dem Irrglauben, es wäre ein Schutzschild gegen Angreifer. Das stimmt aber nicht. Es ist lediglich eine benutzerspezifische Präferenz, die unerfahrene Anwender schützen soll, unkritisch Skripte aus zweifelhaften Quellen zu starten. Angreifer können diese Einstellung auf mannigfaltige Weise umgehen.

PowerShell 7 und Windows PowerShell

Подняться наверх