【问题标题】:Start process as limited user from elevated script从提升的脚本以受限用户身份启动进程
【发布时间】:2013-03-06 13:33:04
【问题描述】:

我有一个运行一些 bat 文件的提升控制台。让这个控制台在提升模式下运行是强制性的,因为它能够执行一些任务,比如管理网络共享等,而无需请求权限。但有时脚本还必须启动一些不需要运行提升的应用程序。所以我们希望我们的高架球棒在非高架模式下开始应用。在 Windows 上有没有内置的方法可以做到这一点?进程是使用 DOS 命令 START 启动的。

顺便说一下,这台机器是Windows 7 Ultimate Edition x64。

我知道这个问题已经在许多问题 (this collects many of them) 中以编程方式进行了讨论,但我们的要求是在 cmd 上运行的 bat 脚本,以及任何可能有助于我们任务的独立可执行文件,例如 nircmd、7z 等。

澄清:我们已经有一个计划任务启动控制台提升,提升控制台不是这个答案的问题。

【问题讨论】:

  • 顺便说一句,我已经阅读了this article,并且似乎是目前最好的解决方案。但我会很高兴听到别人的想法。
  • 我认为 PsExec 可能是您最简单、最直接的解决方案。

标签: batch-file console uac elevation process-elevation


【解决方案1】:

Windows 内置方式START RUNAS ... 允许您以受限用户身份运行进程。这是一个例子:

runas /trustlevel:0x20000 cmd.exe

无论如何,以这种方式执行的进程的执行权限与另一个从启用 UAC 的 UI 启动的进程的执行权限之间存在一些内部差异(explorer.exe 通过正常的用户交互,我的意思是,从文件浏览器或从开始菜单执行) .

  • 在通过 runas(右)启动的进程中,我们错过了一些禁用的权限:
  • 在通过 runas(右)启动的进程上,管理员对进程设置了一些权限:

第三方应用方式:我们可以使用PSExec 来实现我们的目标,这是一个独立的可执行文件,我们可以在 Windows Sysinternals 的 PSTools 上找到。这是一个例子:

psexec -l -d cmd.exe

我对该问题进行了深入研究,发现运行权限或安全标志没有任何区别。

来自Microsoft Technet blogs

PsExec 使用CreateRestrictedToken API 创建称为令牌的安全上下文,这是其自身的精简版本,删除了管理权限和组成员身份。在生成一个类似于 Windows 分配给标准用户的令牌后,Process Explorer 调用 CreateProcessAsUser 以使用新令牌启动目标进程。

这些是我经过数小时研究后得到的最佳结论;欢迎任何可以提供更多详细信息的人。

【讨论】:

    【解决方案2】:

    真的不是我的专业领域,但 START RUNAS ...AT 是否符合要求?

    【讨论】:

    • 好点。我已经用'runas / trustlevel:0x20000 cmd.exe'试过了。最后它工作了,虽然我发现了很多我不喜欢的东西:首先,当尝试执行程序时,它会在 %path% 目录中查找它,但它不会扫描the App Paths in the registry,例如“cmd " 有效,但 "iexplore" 无效。当我以这种方式而不是从 UI 启动时,我还检测到进程执行权限的差异。我会更深入地得出结论。
    • 我将通过编辑你的答案来发布完整的答案,所以优点是你的。感谢您的帮助。
    • @Áxel 您的解决方案比 Peter 的原始解决方案更广泛。您应该将其发布为新答案。
    • 嗨@madth3,我想您已被要求对此进行同行评审并拒绝了它。好吧,在某些情况下,不清楚什么是最好的方法,我继续这样做是因为我的答案包括“runas”,我发现这些选项感谢 PeterWright。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多