c # - Sådan tildeler du katalogtilladelser til administrator for en bestemt mappe?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger kun at overdrage tilladelser til administratorer og nægte adgang til andre ikke-admin-brugere. Nedenfor er kode-


DirectoryInfo di = new DirectoryInfo(@"C:C00");

DirectorySecurity dirSec = di.GetAccessControl();
dirSec.SetAccessRuleProtection(true, false);

SecurityIdentifier systemSid = new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null);
NTAccount systemAccount = (NTAccount)systemSid.Translate(typeof(NTAccount));

SecurityIdentifier adminSid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
NTAccount adminAccount = (NTAccount)adminSid.Translate(typeof(NTAccount));

SecurityIdentifier userSid = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
NTAccount userAccount = (NTAccount)userSid.Translate(typeof(NTAccount));

//access rule 1
dirSec.AddAccessRule(new FileSystemAccessRule(systemAccount, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
//access rule 2
dirSec.AddAccessRule(new FileSystemAccessRule(adminAccount, FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
//access rule 3
dirSec.AddAccessRule(new FileSystemAccessRule(userAccount, FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Deny));
            di.SetAccessControl(dirSec);
return;


Med ovenstående kode på plads kan selv administratoren ikke få adgang til mappen, men uden adgangsreglen angivet i kommentaren som 'adgangsregel 3' virker det som forventet. Kan nogen gøre det klart for mig, hvorfor dette sker?

Bedste reference


Se følgende illustration for bedre at forstå, hvordan DACL virker


DACL kan tillade adgang til en tråd, mens den nægter adgang til en anden [2]


Windows stopper kontrol af adgangskontrolindgange, når den anmodede adgang udtrykkeligt tildeles eller afvises. Bestilling af ACE'er er meget vigtigt. Bemærk, at hvis ACE-ordren var anderledes i eksemplet, kunne systemet have givet adgang til tråd A.


Nogle bemærkninger om at nægte ACE



  I de fleste tilfælde kan du styre adgangen til et objekt ved at bruge
  adgangstilladede ACE'er Du behøver ikke eksplicit at nægte adgang til en
  objekt. Undtagelsen er, når en ACE giver adgang til en gruppe og dig
  ønsker at nægte adgang til et medlem af gruppen. For at gøre dette skal du placere en
  Access-nægtet ACE til brugeren i DACL forud for adgangstilladelsen
  ACE for gruppen. Bemærk at rækkefølgen af ​​ACE'erne er vigtig
  fordi systemet læser ACE'erne i rækkefølge indtil adgang er givet
  eller nægtet. Brugerens access-nægtede ACE skal først vises, ellers,
  når systemet læser gruppens adgang tilladt ACE, vil det give
  adgang til den begrænsede bruger.



Sådan fungerer AccessCheck [3]


Hvordan systemet anvender ACL'er [4]