Teil 2: PowerShell Remoting - Constrained Endpoint Configuration

Im ersten Teil dieser Reihe haben Sie erfahren, wie Sie mithilfe der PowerShell andere Computer fernsteuern oder auf diesen PowerShell-Befehle von einem anderen Ort aus zur Ausführung bringen können. Heute werde ich Ihnen näherbringen, wie man diese Verbindungen mittels selbst konfigurierter Endpunkte verwalten und einschränken kann.

Jeder Benutzer, der über die PowerShell eine erfolgreiche Verbindung zu einem entfernten Computer aufgebaut hat, kommt auf diesem an einem bestimmten PowerShell Endpunkt heraus. Je nach Konfiguration dieses Endpunktes auf dem Zielrechner stehen dem Benutzer dann gewisse Zugriffsrechte zur Verfügung. So kann beispielsweise der verfügbare Befehlssatz an Cmdlets und Funktionen oder die Verwendung von .NET Sprachfeatures eingeschränkt werden. Nützlich ist dies vor allem dann, wenn man gewissen Benutzern zwar Fernzugriff auf Computer oder Server für einen bestimmten Tätigkeitsbereich gestatten, gleichzeitig aber keinen vollen Zugriff auf das System exponieren möchte. Im Folgenden zeige ich Ihnen nun, wie Sie eine solche Endpunktkonfiguration mittels einer Konfigurationsdatei vornehmen können.

Alle Dateien mit der Endung .pssc (PowerShell Session Configuration) beschreiben PowerShell EndpunktkonfigurationenSie sind ähnlich wie PowerShell Modulmanifeste aufgebaut und bestehen aus einer Hashtabelle, welche bestimmten Eigenschaften bestimmte Werte zuordnet. Bei diesen Eigenschaften handelt es sich um die speziellen Konfigurationsparameter des Endpunktes.

Das Erstellen einer solchen Datei lässt sich einfach über das Cmdlet New-PSSessionConfigurationFile bewerkstelligen. Geben Sie über den -Path Parameter einfach einen gültigen Namen an:

        New-PSSessionConfigurationFile -Path EndpointConfigurationTest.pssc

Wenn Sie die nun entstandene Datei öffnen, werden Sie mit einem ähnlichen Inhalt wie diesem konfrontiert:

@{

# Version number of the schema used for this configuration file SchemaVersion = '1.0.0.0'

# ID used to uniquely identify this session configuration. GUID = '2f1bb4a4-eb5c-48a3-b997-dbf36905e5d2'

# Specifies the execution policy for this session configuration ExecutionPolicy = 'Restricted'

# Modules that will be imported LanguageMode = 'FullLanguage'

# Initial state of this session configuration SessionType = 'Default'

# Environment variables defined in this session configuration # EnvironmentVariables =

# Author of this session configuration Author = 'Tobias'

# Company associated with this session configuration CompanyName = 'Unknown'

# Copyright statement for this session configuration Copyright = '(c) 2015 Tobias. All rights reserved.'

# Description of the functionality provided by this session configuration # Description =

...

Hier können Sie nun durch Eintragen/Ändern der Werte den Endpunkt nach Belieben konfigurieren. Ein paar wichtige Eigenschaften und Werte seien im Folgenden aufgeführt, weiterführende Informationen diesbezüglich sowie eine Liste aller Eigenschaften und Werte inklusive Erklärung finden Sie unter [1]:

  • ExecutionPolicy - Beschreibt die im Kontext des Endpunktes geltende ExecutionPolicy [2].

  • Language - Einschränkungen von Sprachfeatures. FullLanguage bedeutet keine Einschränkung, NoLanguage verhindert den Zugriff auf PowerShell Variablen, .NET Typen etc.

  • SessionType - Einschränkungen der grundsätzlich verfügbaren Befehle. RestrictedRemoteServer lässt als Grundkonfiguration nur die 7 essentiellen Befehle zu, welche für die Remote Session vonnöten sind.

  • VisibleCmdlets - Legt explizit die Cmdlets fest, welche neben den durch SessionType implizierten verfügbar gemacht werden sollen.

  • ModulesToImport - Grundsätzlich sind keine Module verfügbar und es können auch keine importiert werden. Legen Sie hier explizit fest, welche Module in den Kontext des Endpunktes importiert werden sollen.

  • VisibleFunctions - Gibt explizit die Funktionen aus den geladenen Modulen an, welche verfügbar gemacht werden sollen. Das Wildcardsymbol * importiert alle.

Über das Cmdlet Register-PSSessionConfiguration kann der Endpunkt nun registriert werden. Geben Sie über den -Name Parameter einen Namen für den Endpunkt und über -Path den Namen der Konfigurationsdatei an. Über den zusätzlichen Switch -ShowSecurityDescriptorUI kann mittels des bekannten Windows Dialogs festgelegt werden, welche Benutzer den Endpunkt mit welchen Zugriffsrechten benutzen dürfen:

Register-PSSessionConfiguration -Name Test -Path EndpointConfigurationTest.pssc -ShowSecurityDescriptorUI

Hier geht es zum ersten Teil der Blogeintragsreihe PowerShell Remoting.