PowerShell 스크립트로 파일 시스템 ACL을 관리하는 방법
Aug 26, 2025
NTFS 액세스 제어 목록(ACL)은 Windows 파일 시스템에서 최소 권한 원칙에 따른 액세스를 강제하며, PowerShell은 이를 관리하기 위한 효율적인 도구를 제공합니다. 관리자는 Get-Acl을 사용해 권한을 검토하고, Set-Acl을 사용해 권한을 부여하거나 제거할 수 있으며, PurgeAccessRules 또는 SetAccessRuleProtection 같은 방법으로 명시적 항목과 상속을 처리할 수 있습니다. 스크립트는 폴더 소유권도 변경할 수 있습니다. NTFS 권한에 대한 정기적인 감사는 data leakage를 방지하고 insider threat에 대한 방어를 강화하는 데 중요합니다.
Microsoft Windows 환경을 사용하는 많은 조직은 민감한 데이터가 포함된 저장 장치의 주요 파일 시스템으로 NTFS에 의존합니다. 이는 사용자가 파일을 작업하는 데 가장 쉬운 방법입니다. 시스템 보안 모범 사례인 최소 권한 모델을 구현하기 위해 IT 보안 전문가와 시스템 관리자는 NTFS 파일 서버에서 액세스 제어 항목(ACE)을 추가하여 NTFS 액세스 제어 목록(ACL)을 구성합니다.
파일 및 폴더에 대한 NTFS 권한 유형
NTFS 권한은 기본과 고급 두 가지가 있습니다. 각 권한을 “허용” 또는 “거부”로 설정할 수 있습니다. 다음은 기본 권한:
- 전체 제어: 사용자는 파일 및 디렉터리와 해당 관련 속성을 수정, 추가, 이동, 삭제할 수 있습니다. 또한 사용자는 모든 파일과 하위 디렉터리에 대한 권한 설정을 변경할 수 있습니다.
- 수정: 사용자는 디렉터리에 파일을 삭제하거나 추가하고, 파일에 파일 속성을 추가하는 등 파일 및 파일 속성을 보고 수정할 수 있습니다.
- 읽기 및 실행: 사용자는 스크립트를 포함한 실행 파일을 실행할 수 있습니다
- 읽기: 사용자는 파일, 파일 속성 및 디렉터리를 볼 수 있습니다.
- 쓰기: 사용자는 파일에 쓰고 디렉터리에 파일을 추가할 수 있습니다.
다음은 고급 권한 목록입니다:
- 폴더 탐색/파일 실행: 사용자는 이러한 파일이나 폴더에 대한 권한이 없더라도 폴더를 탐색하여 다른 파일 또는 폴더에 도달할 수 있습니다. 또한 사용자는 실행 파일을 실행할 수 있습니다. 폴더 탐색 권한은 그룹 또는 사용자가 Group Policy 스냅인에서 “Bypass Traverse Checking” 권한을 가지고 있지 않은 경우에만 적용됩니다.
- 폴더 나열/데이터 읽기: 사용자는 폴더 내의 파일 및 하위 폴더 목록과 파일의 내용을 볼 수 있습니다.
- 읽기 속성: 사용자는 읽기 전용인지 또는 숨김인지와 같은 파일 또는 폴더의 속성을 확인할 수 있습니다.
- 쓰기 속성: 사용자는 파일 또는 폴더의 속성을 변경할 수 있습니다.
- 확장 속성 읽기: 사용자는 권한 및 생성/수정 시간과 같은 파일 또는 폴더의 확장 속성을 확인할 수 있습니다.
- 확장 속성 쓰기: 사용자는 파일 또는 폴더의 확장 속성을 변경할 수 있습니다.
- 파일 만들기/데이터 쓰기: "Create Files" 권한을 사용하면 사용자는 폴더 내에 파일을 만들 수 있습니다. (이 권한은 폴더에만 적용됩니다.) "Write Data" 권한을 사용하면 사용자는 파일을 변경하고 기존 콘텐츠를 덮어쓸 수 있습니다. (이 권한은 파일에만 적용됩니다.)
- 폴더 만들기/데이터 추가: "폴더 만들기" 권한을 사용하면 사용자가 폴더 안에 폴더를 만들 수 있습니다. (이 권한은 폴더에만 적용됩니다.) "데이터 추가" 권한을 사용하면 사용자가 파일 끝부분에 변경을 가할 수 있지만, 기존 데이터는 변경하거나 삭제하거나 덮어쓸 수는 없습니다. (이 권한은 파일에만 적용됩니다.)
- 삭제: 사용자는 파일 또는 폴더를 삭제할 수 있습니다. (사용자가 파일이나 폴더에 대해 "삭제" 권한이 없다 하더라도, 상위 폴더에서 "하위 폴더 및 파일 삭제" 권한이 있으면 삭제할 수 있습니다.)
- 읽기 권한: 사용자는 "전체 제어", "읽기", "쓰기"와 같은 파일 또는 폴더의 권한을 확인(읽기)할 수 있습니다.
- 권한 변경: 사용자는 파일 또는 폴더의 권한을 변경할 수 있습니다.
- 소유권 가져오기: 사용자는 파일 또는 폴더의 소유권을 가져올 수 있습니다. 파일 또는 폴더의 소유자는 해당 파일 또는 폴더를 보호하는 기존 권한이 무엇이든 관계없이, 항상 그 권한을 변경할 수 있습니다.
- 동기화: 사용자는 동기화를 위해 이 개체를 사용할 수 있습니다. 이로 인해 스레드가 개체가 신호됨 상태에 도달할 때까지 대기할 수 있습니다. 이 권한은 ACL Editor에 표시되지 않습니다. 이에 대해 더 알아보려면 여기를 참고하세요.
다음 PowerShell 스크립트를 실행하면 이러한 사용자 권한을 모두 확인할 수 있습니다:
[system.enum]::getnames([System.Security.AccessControl.FileSystemRights])
NTFS 권한은 명시적 또는 상속일 수 있습니다. 명시적 권한은 개별적으로 구성된 권한이며, 상속 권한은 부모 폴더에서 상속된 권한입니다. 권한의 계층 구조는 다음과 같습니다:
- 명시적 거부
- 명시적 허용
- 상속 거부
- 상속 허용
이제 NTFS 권한이 무엇인지 알았으니, 이를 관리하는 방법을 살펴보겠습니다.
Netwrix Directory Manager로 권한 관리를 간편하게
권한이 있는 사용자만 특정 파일과 폴더에 액세스할 수 있도록 보장
파일 및 폴더의 ACL 가져오기
파일 및 폴더 권한을 관리하는 데 사용되는 첫 번째 PowerShell cmdlet은 “get-acl”이며, 모든 개체 권한을 나열합니다. 예를 들어, 개체 경로 “\fs1sharedsales”:
get-acl \fs1sharedsales | fl
PowerShell로 전체 NTFS 권한 보고서 를 얻고 싶다면, NTFS 권한을 CSV로 내보내기 방법에 대한 이 쉬운 가이드를 따라해 보세요.
파일 및 폴더 권한 복사
권한을 복사하려면 사용자가 소스 폴더와 대상 폴더를 모두 소유해야 합니다. 다음 명령은 “Accounting” 폴더의 권한을 “Sales” 폴더로 복사합니다:
get-acl \fs1sharedaccounting | Set-Acl \fs1sharedsales
권한 복사 전과 후에 “get-acl” 명령의 출력에서 확인할 수 있듯이, “Sales” 공유 폴더 권한이 변경되었습니다.
파일 및 폴더 권한 설정
PowerShell “set-acl” cmdlet은 파일, 폴더 또는 레지스트리 키와 같은 지정된 항목의 보안 설명자(security descriptor)를 변경하는 데 사용됩니다. 즉, 파일 또는 폴더 권한을 수정하는 데 사용됩니다. 다음 스크립트는 사용자 “ENTERPRISET.Simpson”에 대해 폴더 “Sales”에 대한 “FullControl” 권한을 “Allow”로 설정합니다:
$acl = Get-Acl \fs1sharedsales
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISET.Simpson","FullControl","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl \fs1sharedsales
사용자 또는 보안 그룹에 대해 다른 권한을 설정하려면 아래 표에서 선택하세요:
적용할 수 있는 기본 액세스 권한의 권한 집합도 있습니다:
사용자 권한 제거
권한을 제거하려면 “RemoveAccessRule” 파라미터를 사용합니다. “Sales” 폴더에 대해 T.Simpson의 “Allow FullControl” 권한을 삭제해 보겠습니다:
$acl = Get-Acl \fs1sharedsales
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISET.Simpson","FullControl","Allow")
$acl.RemoveAccessRule($AccessRule)
$acl | Set-Acl \fs1sharedsales
T.Simpson에게 여전히 “Deny FullControl” 권한이 있음을 확인하세요. 이를 제거하려면 “PurgeAccessRules” 명령을 사용합니다. 이 명령은 “Sales” 폴더에 대한 T.Simpson의 권한을 완전히 지웁니다:
$acl = Get-Acl \fs1sharedsales
$usersid = New-Object System.Security.Principal.Ntaccount ("ENTERPRISET.Simpson")
$acl.PurgeAccessRules($usersid)
$acl | Set-Acl \fs1sharedsales
“PurgeAccessRules”는 문자열 형태의 사용자 이름에서는 작동하지 않으며, SID에서만 작동합니다. 따라서 문자열인 사용자 계정 이름을 SID로 변환하기 위해 “Ntaccount” 클래스를 사용했습니다. 또한 “PurgeAccessRules”는 명시적 권한에 대해서만 작동하며, 상속된 권한은 제거하지 않는다는 점도 기억하세요.
권한 상속을 비활성화 또는 활성화
상속을 관리하려면 “SetAccessRuleProtection” 메서드를 사용합니다. 이 메서드에는 두 가지 파라미터가 있습니다:
- 첫 번째 매개변수는 상위 폴더에서의 상속을 차단하는 역할을 합니다. 상태는 두 가지이며 “$true”와 “$false”입니다.
- 두 번째 매개변수는 현재 상속된 권한을 유지할지 또는 제거할지 결정합니다. 상태는 동일하게 “$true”와 “$false” 두 가지입니다.
“Sales” 폴더에 대한 상속을 비활성화하고, 상속된 권한도 모두 삭제해 보겠습니다:
$acl = Get-Acl \fs1sharedsales
$acl.SetAccessRuleProtection($true,$false)
$acl | Set-Acl \fs1sharedsales
이제 명시적으로 추가된 권한 1개만 남아 있습니다. (상속된 권한은 모두 제거되었습니다.)
이 변경을 되돌리고 “Sales” 폴더에 대한 상속을 다시 활성화해 보겠습니다:
$acl = Get-Acl \fs1sharedsales
$acl.SetAccessRuleProtection($false,$true)
$acl | Set-Acl \fs1sharedsales
파일 및 폴더 소유권 변경
폴더의 소유자를 설정하려면 “SetOwner” 메서드를 실행해야 합니다. “ENTERPRISEJ.Carter”를 “Sales” 폴더의 소유자로 지정해 보겠습니다:
$acl = Get-Acl \fs1sharedsales
$object = New-Object System.Security.Principal.Ntaccount("ENTERPRISEJ.Carter")
$acl.SetOwner($object)
$acl | Set-Acl \fs1sharedsales
이번에도 “Ntaccount” 클래스를 사용해 사용자 계정 이름을 문자열에서 SID로 변환한 점에 주목하세요.
“SetOwner” 메서드는 원하는 어떤 계정으로든 소유자를 변경할 수 있게 해주지 않습니다. 해당 계정에는 “Take Ownership”, “Read”, “Change Permissions” 권한이 있어야 합니다.
보시다시피 PowerShell로 NTFS 권한을 관리하는 것은 매우 쉽습니다. 하지만 NTFS 권한도 반드시 감사(오딧)해야 합니다. 보안 관점에서 파일 서버에 대해 이루어진 모든 변경 사항을 추적하는 것은 데이터 유출을 줄이고 내부자 위협 및 기타 IT 보안 위험에 대응하는 데 매우 중요합니다. 다음은 PowerShell로 NTFS 권한을 감사하는 방법에 대한 기본 가이드입니다.
초보자를 위한 PowerShell 스크립팅 튜토리얼
자세히 알아보기공유하기
더 알아보기
저자 소개
Jeff Melnick
시스템 엔지니어링 디렉터
Jeff는 Netwrix의 Global Solutions Engineering 분야 전(前) 디렉터입니다. 그는 오랜 기간 Netwrix 블로거이자 연사, 프레젠터로 활동해 왔습니다. Netwrix 블로그에서 Jeff는 시스템 관리 경험을 크게 향상시킬 수 있는 라이프해킹, 팁, 트릭을 공유합니다.