将“TrustedInstaller”恢复为 Windows 文件夹中可执行文件的所有者

将“TrustedInstaller”恢复为 Windows 文件夹中可执行文件的所有者

在更改 Windows 目录中可执行文件的所有权( 、 等)后explorer.exeregedit.exe我似乎无法将其改回TrustedInstaller使用icacls.exe。使用 GUI 方法(属性 → 安全 → 高级 → 所有者) 但工作正常。

对 Windows 下的其他文件执行同样的事情,即不是可执行文件,运行良好。在安全模式下尝试了同样的操作,没有成功。

这是我正在使用的两个基本命令:

takeown /F C:\Windows\explorer.exe /A
icacls C:\Windows\explorer.exe /setowner "NT SERVICE\TrustedInstaller"

编辑:忘了说我收到了“访问被拒绝”错误。

C:\Windows\System32>takeown /F c:\Windows\explorer.exe /A  
SUCCESS: The file (or folder): "c:\Windows\explorer.exe" now owned by the administrators group.

C:\Windows\System32>icacls c:\Windows\explorer.exe /setowner "NT SERVICE\TrustedInstaller"  
c:\Windows\explorer.exe: Access is denied.  
Successfully processed 0 files; Failed processing 1 files

答案1

标题说的是恢复 TrustedInstaller。

似乎缺少了一部分;删除添加的管理员组权限。

takeown /F "C:\Windows\regedit.exe" /A
/F - file to become owner of
/A - means it will set the users group (ie. Administrators, not userxyz)

icacls "C:\Windows\regedit.exe" /grant Administrators:F
/grant - will add permissions
:F - Full Control

icacls "C:\Windows\regedit.exe" /setowner "NT SERVICE\TrustedInstaller"
/setowner - new owner

icacls "C:\Windows\regedit.exe" /grant:r Administrators:RX
/grant:r - will set permissions (removing higher ones)
:RX - Read and Execute

参考: https://ss64.com/nt/icacls.html

答案2

该命令仅在授予管理员组完全权限后才有效,即:

icacls c:\Windows\explorer.exe /grant Administrators:f  

出于某种原因,即使授予“修改”权限似乎也不够。

答案3

问题在于,正如您在回答中发现的那样,设置文件所有者需要特殊权限,特别是“取得所有权”。ACL 编辑器 GUI 能够设置所有者的原因是它启用了SeTakeOwnershipPrivilege 特权,这允许覆盖该访问检查。以管理员身份运行的程序具有此权限,但他们必须在使用前明确启用它,但显然icacls没有。

方便的是,进程默认继承其父进程的权限,因此如果您可以为调用的命令提示符启用该权限icacls,则该实用程序也将启用该权限并能够设置所有者。您可以使用我的开源实用程序打印动态链接库调用适当的 Win32 函数来在 SprintDLL 的父进程(命令提示符)中启用特权:

SprintDLL call kernel32.dll!OpenProcess /return native /into prochandle (int 0x400, int 0, slotdata parentpid); newslot native token; call advapi32.dll!OpenProcessToken /return int (slotdata prochandle, int 0x20, slotptr token); newslot block luid = int 0, int 0; call advapi32.dll!LookupPrivilegeValueW /return int (nullptr, lpwstr "SeTakeOwnershipPrivilege", slotptr luid); newslot block privs = int 1, slotdata luid, int 2; call advapi32.dll!AdjustTokenPrivileges /return int (slotdata token, int 0, slotptr privs, slotsize privs as int, nullptr, nullptr)

如果有效,输出将显示所有三个调用函数都返回 1。然后您将能够icacls按照最初尝试的方式使用。

答案4

这对我 64 位系统有效(也是我的问题)...

icacls c:\Windows\SysWOW64\usercpl.dll /grant Administrators:f  
icacls "C:\Windows\SysWOW64\usercpl.dll" /setowner "NT SERVICE\TrustedInstaller"

/setowner-新主人

相关内容