2

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

我想自动替换驱动器根目录 (E:) 上的所有权限,以防它们被修改。整个驱动器将恢复为已知配置。然后我将在根目录(管理员、备份等)设置一些权限,这些权限将通过继承传播到所有子目录。(可能这2个操作是同一个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 中删除。

有任何想法吗?

4

1 回答 1

1

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

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

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

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

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

注意:ICACLS 真的很挑剔:

  • ACLFile 似乎需要是 UTF-16
  • ACLFile 在其中包含命名文件,并且名称与 icacls 命令行中给出的路径相关。
  • icacls 命令行上的文件夹名称也不能有尾随“\”。

@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
于 2017-01-20T20:36:13.387 回答