在* nix系统上,您可以像这样获得root shell:
$ su # or 'sudo -s'
#
根外壳在同一终端内生成。
我正在尝试找到在Windows命令提示符下执行类似的就地提升的功能。换句话说,它不应产生新窗口或显示UAC提示。到目前为止,我已经能够执行绕过UAC的计划任务,但是未生成高架命令提示符窗口。
Windows是否有类似的命令执行就地标高而不产生新窗口?
TL; DR-唯一的选择是生成另一个进程。(一个新的cmd.exe
。)对于命令提示符,使用具有更高权限的访问令牌启动一个新实例将始终导致创建一个新窗口。
具有管理权限的用户登录到启用了用户帐户控制(UAC)的Windows计算机时,将创建两个单独的访问令牌:
在CMD.EXE
创建流程(例如)时,会为其分配这两个访问令牌之一。如果该进程以管理员身份“提升”运行,则使用未过滤的访问令牌。如果未授予该进程管理员权限,则使用过滤后的标准用户令牌。
创建进程后,将无法替换其访问令牌。1在此“用于Windows桌面的 MSDN应用程序安全性”线程中,张贴者将自己标识为Windows内核团队的成员,指出:
一旦进程开始运行,NT内核就永远不会允许令牌交换。这是因为可能已在旧的安全上下文中打开了句柄等,运行中的操作可能会使用不一致的安全上下文等。因此,一旦开始执行进程,切换进程的令牌通常是没有意义的。但是,直到Vista才强制实施。[重点矿山](来源感谢到@BenÑ)
注意:Windows Vista发行版引入了用户帐户控制。
这个超级用户的答案引用了另外两个来源来证实这一点:
devzest.com博客文章编程权限提升/ UAC:
启动时只能在进程级别提升代码,这意味着无法提升正在运行的进程。为了提升现有的应用程序,必须创建一个新的应用程序实例实例。
techtarget.com上的文章如何使用Vista的UAC正确提升程序的特权:
程序一旦启动就无法提升...
因此,根本不可能就地提升命令提示符或任何其他进程。唯一的选择是使用新的访问令牌生成另一个进程(如果需要,它可以是原始进程的另一个实例)。对于命令提示符,使用具有较高权限的访问令牌启动新实例将始终导致创建新窗口,并且如果在系统上启用了UAC提示,则也会触发它们。
1您可以使用AdjustTokenPrivileges函数调整现有访问令牌中的特权,但根据MSDN:
AdjustTokenPrivileges函数无法向访问令牌添加新的特权。它只能启用或禁用令牌的现有特权。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句