Prozesse im Clientsicherheitskontext
Eine Serveranwendung kann die CreateProcessAsUser-Funktion aufrufen, um einen neuen Prozess zu erstellen, der im Sicherheitskontexteines Clients ausgeführt wird. Wenn CreateProcessAsUser mit dem Zugriffstokeneines Clients aufgerufen wird, sind die berechtigungen SE _ ASSIGNPRIMARYTOKEN _ NAME und SE INCREASE QUOTA NAME _ _ _ erforderlich, die von Windows Diensten im LocalSystem-Kontoausgeführt werden.
Die CreateProcessAsUser-Funktion erfordert auch ein primäres Zugriffstoken. Ein Server kann ein primäres Zugriffstoken für einen Client abrufen, indem entweder eine Anmeldesitzung für den Client gestartet oder die Identität des Clients angenommen und das Identitätswechseltokendupliziert wird.
In den folgenden Verfahren werden zwei Möglichkeiten zum Erstellen eines Clientprozesses beschrieben.
So erstellen Sie einen Clientprozess durch Anmelden beim Client
- Melden Sie den Client mit den Anmeldeinformationen des Clients in einem Aufruf von LogonUserbeim lokalen Computer an. LogonUser erzeugt ein primäres Token für die Anmeldesitzungdes Clients.
- Wenn der Server den Sicherheitskontext des Clients verwenden muss, erhalten Sie Zugriff auf die ausführbare Datei für den Clientprozess, indem Sie das primäre Token in einem Aufruf der Funktion ImpersonateLoggedOnUser verwenden.
- Erstellen Sie einen Prozess im Sicherheitskontext des Clients, indem Sie das primäre Token in einem Aufruf von CreateProcessAsUserverwenden.
Hinweis
Ein Prozess, der mithilfe der folgenden Technik erstellt wurde, kann möglicherweise nicht auf Netzwerkressourcen zugreifen, es sei denn, er verfügt über die Anmeldeinformationendes Clients.
So erstellen Sie einen Clientprozess durch Identitätswechsel des Clients
- Starten Sie den Identitätswechsel mithilfe einer Identitätswechselfunktion, z. B. ImpersonateNamedPipeClient.
- Rufen Sie die OpenThreadToken-Funktion auf, um ein Identitätswechseltoken abzurufen, das über den Sicherheitskontext des Clients verfügt.
- Rufen Sie die DuplicateTokenEx-Funktion auf, um das Identitätswechseltoken in ein primäres Token zu konvertieren.
- Verwenden Sie das primäre Token in einem Aufruf der CreateProcessAsUser-Funktion, um einen Prozess im Sicherheitskontext des Clients zu erstellen.
Standardmäßig erstellt CreateProcessAsUser den Clientprozess auf einer nicht interaktiven Fensterstation und einem Desktop. Um einen interaktiven Prozess zu erstellen, muss der Server zuerst die DACLs (Discretionary Access Control Lists) der interaktiven Fensterstation und des Desktops festlegen, um sicherzustellen, dass dem Client Zugriff auf diese gewährt wird. Die bevorzugte Methode hierfür besteht darin, den Client anzumelden, die Sicherheits-ID (SID) der Anmeldesitzung des Clients abzurufenund diese SID dann in zugriffszugelassenen ACEs auf der interaktiven Fensterstation und dem Desktop zu verwenden. Der Server kann dann CreateProcessAsUser aufrufen, wobei die interaktive Fensterstation und der Desktop winsta0-Standardwert angegeben \ werden. Ein Beispiel für dieses Verfahren finden Sie unter Starten eines interaktiven Clientprozesses in C++.