Named Pipe-Sicherheit und -Zugriffsrechte

Mit der Windows-Sicherheit können Sie den Zugriff auf Named Pipes steuern. Weitere Informationen zur Sicherheit finden Sie unter Access-Control Model.

Sie können einen Sicherheitsdeskriptor für eine Named Pipe angeben, wenn Sie die CreateNamedPipe-Funktion aufrufen. Der Sicherheitsdeskriptor steuert den Zugriff auf client- und serverseitige Enden der Named Pipe. Wenn Sie NULL angeben, ruft die Named Pipe einen Standardsicherheitsdeskriptor ab. Die ACLs im Standardsicherheitsdeskriptor für eine Named Pipe gewähren dem LocalSystem-Konto, den Administratoren und dem Erstellerbesitzer vollste Kontrolle. Außerdem gewähren sie Mitgliedern der Gruppe "Jeder" und dem anonymen Konto Lesezugriff.

Um den Sicherheitsdeskriptor einer Named Pipe abzurufen, rufen Sie die GetSecurityInfo-Funktion auf. Um den Sicherheitsdeskriptor einer Named Pipe zu ändern, rufen Sie die SetSecurityInfo-Funktion auf.

Wenn ein Thread CreateNamedPipe aufruft , um ein Handle am Serverende einer vorhandenen Named Pipe zu öffnen, führt das System eine Zugriffsüberprüfung durch, bevor das Handle zurückgegeben wird. Bei der Zugriffsüberprüfung werden das Zugriffstoken des Threads und die angeforderten Zugriffsrechte mit der DACL im Sicherheitsdeskriptor der benannten Pipe verglichen. Zusätzlich zu den angeforderten Zugriffsrechten muss die DACL dem aufrufenden Thread FILE_CREATE_PIPE_INSTANCE Zugriff auf die Named Pipe erlauben.

Wenn ein Client die CreateFile - oder CallNamedPipe-Funktion aufruft , um eine Verbindung mit dem Clientende einer Named Pipe herzustellen, führt das System eine Zugriffsüberprüfung durch, bevor der Zugriff auf den Client gewährt wird.

Das von der CreateNamedPipe-Funktion zurückgegebene Handle verfügt immer über SYNCHRONIZE-Zugriff. Je nach geöffnetem Modus der Pipe verfügt es auch über GENERIC_READ, GENERIC_WRITE oder beides. Im Folgenden sind die Zugriffsrechte für jeden geöffneten Modus aufgeführt.

Geöffneter Modus Zugriffsrechte
PIPE_ACCESS_DUPLEX (0x00000003) FILE_GENERIC_READ, FILE_GENERIC_WRITE und SYNCHRONIZE
PIPE_ACCESS_INBOUND (0x00000001) FILE_GENERIC_READ und SYNCHRONISIEREN
PIPE_ACCESS_OUTBOUND (0x00000002) FILE_GENERIC_WRITE und SYNCHRONISIEREN

 

FILE_GENERIC_READ Zugriff für eine benannte Pipe kombiniert die Rechte zum Lesen von Daten aus der Pipe, zum Lesen von Pipeattributen, zum Lesen erweiterter Attribute und zum Lesen der DACL der Pipe.

FILE_GENERIC_WRITE Zugriff für eine Named Pipe kombiniert die Rechte zum Schreiben von Daten in die Pipe, zum Anfügen von Daten an sie, zum Schreiben von Pipeattributen, zum Schreiben erweiterter Attribute und zum Lesen der DACL der Pipe. Da FILE_APPEND_DATA und FILE_CREATE_PIPE_INSTANCE dieselbe Definition haben, ermöglicht FILE_GENERIC_WRITE die Berechtigung zum Erstellen der Pipe. Um dieses Problem zu vermeiden, verwenden Sie die individuellen Rechte, anstatt FILE_GENERIC_WRITE zu verwenden.

Sie können das ACCESS_SYSTEM_SECURITY Zugriffsrecht auf ein Named Pipe-Objekt anfordern, wenn Sie die SACL des Objekts lesen oder schreiben möchten. Weitere Informationen finden Sie unter Zugriffssteuerungslisten (Access-Control Lists, ACLs) und SACL-Zugriffsberechtigung.

Um zu verhindern, dass Remotebenutzer oder Benutzer in einer anderen Terminaldienstesitzung auf eine Named Pipe zugreifen, verwenden Sie die Anmelde-SID in der DACL für die Pipe. Die Anmelde-SID wird auch in ausführenden Anmeldungen verwendet. Dies ist die SID, die zum Schutz des Objektnamespace pro Sitzung verwendet wird. Weitere Informationen finden Sie unter Abrufen der Anmelde-SID in C++.