为什么我的 cmd.exe 在 Windows 7 中以管理员权限打开。(我不会说以“管理员”身份运行,因为我知道 Win7 的“以管理员身份运行”选项以管理员权限而不是以管理员身份运行它,这就是这里发生的情况,尽管是自动的)
我通过单击我的用户名进入 Windows。
现在假设我启动 cmd.exe,我会以最清楚的方式表明我没有点击快捷方式
所以我转到 c:\windows\system32 并从那里运行 cmd.exe。
但结果是这样的
你可能会想,也许我登录的是管理员账户,但事实并非如此
而我直接从 system32 打开的 cmd.exe 也显示,虽然出于某种原因,它以管理员权限运行。但它是从用户帐户运行的。
添加
回答评论者“scott”的一些询问。我显然有一个名为“用户”的帐户,这应该很清楚。
评论者“scott”建议使用以下命令:
C:\Users\User>net user %username% | find "Group"
Local Group Memberships *Administrators *HomeUsers
Global Group memberships *None
C:\Users\User>
(是的,该用户帐户是管理员组的成员,尽管这不会导致这种行为)。
评论者“scott”建议我运行此命令显示输出。
C:\Users\User>whoami /priv | find "Enabled"
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
C:\Users\User>
没什么不寻常的。如果您在全新安装时以管理员权限运行 cmd 提示符,则会显示相同的内容。显然,在我的情况下,这是自动发生的。那么,评论者 scott 是否可以说明他可能在那里寻找什么?
如果您whoami /priv | find "Enabled"
在全新安装时从以管理员权限启动的 cmd 提示符运行该命令,那么它还会显示相同的三个项目(来自本地安全策略..用户权限已启用)。
因此,这些命令并没有显示任何超出我已经说过/展示的异常内容。
(至于评论者斯科特的其他问题,我没有处于安全模式,也不是全新安装,无论如何,这两件事都不会导致这种行为。至于评论者询问它何时开始的问题。我不知道这种行为是什么时候开始的。)
之前也有一些评论,现在已经消失了。其中一条建议修复安装,但我感兴趣的是哪种设置可能导致这种情况。
评论者 scott 问道:“运行 netplwiz 时会发生什么?”嗯,就像您按 Windows 键 + R(获取旧运行对话框)并键入 一样control userpasswords2<ENTER>
。它会显示一个屏幕,您可以在其中设置用户是否必须输入密码才能登录,以及哪些用户可以自动登录。
但这一切都无关紧要。我确实有未隐藏的管理员帐户,但我没有以管理员身份登录。正如我所展示的,echo %username%
我以“用户”身份登录。
评论者“HelpingHand”表示“添加列‘Elevated’和‘UAC Virtualization’。cmd 的父进程 Explorer 的 Elevated 状态是什么。是“Elevated=No”、“UAC Virtualization-disabled”吗?也许应该关注父进程而不是子进程。我还将在运行进程监视器的情况下启动 cmd.exe。确认,在树视图中,它是上面检查的 Explorer.exe 进程的子进程,并检查 Explorer.exe 的 CreateProcess 操作以启动 cmd。具体来说,是调用 CreateProcess 的堆栈。最好检查一下有没有第三方模块。也许可以粘贴一张截图。”
Windows 7 没有“提升”列!提升列特定于 Windows 10(也许 Win8 也有,但谁在乎 Win8 呢)。在 Win10 中,列是选项卡特定的,并且与 Win10 的详细信息选项卡相关联。在 Win7 中,列不是选项卡特定的,也没有“提升”列。
您还提到了 Process Monitor,这是一个很棒的程序,但我认为您说的树是指 Process Explorer。Process Monitor 不会显示进程树。Process Explorer 会。这两个程序都是 sysinternals/Mark Russinovich 编写的很棒的程序,现在可从 MS 获得。如果您提到操作(如按操作过滤),那么您指的是 Process Monitor。我看不到 CreateProcess,但有 ThreadCreate
查看一个相当新、常规的 Windows 7 系统,它没有这个问题。进程资源管理器显示 cmd.exe 进程是它在“Explorer”下显示的 explorer.exe 进程的子进程,双击它显示父进程是 explorer.exe 实例。查看各种进程,有些将 UAC 虚拟化设置为允许,有些设置为禁用。Explorer 将其设置为禁用。cmd 将其设置为禁用。
查看有问题的 Windows 7 系统,查看进程资源管理器,我看到两个资源管理器进程。cmd 未显示在它们之下。但如果我双击 cmd,它会显示 explorer.exe 是父进程。查看任务管理器,没有进程将 UAC 设置为禁用。Explorer 将其设置为“不允许”,而 cmd 将其设置为“不允许”。在两个资源管理器进程中,一个具有带有“/factory....”的命令行,另一个只是对 explorer.exe 的常规调用。进程资源管理器显示 cmd.exe 的 PPID(父进程 ID/PPID),它与刚刚正常调用的 explorer.exe 实例匹配。
至于查看操作 ThreadCreate 和堆栈选项卡的进程监视器信息,这里是粘贴。
您提到考虑那里是否有第三方模块。我没有看到那里有任何第三方模块/dll 或 exe。
答案1
似乎整个问题都基于一个错误的前提,即“Administrator:”前缀表示进程正在运行的帐户名。但事实并非如此。
但这一切都无关紧要。我确实有未隐藏的管理员帐户,但我没有以管理员身份登录。正如我在 echo %username% 中显示的那样,我以“用户”身份登录。
但所有这些都无关紧要。“管理员:”前缀实际上并不表示这管理员帐户 – 它表示一个管理员,即程序以管理员身份运行团体。
此前缀是由 Windows Conhost 添加的,因为 Windows 7 通常使用 UAC,并导致所有交互式登录以降低的权限运行,尽管具有组成员身份 - 只有在您确认安全提示后,“提升”的进程才会获得完全权限。因此,如果您使用“以管理员身份运行”菜单项以提升权限运行 cmd.exe,则通常会在 Cmd 的标题栏中看到此前缀。
但如果系统已禁用 UAC,全部您的“用户”运行的进程具有完全特权的安全令牌,并且程序始终将自己视为“以管理员身份运行”。
请参阅有关禁用 UAC 的其他线程,并按照其相反的说明重新启用 UAC:在 Windows 7 上禁用 UAC?