CommonAppDatapath 디렉토리에서 C#에서 ACL PERM을 수정할 수 없습니다.

StackOverflow https://stackoverflow.com/questions/1440149

  •  10-07-2019
  •  | 
  •  

문제

따라서 내장형 사용자 그룹에 대한 권한을 수정하여 최소한 파일 시스템 수정에 올바르게 액세스 할 수 있도록 노력하고 있습니다. 불행히도, 아래 코드를 사용하려는 시도는 변경되지 않은 ACL을 생성합니다.

            SecurityIdentifier usersSecurityIdentifier = ntAccount.Translate(typeof(SecurityIdentifier)) as SecurityIdentifier;
            DirectorySecurity directorySecurity = Directory.GetAccessControl(source.FullName);
            FileSystemAccessRule accessRule 
                = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, AccessControlType.Allow);

            directorySecurity.ModifyAccessRule(AccessControlModification.Add,
                accessRule,
                out modified);

            Console.WriteLine(modified);

모든 경우에 수정 된 보고서는 사실이지만 폴더 속성에서 볼 때 PERM이 업데이트되지 않습니다.

또한 유사한 코드를 사용하는 디렉토리의 ACL이없고 수정 대신 AddAccessRule에 대한 ACL이 없었던 SecurityIdentifier에 대한 액세스 규칙을 추가하려고 시도했습니다. 새로운 SecurityIntifier가 디렉토리의 PERMS 목록에 나타 났지만 내가 지정한 액세스 권한이 없었습니다.

환경에서 독점 디렉토리에 대한 액세스를 수정하려고합니다. 또한 ACL을 관리자로 수정하려고합니다.

누구든지 위의 코드에 무엇이 잘못되었는지 또는 기본 .NET 클래스를 사용하여 ACL을 설정하는 올바른 방법으로 이어질 수있는 리소스가 있습니까?

도움이 되었습니까?

해결책

나는 Microsoft에서 일하는 친구의 도움으로 이것을 알아 냈습니다. 실제로 ACL을 설정하는 데 사용했던 프로세스는 정확했습니다. 결과를 잘못 해석하고있었습니다. 기본적으로 변경을 시도 할 때 관리자로 작동하는 한이 방식으로 디렉토리에서 ACL을 설정하는 데 문제가 없습니다.

폴더에 대한 정확한 권한은 다음과 같이 볼 수 있습니다 (Vista).

  1. 해당 폴더를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오
  2. 보안 탭을 선택하십시오
  3. 고급 클릭
  4. 편집을 클릭하십시오
  5. 권한을 보려는 엔티티를 선택하고 편집을 클릭하십시오.

이것이 내가 놓친 부분입니다. CommonApplicationData Path에는 이미 내장 사용자 엔티티에 대한 권한이 설정되어 있습니다. 그래서 코드를 실행 한 후에는 실제로 두 엔티티로 끝납니다. 한 사람은 Read & Execute를 말하고 다른 하나는 특별한 권한을 말합니다. 특수 권한으로 엔티티를 편집 할 때 실제로 내장 사용자가 디렉토리에 액세스 할 수 있음을 알 수 있습니다.

디렉토리에 액세스 할 수있는 내장 사용자와 모든 어린이 폴더와 객체에 액세스 할 수있는 내장을 찾고있었습니다. 다음은 내가 사용한 것의 코드 스 니펫입니다. 테스트 하네스와 수동으로 파일 및 디렉토리 ACL 목록을 통해 코드가 작동했는지 확인할 수있었습니다.

DirectorySecurity directorySecurity = Directory.GetAccessControl(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
FileSystemAccessRule accessRule
    = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, 
        InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, 
        PropagationFlags.None, 
        AccessControlType.Allow);

bool modified=false;
directorySecurity.ModifyAccessRule(AccessControlModification.Add,
    accessRule,
    out modified);

if (modified)
{
    source.Create(directorySecurity);
}
else
{
    source.Create();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top