我最近对 UAC 在标准帐户和管理员帐户之间的工作方式感到困惑,
众所周知,当 UAC 处于开启状态时,UAC 允许标准账户或管理员批准模式下的管理员账户获取管理员令牌,以便执行需要管理员权限才能访问机器的任务 - 允许我们在不切换用户的情况下切换令牌,
然而,切换令牌似乎并不是真正发生的事情:不久前,我运行了一个会修改 shell 的应用程序(explorer.exe)。我在标准帐户中运行该程序,但它需要提升访问权限:因此,我使用 UAC 提供管理员凭据以便它能够完成。我没有看到 shell 有任何变化;然后我登录到我使用其凭据的管理员帐户,我看到 shell那账户已经更改,这显然不是我想要的
在我看来,UAC 基本上就是一个“以用户身份运行”类型的操作,它实际上以该用户的身份运行该程序。这意味着我不仅仅是以提升的权限运行它:我实际上是以该用户的身份运行该程序,
我的问题是:标准帐户是否可以使用管理员令牌,但实际上以标准用户身份运行程序并使用当前用户的配置文件?否则,在我看来,如果您需要执行任何管理员任务,您几乎需要登录管理员帐户,这违背了 UAC 的整个目的 - 因为 UAC 以管理员身份运行程序,而不是仅使用管理员权限,
令牌和配置文件的这种分离是否可行?或者在这种情况下所有用户都必须是管理员吗?在我看来,这可以解释为什么许多组织只向所有用户授予完全管理员访问权限,
有人可以解释一下这个问题吗?
我想知道是否可以为所述程序提供管理员令牌,但在当前用户帐户中运行该程序,而不是在提供凭据的管理员的用户帐户中运行该程序 - 换句话说,是否可以使用该程序修改标准帐户中的 shell?目标是以具有管理权限的登录用户(无论当前权限如何)身份启动该进程,而不是以具有管理员权限的帐户下的进程身份启动该进程。
希望这是有道理的,
澄清:我不是指管理员批准模式或 UAC 的工作原理。我已经知道,如果 UAC 设置为安全设置,即使是管理员也会收到提示,除非将其关闭,否则管理员默认使用标准令牌。我说的是管理员令牌是获得了,是否仍然可以使用管理员令牌以登录用户的身份运行该进程?(不是使用以“用户”身份运行,而是使用以“令牌”身份/使用“令牌”运行之类的方式)等等...这样,它将使用通用管理权限,而不是一个用户的管理权限。
这是完全可能的吗,或者我只是指出了 Window 中没有的一个功能?
为了实现此处描述的目标,我是否必须在需要提升权限时将标准帐户转换为管理员帐户,然后在完成后将其重新转换为标准帐户?根据评论,这似乎是不可能的,这似乎是操作系统的一个缺陷,因为它使 UAC 基本上毫无用处。
案例:几年前,我试图运行一个程序来更改我电脑的主题,这个程序需要修补系统(其中一个第三方程序)。它需要管理员权限。我没有看到任何变化,但后来我登录到我使用过其密码的管理员帐户,发现所有活动都已应用于该帐户!!我不得不摆弄了几次才能让它工作,但这是一个非常不稳定的过程。最简单的解决方案是不是只是暂时将该标准帐户提升为管理员,然后将其降级?
答案1
您不能在标准帐户下运行程序,但具有管理员权限。
您误以为 UAC 是“以其他用户身份运行”。以管理员用户名运行的程序运行标准权限默认情况下。只有当程序被“提升”时,它才会获得管理员权限。即使您的用户帐户是管理员,也是如此。
UAC 的创建是为了解决在管理员用户下运行的所有进程都具有管理员权限的问题。
答案2
是的,这是可能的...
打开控制台并输入“ runas
”
use the /profile switch to select a profile to run the program...
use the /savecred switch to save the admin credentials you choose...
...
RUNAS USAGE:
RUNAS [ [/noprofile | /profile] [/env] [/savecred | /netonly] ]
/user:<UserName> program
RUNAS [ [/noprofile | /profile] [/env] [/savecred] ]
/smartcard [/user:<UserName>] program
RUNAS /trustlevel:<TrustLevel> program
/noprofile specifies that the user's profile should not be loaded.
This causes the application to load more quickly, but
can cause some applications to malfunction.
/profile specifies that the user's profile should be loaded.
This is the default.
/env to use current environment instead of user's.
/netonly use if the credentials specified are for remote
access only.
/savecred to use credentials previously saved by the user.
This option is not available on Windows 7 Home or Windows 7 Starter Editions
and will be ignored.
/smartcard use if the credentials are to be supplied from a
smartcard.
/user <UserName> should be in form USER@DOMAIN or DOMAIN\USER
/showtrustlevels displays the trust levels that can be used as arguments
to /trustlevel.
/trustlevel <Level> should be one of levels enumerated
in /showtrustlevels.
program command line for EXE. See below for examples
Examples:
> runas /noprofile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:[email protected] "notepad \"my file.txt\""
NOTE: Enter user's password only when prompted.
NOTE: /profile is not compatible with /netonly.
NOTE: /savecred is not compatible with /smartcard.