icacls替换权限驱动器根目录

时间:2017-01-13 21:33:56

标签: batch-file permissions ntfs drive icacls

我在Windows 2012 R2上运行,尝试使用批处理文件来管理我使用icacls的NTFS权限。批处理文件几乎完成,然后我将把它交给管理经验不足的人,所以我试图尽可能地让他变得容易。

我想自动更新驱动器根目录(E :)上的所有权限,以防它们被修改。整个驱动器将恢复为已知配置。然后我将在根(管理员,备份等)设置几个perms,它将通过继承传播到所有子目录。 (可能这两个操作是相同的icacls调用)有许多子目录,并且将对它们中的每一个应用不同的权限。我让批处理文件的子目录部分完整且成功。

我无法使用icacls来替换驱动器根目录上的所有权限。我试过了:

ICACLS.EXE "E:" /inheritance:r /grant:r "Administrators":(OI)(CI)F /T /Q

ICACLS.EXE "E:" /grant:r "Administrators":(OI)(CI)F /T /Q

都没有成功。为了测试,我添加了另一个可以访问E:的组。批处理文件成功执行完成后,其他组仍然可以访问;它没有从E的ACL中删除。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

是的,有趣的...... 看起来ICACLS很难简单地替换所有权限。

因此,第一步是使用TAKEOWN从TrustedInstaller更改所有者(并取消您的UAC保修)。

然后 CACLS C:\ / g builtin \ administrators:f

您也可以使用ICACLS / restore执行此操作,但这需要您准备ACL文件。 ACL文件中包含文件的名称,这使得创建更加烦人。

简单的BAT文件来执行此操作。

注意:ICACLS非常挑剔:

  • ACLFile似乎需要是UTF-16
  • ACLFile已在其中命名文件,名称为 relative icacls命令行上给出的路径。
  • icacls命令行上的foldername不能有尾随" \" 无论是。
@echo off
setlocal

:: Change the ACL to "BUILTIN\Administrators:(OI)(CI)(F)"    
if exist aclfile.txt del aclfile.txt

if "%1"=="" echo Requires a filename && exit /b 1

:: The ACL file is required to be UTF-16 encoded.
:: Use "icacls FILE /save ACLFILE.txt on a sample
:: file to get the exact SDDL you want to use
cmd /u /c echo %~n1 > aclfile.txt
cmd /u /c echo D:P(A;OICI;FA;;;BA)>>aclfile.txt

:: Ick, trim the trailing \
:: ICACLS is really dumb.
set pathname=%~dp1
set pathname=%pathname:~,-1%
icacls "%pathname%" /restore aclfile.txt