我想更改受保护文件的权限。
Using WMIC.EXE as an example, I want to change Administrators to F from R.
CACLS c:\windows\system32\wbem\wmic.exe
Returns:
NT SERVICE\TrustedInstaller:F
BUILTIN\Administrators:R
NT AUTHORITY\SYSTEM:R
BUILTIN\Users:R
CACLS c:\windows\system32\wbem\wmic.exe /P BUILTIN\Administrators:F
Returns: Access Denied
这在RunOnce注册表项调用的批处理文件中也会失败。
takeown /f "c:\Windows\System32\wbem\WMIC.exe" /a
icacls "c:\windows\system32\wbem\wmic.exe" /grant administrators:F
这里的障碍可能并不明显。第一个是缺少授予“管理员”组的权限。在此文件中,“管理员”仅具有读取和执行权限。所以这需要改变。但是......当你没有改变的权利时如何改变?
在Windows中,管理员可能始终拥有安全对象的所有权 - 例如文件或目录。此外,对象所有者可能总是修改对象的安全描述符 - 即使安全描述符显示他们没有访问权限。这些原则是关键。
因此,我们是管理员,因此我们可以获取文件的所有权,然后更改权限以授予我们自己(或任何其他人)访问权限。 cacls.exe
无法帮助我们完成第一部分,所以相反我们将转向takeown.exe
。 /f
arg以文件为目标,/a
以“管理员”组为目标,而不是运行命令的单个人。
takeown /f "c:\Windows\System32\wbem\WMIC.exe" /a
现在作为所有者,我们可以在安全描述符(也称为授权权限)中向ACEL添加/修改ACE。我们可以使用cacls.exe
或icacls.exe
,但我总是推荐后者,因为前者是折旧的。但是我会把它留给你。
icacls "c:\windows\system32\wbem\wmic.exe" /grant administrators:F
稍后,在您执行任何操作后...如果要替换原始权限,我们必须将所有权返回到“TrustedInstaller”,并将“完全控制”更改回管理员组的“读取+执行”。 icacls.exe
可以做两个工作:
icacls "c:\windows\system32\wbem\wmic.exe" /setowner "NT Service\TrustedInstaller"
icacls "c:\windows\system32\wbem\wmic.exe" /grant:r "administrators":(RX)