PowerShell을 사용하여 ACL 권한 관리
- PowerShell의 NTFS 권한 유형
-
Get-Acl
명령을 사용하여 PowerShell의 폴더 및 파일에 대한 ACL 가져오기 -
Set-Acl
명령을 사용하여 PowerShell에서 파일 및 폴더에 대한 ACL 설정 -
-RemoveAccessRule
매개변수를 사용하여 PowerShell에서 사용자 권한 제거 - PowerShell에서 권한 상속 비활성화 또는 활성화
-
SetOwner
메서드를 사용하여 PowerShell에서 파일 및 폴더 소유권 변경
시스템 관리자는 최소 권한 모델을 구현하기 위해 NTFS 파일 서버에 액세스 제어 항목 ACE
를 추가하여 NTFS 액세스 제어 목록 ACL
을 구성합니다.
이 문서에서는 다양한 권한 유형과 PowerShell을 사용하여 파일 및 폴더에 대한 ACL을 쿼리, 수정 및 제거하는 방법에 대해 설명합니다.
PowerShell의 NTFS 권한 유형
고급 및 기본 NTFS 권한이 있습니다. 예를 들어, 각 권한을 거부
또는 허용
으로 설정할 수 있습니다.
모든 권한
: 이 권한이 있는 사용자는 파일 및 디렉토리는 물론 관련 속성을 수정, 추가, 이동 및 삭제할 수 있습니다. 또한 이 권한이 있는 사용자는 모든 하위 디렉터리 및 파일에 대한 권한 설정을 변경할 수 있습니다.수정
: 이 권한이 있는 사용자는 디렉토리에 파일 추가 및 삭제, 파일에 파일 속성 추가 및 삭제를 포함하여 파일 및 파일 속성을 보고 수정할 수 있습니다.읽기 및 실행
: 이 권한이 있는 사용자는 스크립트를 포함한 실행 파일을 실행할 수 있습니다.읽기
: 사용자는 이 권한으로 파일, 파일 속성 및 디렉터리를 볼 수 있습니다.쓰기
: 이 권한이 있는 사용자는 파일에 쓰고 디렉터리에 파일을 추가할 수 있습니다.
다음은 고급 권한 목록입니다.
폴더 트래버스
또는파일 실행
: 이 고급 권한이 있는 사용자는 이러한 파일 또는 폴더에 대한 권한이 없더라도 폴더를 탐색하여 다른 폴더 또는 파일에 연결할 수 있습니다. 이 고급 권한이 있는 사용자는 실행 파일을 실행할 수도 있습니다.폴더 트래버스
권한은 사용자 또는 그룹에 그룹 정책 스냅인에서트래버스 검사 우회
권한이 없을 때 적용됩니다.List Folder
또는Read Data
: 이 고급 권한이 있는 사용자는 폴더 내의 파일 및 하위 폴더 목록과 파일 내용을 볼 수 있습니다.속성 읽기
: 이 고급 권한이 있는 사용자는 폴더 또는 파일의 속성(예: 숨김 또는 읽기 전용)을 볼 수 있습니다.속성 쓰기
: 이 고급 권한이 있는 사용자는 파일 또는 폴더의 속성을 변경할 수 있습니다.확장 속성 읽기
: 이 고급 권한이 있는 사용자는 권한, 생성 및 수정 시간과 같은 폴더 또는 파일의 확장 속성을 볼 수 있습니다.확장 속성 쓰기
: 이 고급 권한이 있는 사용자는 폴더 또는 파일의 확장 속성을 변경할 수 있습니다.Create Files
또는Write Data
:Create Files
권한을 통해 사용자는 이 고급 권한으로 폴더 내에서 파일을 생성할 수 있습니다.이 권한은 폴더에만 적용됩니다.
데이터 쓰기
권한을 사용하면 이 고급 권한이 있는 사용자가 파일을 변경하고 기존 콘텐츠를 덮어쓸 수 있습니다. 이 권한은 파일에만 적용됩니다.Create Folders
또는Append Data
:Create Folders
권한을 통해 사용자는 이 고급 권한으로 폴더 내에 폴더를 생성할 수 있습니다.이 권한은 폴더에만 적용됩니다.
데이터 추가
권한을 사용하면 이 고급 권한이 있는 사용자가 파일 끝을 변경할 수 있지만 기존 데이터를 변경, 덮어쓰기 또는 삭제할 수는 없습니다. 이 권한은 파일에만 적용됩니다.삭제
: 이 고급 권한이 있는 사용자는 폴더 또는 파일을 삭제할 수 있습니다. 사용자에게 폴더나 파일에 대한Delete
권한이 없는 경우에도 상위 폴더에 대한Delete Subfolders And Files
권한이 있으면 개체를 삭제할 수 있습니다.읽기 권한
: 이 고급 권한이 있는 사용자는모든 권한
,읽기
및쓰기
와 같은 폴더 또는 파일의 권한을 읽을 수 있습니다.권한 변경
: 이 고급 권한을 가진 사용자는 파일 또는 폴더의 권한을 변경할 수 있습니다.소유권 가져오기
: 이 고급 권한이 있는 사용자는 파일 또는 폴더의 소유권을 가질 수 있습니다. 파일 또는 폴더 소유자는 파일 또는 폴더를 보호하는 기존 권한에 관계없이 항상 권한을 변경할 수 있습니다.동기화
: 이 고급 권한이 있는 사용자는 동기화를 위해 개체를 사용할 수 있습니다. 이 권한은 개체가 신호를 받은 상태가 될 때까지 스레드가 대기할 수 있도록 합니다. 이 권한은 ACL 편집기에 표시되지 않습니다.
아래 PowerShell 스크립트를 실행하여 이러한 사용자 권한에 대한 모든 정보를 찾을 수 있습니다.
[System.Enum]::GetNames([System.Security.AccessControl.FileSystemRights])
NTFS 권한은 명시적이거나 상속될 수 있습니다. 명시적 권한은 개별적으로 구성되지만 상속된 권한은 상위 폴더에서 상속됩니다.
권한 계층은 다음과 같습니다.
- 명시적 거부
- 명시적 허용
- 상속된 거부
- 상속된 허용
Get-Acl
명령을 사용하여 PowerShell의 폴더 및 파일에 대한 ACL 가져오기
파일 및 폴더 권한을 관리하는 데 사용되는 첫 번째 PowerShell 명령은 Get-Acl
입니다. 모든 개체 권한을 나열합니다.
Get-Acl \\fs1\shared\hr | fl
권한을 복사하려면 사용자가 대상 폴더와 소스 폴더를 모두 소유해야 합니다.
Get-Acl \\fs1\shared\hr | Set-Acl \\fs1\shared\hr
Set-Acl
명령을 사용하여 PowerShell에서 파일 및 폴더에 대한 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
-RemoveAccessRule
매개변수를 사용하여 PowerShell에서 사용자 권한 제거
$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
SetOwner
메서드를 사용하여 PowerShell에서 파일 및 폴더 소유권 변경
폴더의 소유자를 설정하려면 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