如何使用ICACLS备份和恢复NTFS权限

时间:2020-01-09 10:46:29  来源:igfitidea点击:

管理文件服务器文件夹上的NTFS权限可能会很烦人。当强制更改较低级别文件和目录的单个权限时,对目录的顶层(根)级别的更改不准确可能会导致意外结果。在对NTFS文件夹(共享文件夹)进行重大权限更改(移动、ACL更新、资源迁移)之前,建议备份以前的权限,这些权限将允许我们返回原始设置,或者至少查看以前对特定文件或者文件夹的访问权限。

要导出/导入当前NTFS目录权限,可以使用内置实用程序icacls。此工具允许获取和更改文件系统对象的访问控制列表(ACL)。

要获取特定文件夹(包括其子文件夹和文件)的所有ACL并将其保存为纯文本,请运行以下命令:

icacls g:\veteran /save veteran_ntfs_perms.txt /t /c

默认情况下,包含访问权限的文件保存到当前用户文件夹中。

注意。[/t]键用于获取所有子目录和文件的ACL,[/c]允许忽略访问错误。通过添加 /q键,可以禁用显示成功访问文件系统对象的信息。

根据文件和文件夹的数量,导出权限可能需要相当长的时间。执行命令后,将显示文件处理成功或者失败的数量的统计信息。

Successfully processed 3001 files; Failed processing 0 files

打开文件老手_烫发.txt使用任何文本编辑器。如我们所见,它包含目录中文件和文件夹的完整列表,并且每个项都具有以SDDL(安全描述符定义语言)格式指定的当前权限。

例如,根目录的当前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语法(如果需要,我们可以在MSDN上找到帮助)。让我们只选择一个对象来详细讨论SDDL的一个小片段:

(A;OICI;FA;;;S-1-5-21-2340243621-32346796122-2349433313-24109193)
  • A–访问类型(允许)

  • OICI–inherit标志(OBJECT inherit+CONTAINER inherit)

  • FA–权限类型(SDDL_FILE_ALL–ALL allowed)

  • S-1-5-21-2340243621-32346796122-234933313-24109193–具有这些权限的帐户或者域组的SID。要将SID转换为帐户或者组名,请使用以下命令:

$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](http://theitroad.local/get-aduser-getting-active-directory-users-data-via-powershell/) -Identity SID

或者

[Get-ADGroup](http://theitroad.local/active-directory-group-management-using-powershell/#h2_4) -Identity SID

因此,我们发现用户corp\dtrump对此目录具有完全控制权限。

要根据备份文件中的值自动还原此文件夹对象的NTFS权限,请运行以下命令:

icacls g:\ /restore veteran_ntfs_perms.txt /t /c

注意。请注意,从文件导入权限时,应指定父目录的路径,而不是文件夹名称。

恢复所有权限后,还将显示有关已处理文件数的统计信息。