Ich bin ein Citrix- Administrator und möchte die allgemeine Benutzerpopulation auf unseren Servern daran hindern, PowerShell zum Ausführen eigener Skripts oder zur interaktiven Verwendung zu verwenden. Wir verbieten bereits die Verwendung der Eingabeaufforderung über das Gruppenrichtlinienobjekt , aber mit PowerShell ist dies im Grunde genommen nutzlos.
Ich habe festgestellt, dass Powershell.exe eine Befehlszeilenoption hat, mit -NoInteractive
der ein Benutzer ein Skript ausführen kann, die ihm jedoch keine interaktive Eingabeaufforderung bietet. Das Problem ist, dass ich keinen Weg gefunden habe, Powershell zu zwingen, auf diese Weise zu arbeiten. Ich bin sogar so weit gegangen, ein Startskript C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Microsoft.PowerShell_profile.ps1 zu erstellen, das nach dem -NoInteractive
Parameter sucht, aber Benutzer können dies umgehen, indem sie einfach Powershell.exe mit dem -NoProfile
Parameter starten .
Das andere Problem ist, dass wir viele PowerShell-Skripte verwenden, um Anwendungen für Benutzer zu starten, und Teile des Anmeldeskripts in PowerShell geschrieben sind und im Benutzerkontext ausgeführt werden müssen, sodass ich die EXE-Datei nicht einfach mit einer ACL versehen kann. Ich brauche sie, um PowerShell verwenden zu können, nur nicht interaktiv. Letztendlich möchten wir die AllSigned
Ausführungsrichtlinie durchsetzen und alle Skripte signieren, damit ein Benutzer nur ein Skript ausführen kann, das wir (die Administratoren) erstellt und / oder abgemeldet haben.
Ich habe versucht, nach dieser Antwort zu googeln und habe festgestellt, dass viele Leute sie verwenden -NoInteractive
, aber ich habe keine Instanz gefunden, in der jemand versucht hat, sie zu erzwingen. Irgendwelche Ideen?
quelle
Antworten:
Ich denke, Sie verstehen die Verwendung des Schalters -NonInteractive falsch. Sie können weiterhin ausgeführt werden
powershell -noninteractive
und eine interaktive Eingabeaufforderung erhalten. Der nicht interaktive Switch ist für automatisierte Skriptszenarien vorgesehen, in denen Powershell keine Eingabeaufforderung an den Benutzer senden und auf eine Antwort warten soll. Wenn Sie beispielsweise in einem nicht interaktiven PowerShell-FensterGet-Credential
ohne Parameter ausgeführt werden, schlägt dies sofort fehl, anstatt zur Eingabe eines Benutzernamens und eines Kennworts aufzufordern. Nicht interaktiv fungiert NICHT als Sicherheitsmechanismus.Eine bessere Methode besteht darin, das zu schützen, was Sie schützen möchten, und nicht die Tools, mit denen ein Benutzer möglicherweise darauf zugreift.
quelle
Ich glaube, ich habe eine Lösung, die funktionieren wird, obwohl sie nicht besonders hübsch ist. User jbsmith war auf dem richtigen Weg. Wenn ich die powershell.exe am Ende ACLing entfernen Ausführen von der Gruppe Benutzer - Berechtigungen, die sie vom Laufen ein interaktives Fenster stoppt. Für die PowerShell-Skripts, die die Benutzer über das Anmeldeskript ausführen müssen, können wir diese Skripte mithilfe von PowerGUI in eine EXE- Datei kompilieren. Dadurch können die Skripts ausgeführt werden, da dadurch die ausführbare PowerShell-Datei nicht aufgerufen wird.
Wir überlegen, ob wir diesen Schritt noch weiter gehen und ein AppLocker- Gruppenrichtlinienobjekt verwenden möchten, um PowerShell-Skripts nur auf diejenigen zu beschränken, die wir gesegnet haben. Natürlich können wir diese Einschränkungen nur für den durchschnittlichen Nicht-IT-Benutzer festlegen und unseren Administratoren ermöglichen, PowerShell weiterhin wie gewohnt zu verwenden. Dies erfordert einen gewissen Verwaltungsaufwand für die Wartung, sodass der AppLocker-Teil möglicherweise nicht zum Tragen kommt.
quelle