Windows에서 NTFS 권한을 관리하려면 운영체제에 내장된 iCACLS 도구를 활용할 수 있습니다. icacls.exe 명령줄 도구를 사용하면 NTFS 파일 시스템의 파일과 폴더에 대한 ACL(Access Control List, 액세스 제어 목록)을 조회하거나 변경할 수 있습니다. 이 글에서는 iCACLS를 이용해 Windows에서 NTFS 권한을 효율적으로 관리하는 유용한 명령어들을 소개합니다.
iCACLS로 파일 및 폴더 권한 조회하고 설정하기
NTFS 볼륨에 있는 개체의 현재 액세스 권한은 다음 명령으로 확인할 수 있습니다.
icacls 'C:\Share\Veteran\'

이 명령은 해당 개체에 액세스 권한이 부여된 사용자와 그룹 목록을 반환합니다. 권한은 다음과 같은 약어로 표시됩니다.
- F – 모든 권한(Full access)
- M – 수정 권한(Modify)
- RX – 읽기 및 실행 권한(Read and execute)
- R – 읽기 전용 권한(Read-only)
- W – 쓰기 전용 권한(Write-only)
- D – 삭제 권한(Delete)
상속 관련 플래그는 액세스 권한 앞에 표시되며, 상속 권한은 폴더에만 적용됩니다.
- (OI) – 개체 상속(Object inherit)
- (CI) – 컨테이너 상속(Container inherit)
- (IO) – 상속 전용(Inherit only)
- (I) – 부모 컨테이너로부터 권한 상속
icacls를 사용하면 폴더 권한을 변경할 수 있습니다.
예를 들어 "resource\mun-fs01_Auditors" 그룹에 폴더에 대한 읽기 및 실행(RX) 권한을 부여하려면 다음과 같이 입력합니다.
icacls 'C:\Share\Veteran\' /grant resource\mun-fs01_Auditors:RX

디렉터리 ACL에서 특정 그룹을 제거하려면 다음 명령을 사용합니다.
icacls 'C:\Share\Veteran\' /remove resource\mun-fs01_Auditors
icacls로 부모 폴더로부터의 NTFS 권한 상속을 활성화할 수도 있습니다.
icacls 'C:\Share\Veteran\' /inheritance:e

반대로 상속된 모든 ACE를 제거하면서 상속을 비활성화하려면 다음과 같이 실행합니다.
icacls 'C:\Share\Veteran\' /inheritance:r
또한 icacls.exe를 사용하면 파일이나 폴더의 소유자를 변경할 수 있습니다.
icacls 'C:\Share\Veteran\' /setowner resource\j.smith /T /C /L /Q

폴더 NTFS 권한 백업(내보내기) 방법
NTFS 폴더(또는 공유 네트워크 폴더)의 권한을 대폭 변경하기 전, 예를 들어 폴더 이동, ACL 업데이트, 리소스 마이그레이션 작업을 수행하기 전에는 기존 권한을 백업해 두는 것이 좋습니다. 백업본이 있으면 원래 설정으로 되돌리거나, 특정 파일/디렉터리의 이전 권한을 확인할 수 있습니다.
icacls.exe 도구를 사용하면 현재 NTFS 디렉터리 권한을 내보내거나 가져올 수 있습니다. 특정 폴더(하위 디렉터리 및 파일 포함)의 모든 ACL을 조회하여 텍스트 파일로 내보내려면 다음 명령을 실행합니다.
icacls g:\veteran /save c:\backup\veteran_ntfs_perms.txt /t /c
참고. /t 옵션은 모든 하위 디렉터리와 파일의 ACL을 가져올 때 사용하며, /c는 액세스 오류를 무시하고 계속 진행합니다. /q 옵션을 추가하면 파일 시스템 개체에 성공적으로 액세스했다는 정보 표시를 생략할 수 있습니다.

파일과 폴더의 수에 따라 권한 내보내기에 상당한 시간이 걸릴 수 있습니다. 명령 실행이 완료되면 성공 또는 실패한 파일 처리 통계가 표시됩니다.
Successfully processed 3001 files; Failed processing 0 files

텍스트 편집기로 veteran_ntfs_perms.txt 파일을 열어 보면 디렉터리 내 모든 파일과 폴더의 전체 목록이 포함되어 있으며, 각 항목에는 SDDL(Security Descriptor Definition Language) 형식으로 현재 권한이 기록되어 있는 것을 확인할 수 있습니다.

예를 들어 폴더 루트의 현재 NTFS 권한은 다음과 같습니다.
D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;S-1-5-21-2340243621-32346796122-2349433313-23777994)(A;OICI;0x1301bf;;;S-1-5-21-2340243621-32346796122-2349433313-23777993)(A;OICI;FA;;;SY)(A;OICI;FA;;;S-1-5-21-2340243621-32346796122-2349433313-24109193)S:AI
이 문자열은 특정 그룹이나 사용자의 액세스 권한을 설명합니다. SDDL 구문에 대한 자세한 내용은 여기서 다루지 않겠습니다(SDDL 형식은 "Windows에서 서비스 권한을 조회하고 수정하는 방법" 글에서 간략히 설명한 바 있습니다). 여기서는 하나의 개체만 골라 SDDL의 일부를 살펴보겠습니다.
(A;OICI;FA;;;S-1-5-21-2340243621-32346796122-2349433313-24109193)
A – 액세스 유형(Allow, 허용)
OICI – 상속 플래그(OBJECT INHERIT + CONTAINER INHERIT)
FA – 권한 유형(SDDL_FILE_ALL, 모든 권한 허용)
S-1-5-21-2340243621-32346796122-2349433313-24109193 – 권한이 설정된 계정 또는 도메인 그룹의 SID입니다. SID를 계정 또는 그룹 이름으로 변환하려면 다음 PowerShell 명령을 사용합니다.
$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-21-2340243621-32346796122-2349433313-24109193")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

또는 다음 명령 중 하나를 사용할 수도 있습니다.Get-ADUser -Identity SID
또는Get-ADGroup -Identity SID
이렇게 확인해 보면 corp\dvivar 사용자가 해당 디렉터리에 대한 모든 권한(Full Control)을 가지고 있음을 알 수 있습니다.
iCacls로 NTFS 권한 복원하기
앞서 생성한 veteran_ntfs_perms.txt 파일을 사용하면 폴더의 NTFS 권한을 복원할 수 있습니다. ACL 백업 파일에 저장된 값에 따라 디렉터리 내 개체에 NTFS 권한을 설정하려면 다음 명령을 실행합니다.
icacls g:\ /restore c:\backup\veteran_ntfs_perms.txt /t /c
참고. 파일에서 권한을 가져올 때는 폴더 이름이 아닌 부모 디렉터리 경로를 지정해야 한다는 점에 유의하세요.
모든 권한 복구가 완료되면 처리된 파일 수에 대한 통계도 함께 표시됩니다.

백업 ACL 파일에는 절대 경로가 아닌 상대 파일 경로가 저장됩니다. 따라서 폴더를 다른 드라이브나 디렉터리로 이동한 후에도 권한을 복원할 수 있습니다.
NTFS 권한 기본값으로 초기화하기
icacls 도구를 사용하면 폴더 권한(하위 파일 및 디렉터리 포함)을 기본 상태로 초기화할 수 있습니다.
icacls C:\share\veteran /reset /T /Q /C

이 명령은 지정된 개체에 대해 상속된 NTFS 권한을 활성화하고, 그 외의 모든 ACL을 제거합니다.
한 폴더에서 다른 폴더로 NTFS 권한 복사하기
ACL 백업 텍스트 파일을 활용하면 한 디렉터리의 NTFS 권한을 다른 디렉터리로 복사할 수 있습니다.
먼저 원본 폴더의 NTFS 권한을 백업합니다.
icacls 'C:\Share\Veteran' /save C:\PS\save_ntfs_perms.txt /c
그다음 저장된 ACL을 대상 폴더에 적용합니다.
icacls D:\Share /restore C:\PS\save_ntfs_perms.txt /c
이 방법은 원본 폴더와 대상 폴더의 이름이 동일할 때 정상적으로 작동합니다. 그렇다면 대상 폴더 이름이 다른 경우에는 어떻게 해야 할까요? 예를 들어 D:\PublicDOCS 폴더로 NTFS 권한을 복사해야 한다고 가정해 보겠습니다.
가장 간단한 방법은 메모장에서 save_ntfs_perms.txt 파일을 열어 폴더 이름을 수정하는 것입니다. 바꾸기 기능을 사용하여 Veteran이라는 이름을 PublicDOCS로 일괄 변경합니다.

그런 다음 파일에서 NTFS 권한을 가져와 대상 폴더에 적용합니다.
icacls D:\ /restore C:\PS\save_ntfs_perms.txt /c
PowerShell을 사용하면 한 폴더에서 다른 폴더로 NTFS 권한을 훨씬 더 쉽게 복사할 수 있습니다.
Get-Acl -Path 'C:\Share\Veteran' | Set-Acl -Path 'E:\PublicDOCS'