alphaspirit - Fotolia

Interaktiv oder automatisiert: Nutzer-Authentifizierung in der PowerShell

Wenn PowerShell-Skripte Administrator-Rechte benötigen, gibt es zwei Möglichkeiten: Die interaktive und die automatisierte Authentifizierung.

Die Windows PowerShell ist längst zum bevorzugten Management-Tool für Microsoft-Umgebungen geworden und bereits so tief in Windows Server und Co. integriert, dass es kaum mehr Grenzen beim Arbeiten mit der PowerShell zu geben scheint. Ein paar gibt es aber durchaus.

Einer der größten Vorteile beim Windows-Management per PowerShell ist das Skripten einzelner Befehle. Damit können Befehle wiederholt in der gleichen Weise ausgeführt oder auch komplexe Sequenzen zusammengefasst werden, die ohne ein zusammenhängendes Skript äußerst unpraktisch wären.

Eines der größten Probleme beim Erstellen von PowerShell-Skripten ist die Authentifizierung. Die PowerShell ist eine enorm mächtige Skriptsprache, aber PowerShell-Skripte können nur dann effizient angewendet werden, wenn sie die hierfür erforderlichen Berechtigungen mitbringen. Problematisch ist dies vor allem deshalb, weil Administratoren dazu angehalten werden, sich aus Sicherheitsgründen lediglich mit Standard-Accounts anzumelden, die nur normale Benutzerrechte besitzen.

Administrator-Accounts werden typischerweise nur dann verwendet, wenn explizit höhere Berechtigungen nötig sind.  Das wirft die Frage auf, wie sich PowerShell-Skripte mit den nötigen Rechten ausführen lassen, wenn vielleicht auch IT-Mitarbeiter diese Skripte ausführen, die über keine Administrator-Berechtigungen verfügen.

Grundlegend gibt es zwei Möglichkeiten, mit PowerShell-Berechtigungen umzugehen: interaktiv und automatisiert. Meist wird für PowerShell-Skripte, die höhere Berechtigungen benötigen, auf Skript-Ebene eine Autorisierung durchgeführt, um die nötigen Berechtigungen zu erhalten.

Die Vorgehensweise, wie sich die skriptbasierte Autorisierung in PowerShell-Skripte integrieren lässt, hängt dabei davon ab, ob das Skript interaktiv ausgeführt werden soll oder automatisiert. Wenn ein Skript manuell von einem Administrator ausgeführt wird, dann besteht auch kein Problem damit, an dieser Stelle einfach die erforderlichen Anmeldeinformationen abzufragen. Dieser Prozess ist die wesentlich sicherere Variante, da hier die Anmeldedaten nicht abgespeichert werden müssen.

Wenn dagegen ein automatisierter Prozess das Skript anstösst, dann kann schlecht jedes Mal ein Administrator hinzugerufen werden, der dann seine Anmeldedaten eingeben muss. In diesem Fall muss das Skript in der Lage sein, das Administrator-Passwort abrufen und für die Authentifikation nutzen zu können.

Interaktive PowerShell-Authentifizierung

Die interaktive Authentifizierung ist also aufgrund der fehlenden Notwendigkeit zum Abspeichern der Anmeldedaten wesentlich sicherer als die automatisierte. Hierfür wird das Get-Credential-Cmdlet verwendet. Meist verweist Get-Credential auf eine Variable, wodurch die Anmeldeinformationen wiederum einem Befehl zugeordnet werden können.

$c = Get-Credential

Get-WmiObject Win32_DiskDrive -ComputerName Server01 -Credential $c

In diesem Beispiel verweist Get-Credential auf die Variable C$. Dieses Skript lässt Windows eine Dialogbox öffnen, die wie in Abbildung 1 nach Benutzername und Passwort eines Administrators fragt.

Abbildung 1: Interaktive Passwort-Abfrage über die PowerShell.

In der zweiten Zeile zeigt das Get-WmiObject-Cmdlet an, dass hier eine Authentifizierung nötig ist. Durchgeführt wird dieser Vorgang durch den Parameter –Credential, der dem Befehl angehängt wird, und der Variable $c, die dann die bereitgestellten Anmeldeinformationen enthält.

Automatisierte PowerShell-Authentifizierung

Die automatisierte Authentifizierung funktioniert dagegen etwas anders, da hierfür die Anmeldedaten abgespeichert werden müssen, um sie der PowerShell bei Bedarf zur Verfügung stellen zu können. Der Befehl für das Anlegen der Anmeldedaten lautet:

Read-Host –AsSecureString | ConvertFrom-SecureString | Out-File C:\Scripts\Password.txt

Nachdem dieser Befehl eingegeben wurde, wird einfach das Passwort eingegeben, ohne dass hierfür eine extra Aufforderung erscheint. Da das Passwort als Secure String abgespeichert wird, wird es auch beim Tippen nicht im Klartext angezeigt, wie Abbildung 2 zeigt.

Abbildung 2: Abspeichern des Passwortes für die automatisierte PowerShell-Authentifizierung.

Sobald das Passwort eingegeben wurde, wird es als Textdatei abgespeichert. In diesem Fall wird der Dateipfad C:\Scripts\Password.txt verwendet, der aber beliebig abgeändert werden kann. Wie Abbildung 3 zeigt, wird das Passwort innerhalb der Textdatei in verschlüsselter Form abgespeichert.

Abbildung 3: Das für die PowerShell-Authentifizierung verwendete Passwort wird verschlüsselt abgespeichert.

Normalerweise würde man dann drei Variablen aufsetzen: Eine für den Benutzernamen, eine für das Auslesen des Passwortes und eine dritte Variable würde die Anmeldeinformationen als Ganzes enthalten. Zusammengefasst ergibt sich dann folgender Skript-Code:

$Username = "poseydemo\Administrator"

$Password = Get-Content c:\scripts\cred.txt | ConvertTo-SecureString

$C = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password

Get-WmiObject Win32_DiskDrive -ComputerName Server01 -Credential $c

In diesem Fall speichert also $Username den Benutzernamen, $Password das Passwort und $c erneut die gesamten Anmeldeinformationen.

Wenn die automatisierte PowerShell-Authentifizierung verwendet werden soll, ist es aber enorm wichtig, die Passwortdatei an einem sicheren Ort zu speichern. Andernfalls können auch beliebige andere PowerShell-Skripte einfach darauf zugreifen und mühelos Administrator-Rechte erlangen, einfach indem sie das Passwort auslesen.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+, Xing und Facebook!

Artikel wurde zuletzt im Juni 2016 aktualisiert

Erfahren Sie mehr über Serverbetriebssysteme

- GOOGLE-ANZEIGEN

ComputerWeekly.de

Close