2013-04-08 14 views
9

Ich war auf der Suche eine Named Pipe für Service/Client-Kommunikation in .NET und kam über this code zu implementieren, die, während der Initialisierung Serverseite des Rohres eine Sicherheitsbeschreibung für das Rohr einzurichten hatte. Sie taten es auf diese Weise:Lokalisierung für Sicherheitsidentität in .NET

PipeSecurity pipeSecurity = new PipeSecurity(); 

// Allow Everyone read and write access to the pipe. 
pipeSecurity.SetAccessRule(new PipeAccessRule("Authenticated Users", 
    PipeAccessRights.ReadWrite, AccessControlType.Allow)); 

// Allow the Administrators group full access to the pipe. 
pipeSecurity.SetAccessRule(new PipeAccessRule("Administrators", 
    PipeAccessRights.FullControl, AccessControlType.Allow)); 

Aber ich es bin auf der Suche, und ich mache mir Sorgen um SIDs als Strings oder Authenticated Users und Administrators Teile angeben. Was ist die Garantie, dass sie etwa in Chinesisch oder einer anderen Sprache genannt werden?

+0

OK. Ich habe es selbst bestätigt. Es scheint zu funktionieren. – ahmd0

+5

Sie sollten in Betracht ziehen, dies in ein richtiges Frage/Antwort-Paar aufzuteilen. – slugster

+0

Ja, Sie dürfen Ihre eigene Frage beantworten. – DWright

Antwort

0

(Extrahiert aus ursprünglichen Frage des OP)

kam ich mit dieser Alternative auf:

PipeSecurity pipeSecurity = new PipeSecurity(); 

// Allow Everyone read and write access to the pipe. 
pipeSecurity.SetAccessRule(new PipeAccessRule(
    "Authenticated Users", 
    new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null), 
    PipeAccessRights.ReadWrite, AccessControlType.Allow)); 

// Allow the Administrators group full access to the pipe. 
pipeSecurity.SetAccessRule(new PipeAccessRule(
    "Administrators", 
    new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null), 
    PipeAccessRights.FullControl, AccessControlType.Allow)); 
+0

Das funktioniert nicht für mich, es gibt keine Überladung, die den String und die 'SecurityIdentifier', [siehe hier] (https://msdn.microsoft.com/en-us/library/system.io.pipes. pipeaccessrule.pipeaccessrule (v = vs.110) .aspx). Entfernen Sie die Zeichenfolgenliterale "Authentifizierte Benutzer" und "Administratoren". – doug65536

2

Sie können WellKnownSidType Enum sid zu erhalten und übersetzen in Identity:

 var sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); 
     var everyone = sid.Translate(typeof(NTAccount)); 
     security.AddAccessRule(new PipeAccessRule(everyone, PipeAccessRights.ReadWrite, AccessControlType.Allow)); 
+1

"Jeder" ist keine großartige Idee. Sie möchten wahrscheinlich mindestens 'WellKnownSidType.AuthenticatedUserSid'. Gibt es einen besonderen Grund, warum du 'WorldSid' (Everyone) außer Paranoia verwendest, dass es nicht funktioniert? – doug65536

+0

Genau! Geändert. –

+1

Jeder ist eine gute Idee, wenn Sie auf unbekannte Sicherheitsprobleme stoßen, die Verwendung ermöglicht es Ihnen, einen Plausibilitätstest zu bestehen, um sicherzustellen, dass Code funktioniert, nach dem Sie eingrenzen können, welche Sicherheitsstufe wirklich benötigt wird. – TheLegendaryCopyCoder