如果 Windows cmd.exe 以提升的权限运行,我从其提示符执行的任何操作也会以提升的权限运行吗?

Ian*_* C. 11 windows windows-7 uac administrator command-line

如果我的 cmd.exe 窗口在标题栏中显示“管理员”,表明它是以提升的权限启动的,这是否意味着我从这个命令窗口执行的任何内容也以提升的权限运行?

具体来说,如果我运行类似的东西:

msiexec SomeProgram.msi
Run Code Online (Sandbox Code Playgroud)

我的安装程序是否以提升的权限运行,因为它是从以提升的权限运行的 cmd.exe 执行的?

更具体地说:我想知道显示 UI 并立即在 cmd.exe 窗口中返回提示的应用程序(如msiexec上面的调用)是否正在以提升的权限执行。

rtf*_*rtf 16

是的,它确实以提升的权限执行。

简单测试:

您可以通过打开一个提升的和一个非提升的命令提示符来轻松测试这一点。notepad.exe在两者中运行命令,并尝试将空白文本文件保存到C:\Windows. 一个会保存,一个会抛出权限错误。

彻底的测试:

如果这还不足以为您确认(它并没有真正让我满意),您可以使用SysInternals 的 AccessChk。您需要从提升的命令提示符运行它。

让我们首先检查正在运行的两个记事本进程:

记事本:(accesschk.exe -v -p notepad

[11140] notepad.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW DOMAIN\Tannerf
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
[11004] notepad.exe
  High Mandatory Level [No-Write-Up, No-Read-Up]
  RW BUILTIN\Administrators
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
Run Code Online (Sandbox Code Playgroud)

一个在我的域用户名下运行,另一个在管理员内置组下运行。它还具有很高的强制性水平。您还可以使用-f标志运行以细分权限和令牌。

MSIExec 和 MSI 文件

我认为运行时事情可能会变得更复杂一些msiexec。我有一个 Google Chrome 独立安装程序,可以方便地进行测试。

msiexec.exe 从提升的提示启动 Chrome 安装程序:

D:\Users\tannerf>accesschk.exe -p msiexec.exe

[10540] msiexec.exe
  RW BUILTIN\Administrators
  RW NT AUTHORITY\SYSTEM
Run Code Online (Sandbox Code Playgroud)

由 MSI 生成的 chrome_installer.exe:

D:\Users\tannerf>accesschk.exe -p chrome_installer.exe

[5552] chrome_installer.exe
     NT AUTHORITY\SYSTEM
     OWNER RIGHTS
  RW NT SERVICE\msiserver
Run Code Online (Sandbox Code Playgroud)

不再那么切割和干燥了!看起来chrome_installer.exe进程是通过 MSIServer 服务运行的。


这让我想知道其他安装程序可能会有什么行为,所以我运行了一个手边的 Evernote.msi:

提升 msiexec.exe 启动印象笔记安装程序:

[6916] msiexec.exe
  High Mandatory Level [No-Write-Up, No-Read-Up]
  RW BUILTIN\Administrators
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
[4652] msiexec.exe
  System Mandatory Level [No-Write-Up, No-Read-Up]
  R  BUILTIN\Administrators
        PROCESS_QUERY_INFORMATION
        PROCESS_QUERY_LIMITED_INFORMATION
Run Code Online (Sandbox Code Playgroud)

有趣的; 这次有一个在系统级别运行的 msiexec.exe。我使用 Process Monitor 发现实际弹出的安装窗口来自系统级 msiexec 进程。杀死高强制级别也杀死了系统级进程。

非提升 msiexec.exe 启动印象笔记安装程序:

[7472] msiexec.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW DOMAIN\Tannerf
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
[4404] msiexec.exe
  System Mandatory Level [No-Write-Up, No-Read-Up]
  R  BUILTIN\Administrators
        PROCESS_QUERY_INFORMATION
        PROCESS_QUERY_LIMITED_INFORMATION
Run Code Online (Sandbox Code Playgroud)

看起来 Evernote 将获得系统级别的访问权限。双击安装程序具有相同的结果。


结论:

我认为这很好地证明了除非另有说明,否则进程将继承权限。这并不能保证msiexec SomeProgram.msi将在所有流程中以高强制级别运行;它可以在系统级别或 MSIServer 下运行。您的里程可能会有所不同,看到许多这些规则似乎被“打破”的情况,我不会感到惊讶。

  • 除了经验测试之外,Windows 进程*应该*从父进程继承权限。 (2认同)

Bob*_*Bob 11

默认情况下,Windows 进程将从父进程继承其安全上下文:

进程的默认安全描述符中的 ACL 来自创建者的主要令牌或模拟令牌。

关于进程安全和访问权限的 MSDN

但是,可以生成具有较少权限的进程:

虽然进程继承了产生它的进程的完整性级别,但可以在创建进程时自定义完整性级别。除了在用户界面特权隔离技术中定义窗口消息的边界外,Windows Explorer、Internet Explorer、Google Chrome 和 Adob​​e Reader 等应用程序还使用强制完整性控制来将文档与系统中的易受攻击对象隔离。

此其他 MSDN 页面相关的强制完整性控制维基百科此处也有提及。另一个演示文稿还提到了进程继承。

但是,我相信 cmd.exe 将启动具有最高权限继承级别的子进程,正如@Tanner 的测试和答案所示。