[c#] 프로그래밍 방식으로 비표준 ACL을 어떻게 수정합니까?


Answers

Question

다음 코드가 있습니다.

DirectoryInfo directory = new DirectoryInfo(@"C:\Program Files\Company\Product");
if (!directory.Exists) { directory.Create(); }

DirectorySecurity directorySecurity = directory.GetAccessControl();
SecurityIdentifier securityIdentifier = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
directorySecurity.AddAccessRule(
    new FileSystemAccessRule(
        securityIdentifier,
        FileSystemRights.Write,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None,
        AccessControlType.Allow));
directory.SetAccessControl(directorySecurity);

AddAccessRule에 대한 호출은 다음 스택 추적과 함께 InvalidOperationException 을 발생시킵니다.

System.InvalidOperationException: This access control list is not in canonical form and therefore cannot be modified.
   at System.Security.AccessControl.CommonAcl.ThrowIfNotCanonical()
   at System.Security.AccessControl.CommonAcl.AddQualifiedAce(SecurityIdentifier sid, AceQualifier qualifier, Int32 accessMask, AceFlags flags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
   at System.Security.AccessControl.DiscretionaryAcl.AddAccess(AccessControlType accessType, SecurityIdentifier sid, Int32 accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
   at System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(AccessControlModification modification, AccessRule rule, Boolean& modified)
   at System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(AccessRule rule)
   at System.Security.AccessControl.FileSystemSecurity.AddAccessRule(FileSystemAccessRule rule)

이것은 일부 시스템에서만 발생합니다 (필자는 Windows XP 및 Windows 7을 보았습니다). 오류가 발생하는 상황에서 Windows 탐색기를 사용하여 디렉터리에 대한 보안 사용 권한을 확인하면 대개 다음 텍스트와 함께 메시지 상자가 표시됩니다.

에 대한 권한이 잘못 주문되어 일부 항목이 비효율적 일 수 있습니다. 확인을 계속하여 사용 권한을 올바르게 정렬하거나 사용 권한을 다시 설정하려면 취소를 누릅니다.

이 시점에서 확인을 클릭하면 문제가 해결됩니다. 무슨 일 이니? 어떻게 시스템이이 상태에 빠지며 프로그래밍 방식으로 감지 / 수정 할 수있는 방법이 있습니까? (즉, 사용자가 Explorer를 수동으로 사용하여이 문제를 해결하지 않아도 됨)?

최신 정보

나는 ACL에 대한 좀 더 많은 조사, 정식 양식이 무엇인지, 왜 그것이 필요한지에 대해 연구 했다 . 나는 아직도 파일이 어떻게이 상태에있게 될지 잘 모르겠다.하지만 Icacls 도구는 권한 목록을 저장하고 비표준 ACL을 사용하여 디렉토리를 생성하는 데 사용할 수 있으며, 순서를 정하고 그것을 복원하십시오. 이제는 사용자 상호 작용을 요구하지 않고 문제를 해결할 수있는 방법이 필요합니다.




Links