2010-06-07 2 views
1

보안 디렉토리에 액세스해야하는 winforms 앱이 있습니다. 나는 가장을 사용하고 WindowsIdentity를 만들어 폴더에 액세스합니다.사용자를 허용하고 모두 거부하도록 디렉토리 보안 설정

제 문제는 디렉토리 보안을 테스트하기위한 단위 테스트를 작성하는 것입니다. 한 사용자에게만 보안 디렉토리를 생성하는 코드를 작성하고 싶습니다. 현재 UT를 실행중인 사용자가 아닙니다. 그렇지 않으면 테스트가 쓸모 없게됩니다.

특정 사용자에게 권한을 추가하는 방법을 알고 있지만 관리자를 포함하여 나머지는 어떻게 거부 할 수 있습니까? (UT를 실행하는 사용자가 관리자 인 경우)

DirectoryInfo directoryInfo = new DirectoryInfo(path); 
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl(); 

directorySecurity.AddAccessRule(new FileSystemAccessRule("Domain\SecuredUser", 
        FileSystemRights.FullControl, 
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
        PropagationFlags.InheritOnly,       
        AccessControlType.Allow)); 

directorySecurity.RemoveAccessRule(new FileSystemAccessRule("??", 
        FileSystemRights.FullControl, 
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
        PropagationFlags.InheritOnly, 
        AccessControlType.Deny)); 

directoryInfo.SetAccessControl(directorySecurity); 

이것은 작동하지 않습니다. 나는 누가 내가 부인했는지 모른다. Domain \ Admins, Domain \ Administrators, me ... 아무도 거부되고 폴더 보안을 검사 할 때 - SecuredUser는 폴더에 대한 액세스 권한이 있지만 FullControl을 지정한 경우에도 사용 권한을 확인하지 않습니다. > 실행 UT를 - ->로 가장 -> 액세스로 가장 :

<authorization> 
<allow users ="Domain\User" /> 
<deny users="*" /> 
</authorization> 

나는 아무 권한이 약한 사용자와 UT의 실행을 사칭에 대해 생각했지만,이 초래 :

는 기본적으로 난이 원하는 코드를 폴더, 그리고 이것이 올바른 디자인인지 확실하지 않습니다.

도움을 주시면 대단히 감사하겠습니다. 감사합니다.

+0

나는 ASP에 대해 모르지만 단지 perms 폴더에 댓글을 달았습니다 ... 당신이 읽기/쓰기를 위해 폴더/파일에 접근하고 싶다면 폴더 사용 권한이 있습니다. 파일을 제공하는 것과 아무런 관련이 없습니다. 프레임 워크는 요청을 승인하는 프로세스를 처리하지만이 프로세스와 관련된 모든 구성 요소가 확실하지 않습니다. –

+0

@Brian, '파일 전송'과 관련이 없습니다. 나는 네가 의미하는 바를 잘 모르겠다. – Rita

+0

사용자가 http://www.mysite.com/myfile.aspx로 이동할 수있는 액세스는 Windows 보안 응용 프로그램의 경우에도 디렉터리 사용 권한을 조사하지 않습니다. –

답변

1

나는 방금 http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.setaccesscontrol%28v=VS.100%29.aspx에서 msdn 샘플 코드를 테스트했으며 같은 문제가 발생합니다. 샘플 프로그램을 단계별로 디버깅 할 때 추가 된 액세스 권한은 프로그램에 지정된 "readdata"대신 "특수 권한"입니다.
업데이트 : Windows 7의 경우 파일 -> 속성 -> 보안 -> 고급 -> 유효 사용 권한에서 사용 권한이 보급 된대로 표시됩니다. "특수 권한"에 대한 틱은 실제로 오도 된 것입니다.
Update2 : 5 개의 인수로 구성된 생성자를 사용하고 플래그를 "InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit"및 "PropagationFlags.InheritOnly"로 설정하면 액세스가 보안 탭에 정확하게 추가 된 것처럼 표시됩니다. 보안 탭에있는 액세스 목록의 긴 목록은 각 하위 디렉터리에서 권한이 상속되고 전파되는 경우에만 체크 된 것으로 보입니다.

+0

안녕하세요, apoorv020, 답장을 보내 주셔서 감사합니다. 그것은 나를 위해 작동하지 않는 것 같습니다. 나는 또한 창 7을 운영하고있다. 그렇다. 고급 보안 탭에는 아무 것도 없다. 그러나 이것은 나를 덜 귀찮게합니다 - 정말 귀찮은 것은이 폴더에 대한 사용 권한을 다른 사용자에게 취소 할 수 없다는 것입니다. 나는 내가 빠진 것을 이해하지 못한다. – Rita

+0

플래그 문제를 해결해 주셔서 감사합니다. 변경 사항에 대한 질문을 편집했습니다. – Rita

2

나는 이것에 대해 확실하지 않지만, 거부는 허용보다 우선한다고 생각합니다. 따라서 "Everyone"그룹을 사용하여 모든 사람에게 권한을 거부하려고 시도하면 액세스 권한을 부여하려고 시도한 특수 사용자에게 권한을 무시합니다.
기존 액세스 권한을 모두 제거한 다음 특수 사용자 액세스를 허용하는 단일 규칙을 추가하는 것이 효과적 일 수 있습니다.

0

"{domainName} \ Domain Users"계정 그룹을 고려해 보셨습니까? 이 그룹에 대한 액세스를 거부하면 지정된 도메인의 모든 사용자에 대한 액세스를 거부해야합니다.