당신이 IT 전문가이고 조직의 파일 시스템 권한 설정에 어려움을 겪는다면 운이 좋습니다. 많은 사용자 또는 그룹과 작업할 때 특히 GUI를 사용하여 NTFS 권한을 관리하는 것은 시간이 많이 소요됩니다. 다행히도 PowerShell을 통해 모든 것을 더 좋게 만들 수 있습니다. 어떻게냐면 Microsoft.PowerShell.Security 모듈을 이용하면 됩니다.
PowerShell에는 ACL(Access Control List) 작업을 위한 두 개의 cmdlet인 Get-ACL
및 Set-ACL
이 있습니다. 이 두 개의 cmdlet은 이 튜토리얼에서 자세히 알아볼 NTFS 권한을 검색하고 할당할 수 있습니다. NTFS 권한을 효율적으로 관리하고 즉시 유용하게 사용하고 싶다면 계속 읽어보세요.
읽을 시간이 없으신가요? 문제 없습니다! TechSnips.io의 Anthony Howell이 제공하는 동영상을 아래에서 시청해보세요:
ManageEngine ADManager Plus를 사용하여 Active Directory, Exchange 및 Microsoft 365을 관리하고 보고하세요. 무료 평가판 다운로드!
사전 준비
이 튜토리얼의 예제를 따라하려면 다음이 필요합니다:
- PowerShell 7 또는 Windows PowerShell 5.1
- A basic understanding of NTFS file and folder permissions
테스트용 파일/폴더 생성하기
이 자습서는 간단한 “실험실” 또는 단일 폴더를 기반으로 구축됩니다. PowerShell에서 NTFS 권한을 작업하는 방법을 처음부터 배우게 될 것입니다. 당신의 일에 추가 작업은 필요하지 않습니다.
- 먼저 관리자로 PowerShell 세션을 열어주세요.
- 파일 시스템의 어딘가에 Share라는 빈 폴더를 만들어주세요. 다음 예제에서는 해당 폴더가 C:\Share에 위치한다고 가정합니다. 이렇게 하면 예제가 짧고 이해하기 쉬워집니다. 아래의 코드를 복사하여 이 디렉토리를 만들 수 있습니다:
3. C:\Share\Assets라는 폴더를 만들어주세요.
4. C:\Share 폴더에 client_list.txt라는 파일을 만들어주세요.
5. C:\Share 폴더에 client_projects.txt라는 파일을 만들어주세요.
6. 다음으로, Share 폴더 경로에 대한 변수를 할당해주세요. 변수를 생성하면 타이핑을 줄이고 경로를 재사용하기 쉬워집니다. C:\Share를 사용한다고 가정하고 다음 코드 예제를 PowerShell 세션에 복사해주세요:
7. Enter 키를 누릅니다. 이제 빈 디렉토리가 생겼고 해당 경로를 변수로 저장했습니다.
Get-Acl로 NTFS 권한 보기
PowerShell은 Get-Acl
cmdlet을 사용하여 빠르게 NTFS 권한을 보는 기능을 제공합니다. 다음 섹션에서는 파일 또는 폴더의 NTFS 권한을 보는 방법을 배우게 될 것입니다.
액세스 제어 목록(ACL)은 액세스 제어 항목(ACE)의 목록입니다. ACL의 각 ACE는 수행자를 식별하고 허용, 거부 또는 감사된 액세스 권한을 지정합니다. 보안 설명자에는 두 가지 유형의 ACL인 DACL과 SACL이 포함될 수 있습니다.
NTFS 권한 표시
전통적으로 ACL을 보려면 C:\Share 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 속성을 선택하고 보안 탭을 클릭한 다음 고급 버튼을 클릭합니다. 아래에서 GUI가 권한을 표시하는 예제를 볼 수 있습니다.

위의 예제에는 일부 권한 항목과 속성이 번호가 매겨져 있습니다. 이 섹션에서 나중에 비교를 위해 자세히 살펴보세요.
이전에 생성한 디렉토리를 사용하여 Get-Acl
을 사용하여 디렉토리의 현재 NTFS 권한을 표시합니다.
이제 다음 스크린샷에서 경로, 소유자 및 액세스 수준 세부 정보를 볼 수 있어야 합니다.

위의 스크린샷에 표시된 Access
속성에는 ACL에 대한 추가 정보가 포함되어 있지만, 위의 FullControl 뒤에 있는 세 개의 점에서 확인할 수 있듯이 화면에서 벗어나는 문제가 있습니다. 이전 명령을 괄호로 둘러싸면 Access
객체 속성을 볼 수 있는 더 좋은 방법이 있습니다. 아래 코드를 실행하여 이 객체에서 Access
속성만 찾으십시오.
위의 명령은
Access
객체를 사용하고-ExpandProperties
매개변수를 사용하여 다음과 같이 표현할 수도 있습니다:Get-Acl -Path $dir | Select-Object -ExpandProperty Access
다음 스크린샷에서 볼 수 있듯이 출력은 개별 Access
속성을 쉽게 볼 수 있도록 줄바꿈되었습니다:

위와 같은 방식으로 액세스 속성을 볼 경우, 많은 접근 제어 엔터티(ACE)가 있는 경우 터미널 출력이 빠르게 화면을 아래로 스크롤할 수 있습니다. 각 엔터티에는 FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritenceFlags 및 PropagationFlags 속성이 포함되어 있습니다. 이를 모두 조금 더 가독성 있게 만들려면 객체를 Format-Table -AutoSize
로 파이프하십시오. 다음 명령을 실행하십시오.
아래 스크린샷에서 볼 수 있듯이 Format-Table -AutoSize
을 사용하면 액세스 속성이 더 깨끗하고 구성되어 표시됩니다:

속성과 열 번호를 조사하십시오. 이는 자습서의 시작 부분에서 GUI에서 본 속성과 동일합니다.

Access 개체 필터링
NTFS 권한을 발견할 때 더 정확하게 원할 때가 있습니다. PowerShell을 사용하여 특정 ACE를 필터링하거나 PowerShell을 사용하여 ACL 내에서 상속 또는 명시적 NTFS 권한을 갖는 특정 결과를 찾을 수 있습니다. 눈으로 한 줄씩 터미널 창을 스크롤하는 대신 필터링을 위해 Where-Object
cmdlet을 사용할 수 있습니다.
아래의 코드 예제는 NTFS 권한을 상속하지 않는 개체를 필터링합니다. 이는 현재 개체를 나타내는 파이프라인의 $_.
멤버 개체 속성인 IsInherited
를 검사하는 -Not
연산자를 사용하는 Where-Object
를 사용하여 수행됩니다:
객체를
Format-Table -AutoSize
로 파이프하는 것을 기억하십시오. 그렇지 않으면 출력이 화면 아래로 스크롤됩니다. 이것을 새로운 습관으로 만드세요. 나중에 감사할 것입니다!
아래의 코드를 사용하여 '사용자명'
을 다른 사용자명으로 바꾸면 특정 결과를 볼 수 있습니다:
아래는 결과가 어떻게 보일 수 있는지 예시입니다:

위의 예시는 IdentityReference
속성이 해당 사용자 또는 보안 그룹에 할당된 권한을 가진 모든 ACE를 보여줍니다.
지금까지 배운 것을 연습해보세요. 시스템에서 다양한 파일과 폴더를 조사해보세요. 이렇게 하면 다양한 문맥에 대한 다양한 보안 기술 서술을 볼 수 있습니다. 이렇게 하면 몸 기억력도 향상됩니다.
더 나아가서 NTFS 권한을 할당해 보겠습니다.
Set-Acl을 사용하여 NTFS 권한 수정하기
이제 NTFS 권한을 볼 수 있으므로 PowerShell을 사용하여 NTFS 권한을 할당하고 수정할 차례입니다. Set-Acl
cmdlet을 사용하면 이를 가능하게 할 수 있습니다. 다음 섹션에서는 이 cmdlet을 Get-Acl
과 함께 사용하여 파일이나 폴더에서 NTFS 권한을 복사, 수정 및 제거하는 방법을 보여줄 것입니다.
NTFS 권한 복사
새 ACL에 사용할 적절한 수준의 NTFS 권한이 있는 파일이나 폴더가 있을 수 있습니다. 다른 파일이나 폴더에서 권한을 복사함으로써 시간을 절약할 수 있습니다.
기존 ACL/ACE를 복사하면 NTFS 권한을 설정할 때 인간의 실수를 줄일 수 있습니다. 단, 복사하는 보안 기술 서술이 처음부터 올바르고 적절한 대상인 것이 전제되어야 합니다. 속담에도 나온 대로 “큰 힘을 지닌 사람에게는 큰 책임이 따른다”는 것을 명심하세요.
다음 스크린샷을 살펴보십시오. 여기서는 C:\Share에 있는 Client_List.txt라는 파일의 ACL을 확인하고 있습니다. 원하는 NTFS 권한 수준으로 올바른 ACL이 있습니다:

이제 다음 스크린샷을 살펴보십시오. 이번에는 C:\Share에 있는 다른 파일인 Client_Projects.txt의 ACL을 확인하고 있습니다. 이 파일에는 원하는 NTFS 권한이 없습니다:

Client_List.txt에서 NTFS 권한을 Client_Projects.txt로 복사해야 합니다. 이를 어떻게 할 수 있을까요? Client_List.txt에서 ACL을 가져와 Set-Acl
cmdlet과 -AclObject
매개변수를 사용하여 권한을 수정합니다. 아래 코드를 실행하면 Client_List.txt의 전체 ACL이 Client_Projects.txt로 복사됩니다:
아래 번호가 매겨진 스크린샷에서 확인할 수 있듯이, Client_Projects.txt 파일은 이제 Client_list.txt와 동일한 보안 설명자를 가지고 있습니다.
- 기존 파일에서 기존 ACL을 가져옵니다.
- 복사된 ACL 개체를 파일이나 폴더에 설정합니다.
- ACL이 파일이나 폴더에 올바르게 복사되었는지 확인합니다.

이제 Client_Projects.txt 파일의 ACL이 Client_List.txt 파일과 동일하며, IdentityReference 열에서 AccessControlType이 Allow로 설정된 것을 확인할 수 있습니다. 동일한 기법을 폴더에 NTFS 권한을 할당하는 데에도 사용할 수 있습니다.
NTFS 권한 추가
마지막 섹션에서는 하나의 파일 객체에서 기존 NTFS 권한을 복사했습니다. 이번에는 처음부터 NTFS 권한을 생성하려고 합니다. 이를 통해 파일이나 폴더에 할당되는 NTFS 권한을 지정할 수 있습니다.
먼저, Set-Acl
에서 사용할 새 객체를 생성하기 위해 일부 변수를 할당합니다. 이렇게 하는 것은 명령을 실행할 때 조금 더 쉽게 만들어 줍니다. 아래 코드는 파일이나 폴더에 할당되는 NTFS 권한이 될 ACE의 속성을 구축합니다:
다음으로, 폴더 Assets
의 초기 ACL을 가져올 하나의 변수를 할당합니다. 그런 다음 AddAccessRule
메서드 멤버 유형을 사용하여 $ACE
변수를 사용하여 액세스 규칙을 추가합니다:
이제 새로 만든 ACE를 C:\Share\Assets
의 ACL에 추가할 준비가 되었습니다. 이제 Set-Acl
을 사용하여 이 새 ACE를 올바른 디렉토리에 적용하세요:
다음으로, 선택한 사용자가 필요한 디렉토리를 볼 수 있는 권한을 갖고 있는지 확인하기 위해 아래 코드를 사용하세요:
NTFS 권한 제거
리소스에서 NTFS 권한을 제거해야 할 때가 올 것입니다.
NTFS 권한을 제거하려면 먼저 파일 또는 폴더의 현재 ACL을 가져와야 합니다. 이 예시에서는 해당 파일이 Client_Projects.txt
인 경우입니다:
이제 제거하려는 특정 ACE를 필터링하세요. 이를 위해 $Acl
멤버 개체를 호출하고 이 결과를 Where-Object
와 일부 연산자에 파이핑합니다:
다음으로, 현재 ACL 보안 설명자를 포함하는 $Acl
변수를 사용하여 RemoveAccessRule
메서드를 호출하고 위에서 만든 ACE 개체를 New-Object
cmdlet을 사용하여 RemoveAccessRule()
메서드에 전달하십시오. 이렇게 하면 해당 항목이 제거됩니다:
여기서 기존 ACL을 수정했으며 아직 변경 사항을 커밋하지 않았음을 기억하는 것이 중요합니다.
이제 이러한 변경 사항을 적용하려면 -Path
와 -AclObject
매개변수를 제공하여 "$dir\Client_Projects.txt"
와 $Acl
의 적절한 값을 사용하여 Set-Acl
cmdlet을 실행하십시오. 아래 명령을 입력한 후 Enter를 누르세요:
ManageEngine ADManager Plus로 Active Directory, Exchange 및 Microsoft 365 관리 및 보고서 작성하세요. 무료 평가판 다운로드!
요약
이 기사에서는 PowerShell을 사용하여 NTFS 권한을 관리하는 방법을 배웠습니다. Get-Acl
과 Set-Acl
이라는 두 가지 cmdlet에 대해 알아보고 NTFS 권한과의 관련성을 배웠습니다.
또한, 위의 cmdlet에서 사용하기 위해 ACL에서 특정 ACE를 대상으로하는 필터 사용 방법도 배웠습니다. 약간의 연습을 통해, 이전보다 더 많은 NTFS 권한 요청을 쉽게 처리할 수 있을 것입니다.