2010-11-04 6 views
8

Ich habe eine Exe, die im Kontext des angemeldeten Benutzers ausgeführt wird. Die Exe verwendet WCF, um sich selbst als Named Pipe Server zu definieren (sie wird von mehreren Clients aufgerufen).Minimale Betriebssystemberechtigungen erforderlich, um Named Pipe (WCF) zu erstellen

Benötigt der Benutzer eine bestimmte Berechtigung für die Exe, um die Named Pipe erstellen zu können? Ich habe versucht, als ein Benutzer mit ziemlich minimalen Berechtigungen (dh nur in der lokalen Benutzergruppe) ausgeführt, und das funktioniert gut - aber ich bin besorgt, dass wenn ich auf der Client-Site bereitstellen, die Benutzer in gewisser Weise eingeschränkt werden können bedeutet, dass die Named Pipe-Erstellung nicht funktioniert.

Antwort

15

Für einen lokal angemeldeten Benutzer sind keine speziellen Berechtigungen erforderlich, um das Dienstende eines WCF-Dienstes mithilfe der Bindung netNamedPipe einzurichten.

Sie müssen sich jedoch Gedanken darüber machen, ob die Clients den Dienst finden und eine Verbindung zu ihm herstellen können. Es gibt zwei Aspekte dazu:

  1. Die Clients müssen in einem Sicherheitskontext ausgeführt werden, die nicht ist von einem Netzwerk-Logon eingerichtet (wie Identitätswechsel von einem Remote-Benutzer in einer Web-Anwendung). Dies liegt daran, dass WCF den Zugriff auf jede Anmeldung verweigert, die Mitglied der Gruppe NETWORK USERS ist.
  2. Wenn Sie mit Vista oder Windows7 arbeiten, muss die Dienst-Exe mit der Berechtigung SeCreateGlobalPrivilege ausgeführt werden, wenn der Dienst für Clients zugänglich sein soll, die außerhalb der Sitzung des angemeldeten Benutzers ausgeführt werden. Dies liegt daran, dass der WCF-Dienst den Pipe-Namen in einem freigegebenen Speicherobjekt veröffentlichen muss, damit Clients ihn finden können: Wenn der WCF-Service-Stack dieses gemeinsam genutzte Speicherobjekt im globalen Namespace (für alle Anmeldesitzungen sichtbar) erstellen kann. Wenn es jedoch nicht über die erforderlichen Berechtigungen verfügt, erstellt es das Shared Memory-Objekt im lokalen Namespace (nur innerhalb derselben Anmeldesitzung sichtbar). Die Bereitstellung des WCF-Dienstes als Windows-Dienst ist der einzige einfache Weg, um ihn mit dieser Berechtigung auszuführen und somit für Clients außerhalb seiner Sitzung sichtbar zu machen.

Weitere details here wenn sie interessiert sind.

+0

Dank @Chris, große Antwort und wirklich nützliche Informationen zu haben. Vorausgesetzt, dass sowohl Client als auch Server in der Sitzung angemeldeter Benutzer ausgeführt werden, sollten keine Berechtigungsprobleme auftreten. –

+0

@Paul Nearney: Das stimmt. –

+3

Ich laufe in eine ähnliche Situation, aber ich habe zwei Prozesse laufen unter der gleichen Benutzer-Sitzung, aber ich kann nicht verbinden, wenn es ein Nicht-Admin-Benutzer auf Windows 7 ist. Ich frage mich, ob ich etwas besonderes angeben muss um es zu erstellen, das Objekt in dem lokalen Namespace zu erstellen? – jpierson