我在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中删除。
有什么想法吗?
答案 0 :(得分:0)
因此,第一步是使用TAKEOWN从TrustedInstaller更改所有者(并取消您的UAC保修)。
然后 CACLS C:\ / g builtin \ administrators:f
您也可以使用ICACLS / restore执行此操作,但这需要您准备ACL文件。 ACL文件中包含文件的名称,这使得创建更加烦人。
简单的BAT文件来执行此操作。
注意: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