2013-04-08 11 views
9

Szukałem wdrożenia nazwanego potoku dla komunikacji usługa/klient w .NET i natknąłem się na this code, który inicjując po stronie serwera rury musiał ustawić deskryptor bezpieczeństwa dla potoku. Zrobili to w ten sposób:Lokalizacja dla tożsamości bezpieczeństwa w .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)); 

Ale ja patrzę na nią i jestem zaniepokojony określając SID jako ciągi lub Authenticated Users i Administrators części. Jaka jest gwarancja, że ​​zostaną nazwani tak, na przykład w języku chińskim lub w jakimś innym języku?

+0

OK. Potwierdziłem to sam. Wydaje się działać. – ahmd0

+5

Powinieneś rozważyć podzielenie tego na odpowiednią parę pytań/odpowiedzi. – slugster

+0

Tak, możesz odpowiedzieć na własne pytanie. – DWright

Odpowiedz

0

(wyciąg z pierwotnego pytania OP)

wymyśliłem tej alternatywy:

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

To nie działa dla mnie, nie ma przeciążenia, które pobiera ciąg i "SecurityIdentifier", [patrz tutaj] (https://msdn.microsoft.com/en-us/library/system.io.pipes. pipeaccessrule.pipeaccessrule (v = vs.110) .aspx). Usuń literały ciągów '" Użytkownicy uwierzytelnieni "' i '" Administratorzy "'. – doug65536

2

Można użyć WellKnownSidType enum dostać Sid i przekładają się IdentityReference:

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

"Wszyscy" nie jest świetnym pomysłem. Prawdopodobnie chcesz przynajmniej "WellKnownSidType.AuthenticatedUserSid". Czy istnieje szczególny powód, dla którego używasz 'WorldSid' (Wszyscy) innego niż paranoja, że ​​może nie działać? – doug65536

+0

Dokładnie! Zmieniono. –

+1

Każdy jest dobrym pomysłem, gdy napotykasz nieznane problemy z bezpieczeństwem, dzięki niemu możesz przejść test poprawności, aby upewnić się, że działa kod, po którym możesz zawęzić poziom bezpieczeństwa. – TheLegendaryCopyCoder

Powiązane problemy