사용자의 폴더 접근 권한 목록 회사를 떠나지 만

도메인에 여러 폴더의 여러 하위 폴더에 액세스 할 수있는 사용자가 있습니다. 그의 권리는 상당히 세분화되었다. 이제 회사를 떠나지 만 계약직 자원으로 회사에서 계속 일할 것입니다.

액세스 권한이있는 모든 폴더를 찾아서 권한을 취소 한 다음 다른 액세스 권한 세트로 설정해야합니다.

주어진 사용자에 대한 모든 NTFS 권한을 나열하는 도구 (프리웨어)가 있습니까? Sysinternals의 AccessEnum으로 시도했지만 사용자 이름으로 목록을 필터링 할 수 없으며 쓸모가 없습니다. CACLS도 살펴 보았지만 사용자가 아닌 파일 순으로 권한을 표시한다고 말할 수 있습니다.

어떤 아이디어?



답변

이 기능은 내장 Windows icacls 명령을 사용하여 C 드라이브에서 “someuser”사용자가 액세스 할 수있는 모든 폴더를 찾기 위해 속임수를 사용하는 것처럼 보입니다.

icacls c:\*. /findsid someuser /t /c /l

디렉토리를 되풀이하도록하려면 / t가 필요합니다. / c는 오류가 발생하더라도 계속 진행하도록 지시하는 데 필요합니다. / l은 심볼릭 링크 (있는 경우)와 함께 작동합니다. (마지막은 L이고,이 플래그는 대문자 또는 소문자 일 수 있습니다.)

*.“디렉토리를 들어, 파일이 아닌 모양”말을 할 수있는 방법으로 DOS 고참으로 인식됩니다. 물론 폴더가 아닌 파일을 찾으려면 파일을로 변경하십시오. *.*물론 파일을 드라이브로 지정하거나 폴더에서 실행하고 드라이브 / 폴더 경로를 제외하고 해당 폴더를 기준으로 검색 할 수 있습니다 폴더 만.

나는 OP와 같은 대답을 찾고이 항목을 찾았지만 다운로드 가능한 도구를 기반으로 한 제안 만 보았습니다. 다른 것과 마찬가지로, 나는이 icacls 도구에서 내장 된 것을 사용하는 것을 선호했습니다.

그리고 Windows Server 2012, 2008 및 Windows 7에서 작동한다는 것을 확인 했으므로 Server 2003, Windows 8 등에서도 잘 작동 할 것으로 생각됩니다.

결과 목록은 다음과 같이 한 줄씩 표시된 폴더입니다.

SID를 찾았습니다 : c : \ somedir \ somesubdir.

트래버스되는 일부 디렉토리에 대한 권한이없는 사용자로이를 실행하면 다음과 같은 결과에 오류가 인터리브됩니다.

c : \ 시스템 볼륨 정보 : 액세스가 거부되었습니다.

그리고 전체 드라이브를 검색하는 경우 수백 개의 이러한 오류가 발생하여 결과를 찾기가 어려울 수 있습니다.

어떤 사람들은 명령 줄을 관리자 권한으로 실행하는 것이 답이라고 생각할 수도 있지만, 이전에는 숨겨져 있던 폴더를 탐색 할 때 훨씬 더 많은 오류가 표시 될 것입니다.

이제 이러한 오류를 숨기고 싶다면 find 명령을 사용하여 오류가 필터링되지 않기 때문에 DO가 성공한 결과 (DO는 “SID found”를 참조하는 결과) 만 파이프 할 수 없습니다. 파이프를 통해 find 명령으로 이동하십시오. 대신 모든 오류를 제거하려면을 사용하여 오류 스트림 (stderr)을 “비트 버킷”으로 리디렉션하는 다소 모호한 트릭을 사용해야합니다 2>nul:. 따라서 위의 예는 다음과 같습니다.

icacls c:\*. /findsid someuser /t /c /l 2>nul:

이러한 오류를 생성 한 일부 폴더 (현재 오류가 숨겨져 있음)는 명명 된 “someuser”가 액세스 할 수 있지만 사용자가 액세스 할 수없는 폴더 일 수도 있습니다. 따라서 단순히 이러한 오류를 무시하는 것에 대해 두 번 생각할 수 있습니다. 하지만 원한다면 그렇게 할 수 있습니다.

그 가능성은 잠재적 으로이 답변의 가치를 제한한다고 생각합니다. 사물에 더 익숙한 사람이 내 대답을 확장하거나 수정하고 싶다면 환영합니다.


답변

다른 것을 다운로드하지 않고도 PowerShell을 사용할 수 있습니다. 이것은 v2.0 이상에서 작동합니다 :

$ReferenceAccountName = 'DOMAIN\Username'
[string[]]$SearchDirectories = @('X:\SomeDirectory', 'F:\AnotherDirectory')

foreach ($RootDir in $SearchDirectories) {
    $DirACL = Get-Acl -Path $RootDir
    foreach ($ACL in $DirACL.Access){
        if ($ACL.IdentityReference -like $ReferenceAccountName){
            Write-Output $RootDir
        }
    }
    foreach ($Directory in (Get-ChildItem -Path $RootDir -Recurse | `
                            Where-Object -FilterScript {$_.Attributes `
                            -contains 'Directory'})){
        $DirACL = Get-Acl -Path $Directory.FullName
        foreach ($ACL in $DirACL.Access){
            if ($ACL.IdentityReference -like $ReferenceAccountName){
                Write-Output $Directory.FullName
            }
        }
    }
}

PowerShell v3 이상에서 사용 가능한 것만 큼 깨끗하지는 않지만 작동합니다. 문자열 형식으로 찾은 디렉토리 목록이 출력됩니다.

당신은 쉽게 객체로 출력하고 Write-의 입력 객체를 조작하여 CSV 파일로 내보내기, 찾은 항목을 제거하고 정보로 티켓을 업데이트하는 등 계속 작업을 수행 할 수 있습니다. 출력 호출.


답변

내 자신의 질문에 대한 해결책을 찾았습니다. 나는 매우 간단하고 깨끗하다고 ​​믿습니다. subinacl을 설치하고 명령 프롬프트에서 한 줄만 실행하면됩니다.

subinacl은 여기에서 다운로드 할 수 있습니다 . 공식적으로 Windows 2000, Windows XP 및 Windows Server 2003에서만 지원되지만 Windows Vista, Windows Server 2008 및 Windows 7에서도 작동합니다.

다음으로 명령 프롬프트에서 다음을 실행합니다.

subinacl /testmode /noverbose /outputlog=c:\TEXTFILENAME.TXT /subdirectories=directoriesonly X:\*.* /findsid=DOMAIN\username

여기서 X : 는 검색중인 드라이브이고 username 은 권한을 나열하려는 사용자입니다. 스캔하는 데 시간이 걸리고 TEXTFILENAME.TXT에 결과가 표시됩니다.

스위치 / noverbose 를 사용하면 간단한 액세스 권한 목록이 나타납니다. 기본적으로 사용자가 액세스 할 수있는 디렉토리 (액세스 마스크 및 기타 편리한 항목이 있음)가 표시됩니다.

OpenOffice Calc 를 사용 하여 목록을 가져온 다음 사용자 정의 필터를 적용하고 + FILE로 시작하는 행에 대해서만 필터링했습니다 . 이 행에는 사용자가 액세스 할 수있는 디렉토리가 있습니다. 간단한 도구를 사용하면 관련 정보 만 얻을 수 있습니다.

상속은 종종 상위 디렉토리에서 활성화되므로 권한을 조정하기 위해 방문해야 할 실제 디렉토리 수는 일반적으로 목록 자체보다 상당히 낮습니다.


답변