Как назначить права доступа к каталогу администратору для определенного каталога? - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь назначить разрешения только администраторам и запретить доступ другим пользователям без прав администратора.Ниже приведен код -

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;

. При наличии вышеуказанного кода даже администратор не может получить доступ к папке, но без правила доступа, обозначенного в комментарии как «правило доступа 3», он работает должным образомКто-нибудь может объяснить мне, почему это происходит?

1 Ответ

0 голосов
/ 15 мая 2018

См. Следующую иллюстрацию, чтобы лучше понять, как работает DACL

DACL can allow access to one thread while denying access to another

Windows прекращает проверку записей контроля доступа, когда запрошенный доступ явно предоставлен или запрещен.Порядок ACEs очень важен.Обратите внимание, что если в этом примере порядок ACE был другим, система могла бы предоставить доступ к потоку A.

Некоторые примечания о запрете ACE

В большинстве случаев вы можете контролировать доступк объекту с помощью ACE с разрешенным доступом;вам не нужно явно отказывать в доступе к объекту.Исключение составляют случаи, когда ACE разрешает доступ к группе, и вы хотите отказать в доступе члену группы.Для этого поместите ACE с отказом в доступе для пользователя в DACL перед ACE с разрешенным доступом для группы.Обратите внимание, что порядок ACE важен, потому что система считывает ACE последовательно, пока доступ не будет предоставлен или запрещен.Пользователь, которому отказано в доступе, должен появиться первым;в противном случае, когда система считывает доступ ACE для группы, она предоставляет доступ ограниченному пользователю.

Как работает AccessCheck

КакСистема использует ACL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...