原文链接,作者Raymond Chen,gemini-3.1-pro-preview翻译。
系统里有一个控制面板选项,允许你指定希望 UAC(用户账户控制)触发提示的频率。你可以将其设置为以下四个级别之一:
- 始终通知
- 仅当应用尝试更改设置时通知(使用安全桌面)
- 仅当应用尝试更改设置时通知(不使用安全桌面)
- 从不通知
虽然看起来有四个设置,但从理论上讲,实际上只有两个设置:
- 始终通知
- 无所谓 (Meh)
之所以所有其他选项都可以归结为“无所谓”,是因为“仅当应用尝试更改设置时通知”这个选项很容易被任何应用程序绕过:它只需向资源管理器(Explorer)注入一个线程,并在那里干坏事即可。由于在这种设置下,系统允许资源管理器进行静默提权,这就意味着,任何拥有对资源管理器线程注入权限的线程,都可以执行静默提权(而几乎所有以中等或更高完整性级别运行的程序都拥有此权限)。
换言之,“仅当应用尝试更改设置时通知”实际上就等同于“在气密舱门上凿个洞”。
既然这两个中间档位的设置实际上等同于“从不通知”,那当初为什么还要保留它们呢?
因为这是用户想要的。
Windows Vista 中的 UAC 只有两个设置:“始终通知”(启用,默认设置)和“从不通知”(禁用),因为这是仅有的两个有意义的值。但当时人们极其强烈地抱怨,“始终通知”级别的弹窗提示实在太烦人了。¹ 作为妥协,Windows 7 引入了两个中间级别的提示选项,尽管这两个新级别实际上等同于“从不通知”(因为只要程序存心想这么做,就能绕过通知)。
正如拉里·奥斯特曼(Larry Osterman)所指出的,UAC 并不是一项安全功能。它是一项便利性功能,充当着一种强制机制,旨在迫使软件开发者规范自身行为(把程序写好)。
我记得在 2009 年,曾有很多人对 UAC 控制面板中的一个所谓“安全漏洞”大惊小怪:如果当时的设置是“仅当应用尝试更改设置时通知”,该机制允许你在没有触发弹窗提示的情况下更改 UAC 的设置。
这不是废话嘛。
你把 UAC 配置成了“仅当应用尝试更改系统设置时提示,而控制面板本身更改设置时不提示”。然后你使用控制面板更改了系统设置。因此,自然就不会有提示。
尽管如此,还是有很多人抱怨他们想要“更多提示”,以至于 UAC 团队后来又加上了一个额外的提示框。“我本来以为大家都在抱怨弹窗太多,结果当他们把滑块调低以减少弹窗时,居然又要求增加弹窗?这些人能不能有个准主意啊?”
¹ 就我个人而言,这并不烦人。毕竟我又不会整天不停地更改系统设置。事实上,我特意将我的账户排除在管理员组之外,这样一来,不仅我做任何操作都会被提示,而且当我真正提权为管理员时,我是以本地管理员账户的身份运行,而不是以我自己的身份运行。这意味着,提权后的命令提示符没有域网络访问权限(因为域访问权限来自我的域账户),而域账户又没有管理员权限。² 这种“权限分离”有助于限制我可能犯下的任何低级错误所造成的破坏范围。因为以管理员身份运行的失控命令无法访问网络资源,所以任何暴走的命令充其量只能搞垮我自己的机器。
² 令人惊讶的是,在面对这种权限分离的状况时,很多程序都会直接罢工。


















