Computer >> 컴퓨터 >  >> 체계 >> Windows Server

PowerShell로 NTFS 권한을 어떻게 관리하나요?

Windows에서 파일 또는 폴더에 대한 액세스를 관리하기 위해 NTFS 파일 시스템 개체(파일 또는 폴더)에 특수 ACL(액세스 제어 목록)이 할당됩니다. 개체의 ACL은 사용자 또는 그룹이 파일 시스템 개체로 수행할 수 있는 사용 가능한 작업(권한)을 정의합니다. 대부분의 경우 Windows 관리자는 파일 탐색기 그래픽 인터페이스(파일/폴더 속성 -> 보안 탭) 또는 icacls 콘솔 도구를 사용하여 파일 또는 폴더에 대한 NTFS 권한을 관리합니다. 이 문서에서는 PowerShell cmdlet을 사용하여 NTFS 개체에 대한 권한을 관리하는 방법을 살펴보겠습니다. 스크립트에서 이러한 명령을 사용하거나 Windows 파일 서버 및 워크스테이션에서 NTFS 액세스 권한 관리를 자동화할 수 있습니다.

PowerShell로 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

PowerShell로 NTFS 권한을 어떻게 관리하나요?

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

PowerShell로 NTFS 권한을 어떻게 관리하나요?

한 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

또한 Get-Acl 및 Set-Acl을 사용하여 개체에 대한 NTFS 감사 설정(공유 폴더에서 파일을 제거한 사람 추적 문서 참조) 또는 AD의 현재 OU 위임된 권한에 대해 관리할 수 있습니다.

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

PowerShell로 NTFS 권한을 어떻게 관리하나요?

폴더의 현재 NTFS 권한 나열:
Get-Item 'c:\docs' | Get-NTFSAccess

보시는 바와 같이 현재 권한이 보다 편리한 형태로 표시됩니다.

PowerShell로 NTFS 권한을 어떻게 관리하나요?

특정 폴더에 대한 모든 권한을 사용자 또는 그룹에 부여하려면 다음 명령을 실행하십시오.
Add-NTFSAccess -Path C:\docs -Account 'CORP\RShelby','BUILTIN\Administrators' -AccessRights 'Fullcontrol' -PassThru

도움말 . 기본적으로 NTFSSecurity cmdlet은 데이터를 반환하지 않습니다. -PassThru 사용 명령이 실행된 후 새 ACL을 표시하도록 하는 매개변수입니다.

최상위 폴더 수준에서만 권한을 부여하고 중첩된 개체(폴더만)에 대한 권한을 변경하지 않으려면 다음 명령을 사용하십시오.

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

PowerShell로 NTFS 권한을 어떻게 관리하나요?

파일 시스템 개체에 대한 현재 유효 사용자 권한은 AccessRights 필드.