PowerShell을 사용하여 ACL 권한 관리하는 방법
- PowerShell의 NTFS 권한 유형
-
PowerShell에서 폴더 및 파일에 대한 ACL을 가져오기 위해
Get-Acl
명령어 사용 -
PowerShell에서 파일 및 폴더에 대한 ACL을 설정하기 위해
Set-Acl
명령어 사용 -
PowerShell에서 사용자 권한을 제거하기 위해
-RemoveAccessRule
매개변수 사용 - PowerShell에서 권한 상속 비활성화 또는 활성화
-
PowerShell에서 파일 및 폴더 소유권 변경을 위해
SetOwner
메서드 사용

시스템 관리자는 최소 권한 모델을 구현하기 위해 NTFS 파일 서버에서 액세스 제어 항목 ACE
를 추가하여 NTFS 액세스 제어 목록 ACL
을 구성합니다.
이 기사에서는 다양한 권한 유형과 PowerShell을 사용하여 파일 및 폴더의 ACL을 쿼리, 수정 및 제거하는 방법을 배웁니다.
PowerShell의 NTFS 권한 유형
NTFS 권한에는 고급 권한과 기본 권한이 모두 있습니다. 예를 들어, 각 권한을 거부
또는 허용
으로 설정할 수 있습니다.
전체 제어
: 이 권한이 있는 사용자는 파일 및 디렉토리를 수정, 추가, 이동 및 삭제할 수 있으며, 그와 관련된 속성도 변경할 수 있습니다. 또한, 이 권한이 있는 사용자는 모든 하위 디렉토리 및 파일에 대한 권한 설정을 변경할 수 있습니다.수정
: 이 권한이 있는 사용자는 파일 및 파일 속성을 보고 수정할 수 있으며, 디렉토리에 파일을 추가하거나 파일 속성을 삭제할 수 있습니다.읽기 및 실행
: 이 권한이 있는 사용자는 실행 파일, 스크립트를 포함하여 실행 가능한 파일을 실행할 수 있습니다.읽기
: 이 권한을 가진 사용자는 파일, 파일 속성 및 디렉토리를 볼 수 있습니다.쓰기
: 이 권한이 있는 사용자는 파일에 쓸 수 있으며 디렉토리에 파일을 추가할 수 있습니다.
다음은 고급 권한 목록입니다:
폴더 탐색
또는파일 실행
: 이 고급 권한이 있는 사용자는 폴더를 탐색하여 다른 폴더나 파일에 도달할 수 있으며, 이러한 파일이나 폴더에 대한 권한이 없어도 가능합니다. 이 고급 권한이 있는 사용자는 또한 실행 가능한 파일을 실행할 수 있습니다.폴더 탐색
권한은 사용자가 그룹 정책 스냅인에서탐색 우회 확인 우선
권한이 없을 때 적용됩니다.폴더 목록
또는데이터 읽기
: 이 고급 권한이 있는 사용자는 폴더 내의 파일 및 하위 폴더 목록과 파일 내용을 볼 수 있습니다.속성 읽기
: 이 고급 권한이 있는 사용자는 파일이나 폴더의 속성, 예를 들어 숨겨져 있는지 또는 읽기 전용인지 여부를 볼 수 있습니다.속성 쓰기
: 이 고급 권한이 있는 사용자는 파일이나 폴더의 속성을 변경할 수 있습니다.확장 속성 읽기
: 이 고급 권한이 있는 사용자는 파일이나 폴더의 확장 속성, 예를 들어 권한 및 생성 및 수정 시간을 볼 수 있습니다.확장 속성 쓰기
: 이 고급 권한이 있는 사용자는 파일이나 폴더의 확장 속성을 변경할 수 있습니다.파일 생성
또는데이터 쓰기
:파일 생성
권한은 사용자가 이 고급 권한을 가진 폴더 내에서 파일을 생성할 수 있게 합니다.이 권한은 폴더에만 적용됩니다.
데이터 쓰기
권한은 이 고급 권한이 있는 사용자가 파일을 변경하고 기존 내용을 덮어 쓸 수 있게 합니다. 이 권한은 파일에만 적용됩니다.폴더 생성
또는데이터 추가
:폴더 생성
권한은 사용자가 이 고급 권한을 가진 폴더 내에서 폴더를 생성할 수 있게 합니다.이 권한은 폴더에만 적용됩니다.
데이터 추가
권한은 이 고급 권한이 있는 사용자가 파일 끝에 변경할 수 있게 하지만 기존 데이터를 변경, 덮어쓰거나 삭제할 수는 없습니다. 이 권한은 파일에만 적용됩니다.삭제
: 이 고급 권한이 있는 사용자는 폴더나 파일을 삭제할 수 있습니다. 사용자가 폴더나 파일에서삭제
권한이 없는 경우, 부모 폴더에서하위 폴더 및 파일 삭제
권한이 있는 경우에도 객체를 삭제할 수 있습니다.권한 읽기
: 이 고급 권한이 있는 사용자는 폴더나 파일의 권한, 예를 들어전체 제어
,읽기
,쓰기
를 읽을 수 있습니다.권한 변경
: 이 고급 권한이 있는 사용자는 파일이나 폴더의 권한을 변경할 수 있습니다.소유권 가져오기
: 이 고급 권한이 있는 사용자는 파일이나 폴더의 소유권을 가져올 수 있습니다. 파일이나 폴더의 소유자는 항상 권한을 변경할 수 있으며, 파일이나 폴더를 보호하는 기존 권한과 관계없이 가능합니다.동기화
: 이 고급 권한이 있는 사용자는 객체를 동기화하는 데 사용할 수 있습니다. 이 권한은 스레드가 객체가 신호 상태에 들어갈 때까지 기다리게 합니다. 이 권한은 ACL 편집기에서 제공되지 않습니다.
다음 PowerShell 스크립트를 실행하여 이러한 사용자 권한에 대한 모든 정보를 찾을 수 있습니다:
[System.Enum]::GetNames([System.Security.AccessControl.FileSystemRights])
NTFS 권한은 명시적이거나 상속받을 수 있습니다. 명시적 권한은 개별적으로 구성되며, 상속받은 권한은 상위 폴더에서 상속됩니다.
권한의 계층 구조는 다음과 같습니다:
- 명시적 거부
- 명시적 허용
- 상속 거부
- 상속 허용
PowerShell에서 폴더 및 파일에 대한 ACL을 가져오기 위해 Get-Acl
명령어 사용
파일 및 폴더 권한을 관리하기 위해 사용되는 첫 번째 PowerShell 명령어는 Get-Acl
입니다. 이는 모든 객체 권한을 나열합니다.
Get-Acl \\fs1\shared\hr | fl
사용자는 권한을 복사하기 위해 대상 및 원본 폴더를 모두 소유해야 합니다.
Get-Acl \\fs1\shared\hr | Set-Acl \\fs1\shared\hr
PowerShell에서 파일 및 폴더에 대한 ACL을 설정하기 위해 Set-Acl
명령어 사용
PowerShell Set-Acl
명령어는 파일, 폴더 또는 레지스트리 키와 같은 지정된 항목의 보안 설명자를 변경하는 데 사용됩니다. 즉, 파일이나 폴더 권한을 수정하는 데 사용됩니다.
$acl = Get-Acl \\fs1\shared\hr
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\User01", "FullControl", "Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl \\fs1\shared\hr
PowerShell에서 사용자 권한을 제거하기 위해 -RemoveAccessRule
매개변수 사용
$acl = Get-Acl \\fs1\shared\hr
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\User01", "FullControl", "Allow")
$acl.RemoveAccessRule($AccessRule)
$acl | Set-Acl \\fs1\shared\hr
PowerShell에서 권한 상속 비활성화 또는 활성화
상속을 관리하기 위해 SetAccessRuleProtection
메서드를 사용할 수 있습니다. 이 메서드는 두 개의 매개변수가 있습니다:
- 첫 번째 매개변수는 상위 폴더에서의 상속을 차단하는 역할을 합니다. 불리언 상태인
$true
및$false
를 반환합니다. - 두 번째 매개변수는 현재 상속된 권한이 제거될지 유지될지를 결정합니다. 또한 불리언 상태인
$true
및$false
를 반환합니다.
$acl = Get-Acl \\fs1\shared\hr
$acl.SetAccessRuleProtection($true, $false)
$acl | Set-Acl \\fs1\shared\hr
이번 변경을 되돌리고 폴더에 대한 상속을 다시 활성화해 보겠습니다:
$acl = Get-Acl \\fs1\shared\hr
$acl.SetAccessRuleProtection($false, $true)
$acl | Set-Acl \\fs1\shared\hr
PowerShell에서 파일 및 폴더 소유권 변경을 위해 SetOwner
메서드 사용
폴더의 소유자를 설정하려면 SetOwner
메서드를 실행해야 합니다.
$acl = Get-Acl \\fs1\shared\hr
$object = New-Object System.Security.Principal.Ntaccount("ENTERPRISE\User01")
$acl.SetOwner($object)
$acl | Set-Acl \\fs1\shared\hr
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn