Windows에서 파일 또는 폴더에 대한 액세스를 관리하기 위해 NTFS 파일 시스템 개체(파일 또는 폴더)에 특수 ACL(액세스 제어 목록)이 할당됩니다. 개체의 ACL은 사용자 또는 그룹이 파일 시스템 개체로 수행할 수 있는 사용 가능한 작업(권한)을 정의합니다. 대부분의 경우 Windows 관리자는 파일 탐색기 그래픽 인터페이스(파일/폴더 속성 -> 보안 탭) 또는 icacls 콘솔 도구를 사용하여 파일 또는 폴더에 대한 NTFS 권한을 관리합니다. 이 문서에서는 PowerShell cmdlet을 사용하여 NTFS 개체에 대한 권한을 관리하는 방법을 살펴보겠습니다. 스크립트에서 이러한 명령을 사용하거나 Windows 파일 서버 및 워크스테이션에서 NTFS 액세스 권한 관리를 자동화할 수 있습니다.
Get-Acl 및 Set-Acl:NTFS ACL을 관리하기 위한 내장 PowerShell Cmdlet
PowerShell v5(Windows 10/Windows Server 2016)에는 ACL(Microsoft.PowerShell.Security의 일부)을 관리하기 위한 두 개의 개별 기본 제공 cmdlet이 있습니다. 모듈):
- Get-Acl — NTFS 파일 시스템의 특정 개체에 대한 현재 ACL을 가져올 수 있습니다.
- Set-Acl – 현재 개체 ACL을 추가/변경하는 데 사용됩니다.
이러한 기본 제공 cmdlet은 대부분의 경우 실제 작업에서 NTFS 권한을 관리하기에 충분하지 않기 때문에 자세히 고려하지 않습니다. 몇 가지 일반적인 사용 사례를 살펴보겠습니다.
폴더(파일)의 현재 소유자와 할당된 NTFS 권한 목록을 얻으려면 다음 명령을 실행하십시오.
get-acl C:\docs\ |fl
Path : Microsoft.PowerShell.Core\FileSystem::C:\docs\ Owner : CORP\asmith Group : CORP\Domain Users Access : PC-7L7JAK6\root Allow ReadAndExecute, Synchronize BUILTIN\Administrators Allow FullControl NT AUTHORITY\SYSTEM Allow FullControl BUILTIN\Users Allow ReadAndExecute, Synchronize NT AUTHORITY\Authenticated Users Allow Modify, Synchronize NT AUTHORITY\Authenticated Users Allow -536805376 Audit : Sddl : O:S-1-5-21-2950832418-2342342341-4040681116-234234G:DUD:AI(A;OICI;0x1200a9;;;S-1-5-21-2601781602-2342342341-6543210895-1001)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;SY)(A;OICIID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)보시다시피 현재 권한은 SDDl로도 표시됩니다. string — Windows 서비스 권한 설정 문서에서 이 액세스 설명 형식을 간략하게 살펴보았습니다.
NTFS 권한 목록은 보다 명확한 형식으로만 표시할 수 있습니다.
(get-acl C:\docs\).access
한 NTFS 폴더(개체)에서 현재 NTFS 권한을 복사하여 다른 폴더에 적용할 수 있습니다.
Get-Acl e:\old_docs | Set-Acl C:\docs
Set-ACL을 사용할 때의 주요 문제는 NTFS 권한만 변경해야 하는 경우에도 cmdlet이 항상 리소스 소유자를 변경하려고 한다는 것입니다. 따라서 개체에 대한 권한을 추가하려면 다음과 같은 복잡한 스크립트를 사용해야 합니다.
$path = "c:\docs "
$user = "corp\DSullivan"
$Permiss = "Read, ReadAndExecute, ListDirectory"
$InheritSettings = "Containerinherit, ObjectInherit"
$PropogationSettings = "None"
$RuleType = "Allow"
$acl = Get-Acl $path
$perm = $user, $Permiss, $InheritSettings, $PropogationSettings, $RuleType
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $perm
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path $path
사용자 또는 그룹의 폴더에 액세스하기 위한 NTFS 권한을 제거하려면:$path = "c:\docs"
$acl = Get-Acl $path
$rules = $acl.Access | where IsInherited -eq $false
$targetrule = $rules | where IdentityReference -eq "corp\DSullivan"
$acl.RemoveAccessRule($targetrule)
$acl | Set-Acl -Path $path
PowerShell에서 폴더 상속을 비활성화하려면:
$path = 'C:\docs
$acl = Get-ACL -Path $path
$acl.SetAccessRuleProtection($True, $True) # the first $True shows if the folder is protected, the second $True specifies if the current NTFS permissions have to be copied
Set-Acl -Path $path -AclObject $acl
NTFSSecurity PowerShell 모듈로 파일 권한 관리
이미 말했듯이 파일 시스템 개체를 관리하는 기본 제공 PowerShell cmdlet은 그다지 편리하지 않습니다. Windows에서 파일 및 폴더에 대한 NTFS 권한을 관리하려면 PowerShell 갤러리에서 별도의 모듈인 NTFSSecurity를 사용하는 것이 좋습니다. . Install-Module -Name NTFSSecurity
를 사용하여 최신 버전의 NTFSSecurity 모듈(현재 4.2.6)을 설치할 수 있습니다. 명령을 내리거나 수동으로 다운로드하십시오(링크). 수동으로 설치할 때 C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity
에 모듈 아카이브를 추출하기만 하면 됩니다. (다운로드한 파일의 차단을 해제하는 것을 잊지 마십시오).
PowerShell 세션에 NTFSSecurity 모듈 가져오기:
Import-Module NTFSSecurity
모듈에서 사용 가능한 명령 목록 표시(36개의 cmdlet):
Get-Command -Module NTFSSecurity
폴더의 현재 NTFS 권한 나열:Get-Item 'c:\docs' | Get-NTFSAccess
보시는 바와 같이 현재 권한이 보다 편리한 형태로 표시됩니다.
특정 폴더에 대한 모든 권한을 사용자 또는 그룹에 부여하려면 다음 명령을 실행하십시오.Add-NTFSAccess -Path C:\docs -Account 'CORP\RShelby','BUILTIN\Administrators' -AccessRights 'Fullcontrol' -PassThru
최상위 폴더 수준에서만 권한을 부여하고 중첩된 개체(폴더만)에 대한 권한을 변경하지 않으려면 다음 명령을 사용하십시오.
Add-NTFSAccess c:\docs\public -Account corp\LMurkowski -AccessRights Modify -AppliesTo ThisFolderOnly
할당된 NTFS 권한을 제거하려면:
Remove-NTFSAccess -Path C:\DOCS -Account 'corp\LMurkowski' -AccessRights FullControl -PassThru
다음 명령은 지정된 계정의 폴더에 있는 모든 중첩 개체에 대한 권한을 제거합니다(상속된 권한은 건너뜁니다).
Get-ChildItem -Path C:\docs -Recurse | Get-NTFSAccess -Account 'corp\LMurkowski' -ExcludeInherited |Remove-NTFSAccess -PassThru
다음 명령을 사용하여 폴더에 있는 모든 중첩 개체의 소유자 계정을 관리자 계정으로 만들 수 있습니다.
Get-ChildItem -Path C:\docs -Recurse -Force | Set-NTFSOwner -Account 'Administrator'
폴더 개체에 할당된 모든 권한을 수동으로 지우려면(상속된 권한은 제거되지 않음):
Get-ChildItem -Path C:\docs -Recurse -Force | Clear-NTFSAccess
폴더의 모든 개체에 대해 NTFS 상속을 활성화하려면:
Get-ChildItem -Path C:\docs -Recurse -Force | Enable-NTFSAccessInheritance
상속된 권한을 제외하고 수동으로 할당된 모든 권한을 표시하려면:
dir C:\docs | Get-NTFSAccess –ExcludeInherited
특정 계정에 할당된 권한을 표시할 수 있습니다(유효 권한과 혼동하지 마십시오. 나중에 논의하겠습니다):
dir C:\docs | Get-NTFSAccess -Account woshub\RShelby
PowerShell을 사용하여 NTFS 유효 권한을 보는 방법
유효 NTFS 권한을 볼 수 있습니다. Get-EffectiveAccess
를 사용하여 특정 파일 또는 폴더에 대해 cmdlet. 여러 AD 보안 그룹에 특정 폴더에 대한 액세스 권한을 부여했으며 특정 사용자 계정(또는 SID)이 파일 폴더에 액세스할 수 있는지 알고 싶다고 가정합니다. 사용자 계정이 속한 AD 그룹의 모든 구성원을 나열하지 않고 어떻게 할 수 있습니까? 효과적인 NTFS 권한을 보는 것이 매우 유용한 경우입니다. 예를 들어, 도메인 계정 confroom에 대한 폴더의 모든 중첩된 디렉토리에 대한 유효 권한을 확인해야 합니다. .
Get-ChildItem -Path c:\docs -Recurse -Directory | Get-NTFSEffectiveAccess -Account 'corp\confroom’ | select Account, AccessControlType, AccessRights, FullName
또는 특정 파일에 대한 유효 권한을 볼 수 있습니다.
Get-Item -Path 'C:\docs\annual_report2019.xlsx' | Get-NTFSEffectiveAccess -Account 'corp\confroom' | Format-List
파일 시스템 개체에 대한 현재 유효 사용자 권한은 AccessRights 필드.