Windows Vista用户账户控制指南

Vista Vista活用特辑

用户账户控制(UAC,User Account Control)是Windows Vista中引入的全新安全机制,它要求用户在执行可能会影响计算机运行的操作,或执行更改影响其他用户的设置的操作之前,提供权限或管理员密码。通过在这些操作启动前对其进行验证,用户账户控制可以帮助防止恶意软件和间谍软件在未经许可的情况下在计算机上进行安装或对计算机进行更改。

本文将全面介绍用户账户控制的使用方法与技巧。

一、用户账户控制基础

1.什么是用户特权

在介绍UAC之前,首先需要了解一下Windows在用户特权方面的一些内容。

(1)权限与权力

我们都知道,在Windows 9x架构的操作系统中,所有用户账户(严格说来,甚至“账户”这个概念在这类操作系统中都是不存在的,因为Windows 9x是单用户操作系统)都是完全平等的,每个账户可以进行的操作都完全一样,根本无法限制,然而这就容易造成很多问题。例如,我们可能希望只有系统管理员才可以安装软件,或者修改系统设置,而希望一般用户只能使用已经安装好的程序和系统,不允许他们修改任何可能会影响到整个系统的设置。这些在Windows 9x中都是无法实现的。

为了解决这个问题,从Windows XP开始,微软将多用户操作系统的概念提供给了一般的电脑用户,Windows 2000/XP/2003/Vista都是多用户操作系统。在多用户操作系统中,每个账户都是完全独立的,并且都有自己独立的环境,一个账户对某些选项(例如桌面背景或者屏幕保护,以及Internet Explorer的收藏夹内容等)的修改不会影响到其他账户。

在多用户操作系统中,Windows通过权限(Permission)和权力(Right)来决定每个账户可以进行的操作。其实这两个概念表达的含义基本类似,只不过应用的范围不同。“权限”是指账户可以对一个对象采取的操作,例如一个账户可以访问一个文件,表示该账户对这个文件具有访问权限;而权力是指账户可以对系统进行的操作,例如一个账户可以更改系统的时区设置,表示该账户对系统具有更改时区设置的权力。通常情况下,大多数人对这两个术语的使用都很混乱,但是这样做也没有什么明显的坏处。

既然提到了权限和权力(统一起见,下文统一将它们简称为“特权”),那么你肯定知道,在多用户Windows操作系统中,有一些比较特殊的用户组,例如Administrators和Users,其中属于前者的账户对系统拥有完全的控制权,而属于后者的账户只能更改有限的,不会影响到整个系统的设置。

(2)访问令牌

对于客户端Windows操作系统(Windows 2000/XP/Vista),在我们安装的过程中,需要给一个名为Administrator的账户设置密码。而当安装好,第一次启动时,需要创建一些日常使用的账户,这些账户都隶属于Administrators组,对系统拥有完整的特权。很多人已经习惯于使用第一次进入系统时创建的账户登录并使用计算机,虽然他们自己可能不知道,但这却给整个系统的安全造成了隐患。

在登录系统时,我们必须输入自己账户的用户名和密码,之后系统中有一个进程将这些信息捕获,并提交到一个保存了用户凭据信息(用户名和密码)的数据库(对于单机和工作组环境的Windows系统,这些信息保存在本机的SAM数据库中)中进行比对。如果发现了匹配的项目,就进一步查询该账户具有的特权,并根据相应的信息创建访问令牌,然后批准用户的登录,并加载桌面、程序等所有需要在用户登录后运行的程序。

经过这个步骤,每个成功登录的账户都将有一个访问令牌(Access Token,可以将其理解为钥匙),账户在登录后进行的所有操作,无论是修改系统设置还是运行程序,或者访问文件,都需要提供这个访问令牌。访问令牌中包含了账户的特权信息,决定了该账户具有怎样的特权。

然而老版本Windows中在这方面有一点不足,假设某账户需要运行一个程序,那么首先需要提供自己的访问令牌,并利用该令牌启动程序,之后启动的程序也将持有该账户的访问令牌。这就意味着,账户具有怎样的特权,那么该账户运行的程序也就具有相同的特权。

假设账户在登录后启动了Internet Explorer浏览器,并打开了一个网页,那么这个Internet Explorer浏览器就具有和账户同等的特权。如果网页上包含了恶意代码,那么代码在运行时也将具有和账户同等的特权。如果这个账户本身是管理员账户,那么恶意代码可以进行的破坏就多了。

让我们举个例子,在Windows XP中使用管理员账户登录系统,然后运行一个程序(假设运行记事本——Notepad.exe),然后使用微软的一个免费工具Process Explorer查看记事本进程所具有的特权,可以看到如图 1所示的对话框。

flvisay-t11.jpg
图1

从图中上半部分的列表中可以看出,Notepad.exe进程直接就具有管理员的特权,而下半部分的列表中内容显示该进程具有的很多特权默认都是被启用的。假设这里运行的不是记事本程序,而是网页上的恶意代码,或者电子邮件中的染毒附件,运行之后会导致什么后果,结果不言而喻。

因此,很多涉及计算机安全的文章都建议用户日常使用时使用非管理员账户登录,而只有在执行管理任务时才使用管理员账户,这样做主要是为了进一步限制用户的访问令牌中包含的特权。然而很多人并没有这样做,主要原因就是,很多人倾向于使用安装好系统后创建的账户来登录系统,而那时创建的账户都是具有管理员权限的。

2.什么是用户账户控制

为了避免上述问题可能对系统带来的危害,微软在Windows Vista中提出了一种叫做用户账户控制(UAC,User Account Control)的机制。

简单来说,UAC可以限制用户访问令牌中包含的特权。当一个账户登录时,哪怕该账户是管理员账户,系统也会将其特权进行限制,只给予他标准用户的访问令牌。为了证明这一点,我们可以在Windows Vista下使用管理员账户登录,同样运行记事本程序,然后使用Process Explorer软件查看记事本进程的特权,如图 2所示。

flvisay-t12.jpg
图2

假设这里运行的不是记事本程序,而是网页上的恶意代码,或者电子邮件中的染毒附件,那么在默认设置的Windows Vista中,就算恶意软件在管理员账户的环境中发作,因为UAC的限制,能够对系统采取的破坏也将少得可怜,甚至可能根本无法直接运行。

因为在Windows Vista中,使用管理员账户登录系统时,账户只能获得标准用户的访问令牌,因此如果账户试图执行一个程序,或者修改系统设置时,一旦进行的操作可以使用标准用户的特权完成(例如更改桌面墙纸,或者运行Internet Explorer),那么就可以直接进行,不需要进一步操作;如果要进行的操作需要对一些重要的系统选项进行调整,或者运行一些比较特殊的程序(例如想要更改系统的虚拟内存设置,或者需要运行一个调整硬盘分区文件系统的软件),那么首先系统会出现UAC对话框,需要用户进行提升。所谓提升,就是通过一定的操作将原本的标准用户访问令牌“升级为”管理员特权的令牌。

如果当前用户本身就是管理员用户,那么提升对话框如图3所示。用户只需要进行确认,判断这是否自己需要进行的操作,然后点击“继续”按钮即可。

uac3.jpg
图3

如果当前用户是非管理员账户,那么提升对话框如图4所示。用户需要进行确认,判断这是否自己需要进行的操作,然后选择一个本机的管理员账户,输入正确的密码,然后点击“确定”按钮才可以继续运行。

uac4.jpg
图4

经过提升操作后,运行的程序将具有管理员的所有特权,可以对系统的任何选项进行调整,或者可以运行任何类型的程序。不过需要注意一点,提升操作只针对被提升的进程以及该进程的子进程有效,不会影响到其他程序。例如,假设我们提升运行了一个命令提示行窗口,并在该窗口中运行了一个命令行程序,那么该程序也是被提升的。但是通过其他方式启动的程序依然会使用标准权限运行。

3.用户账户的误区

其实从道理上看,UAC就是这么简单的一种机制,然而这种“简单”内部产生的影响以及带来的后果则很难估计。

很多人觉得,因为有了UAC,所以任何病毒或者木马都将无法影响系统,因此我们的Windows Vista中可以不用安装反病毒软件了。其实这就是对UAC一个最错误的理解。需要谨记一点:UAC绝对不能帮助我们实现反病毒的目标,UAC只是用于确保管理员账户登录后可以在标准用户的权限上使用系统。简单地说,UAC只能限制我们以标准权限运行程序(系统自带的,或者我们自己安装的,或者病毒、蠕虫或木马)。

这就像以前流行的以Internet Explorer浏览器的ActiveX控件方式安装的流氓软件,很多人觉得奇怪:我并没有安装,它们是怎么进入到我系统中来的?难道真的是这些用户没有安装吗?其实这些ActiveX控件在被安装到系统中之前,Internet Explorer都会显示一个询问对话框,用户可以决定是否安装。绝大部分用户只是在不知道自己正在做什么的前提下点击了“确定”,才会被安装的。

目前UAC也面临同样的尴尬。假设一个恶意软件需要运行,UAC能够做到的只是提示用户,有一个程序需要使用较高的权限运行,并给用户提供了允许和拒绝运行的选项。如果用户不知道这个程序的作用,随随便便就批准了,那么该软件依然可以运行,并对系统进行破坏。其实这并不是说UAC不够完善或者不够好,只是作为软件,并不能干涉用户的决定,而且软件本身也不能假设用户已经知道或者不知道操作带来的后果。难道你想要格式化硬盘分区,而操作系统认为这样做会导致该分区上的数据全部丢失,就禁止你的格式化操作?操作系统(或者UAC)最多提示用户即将发生什么事情,至于是否继续操作,当然是由用户来决定的。

4.用户账户控制的兼容性

UAC好,但有可能导致很多程序在Windows Vista下运行出现兼容性问题,例如再次运行一个软件时发现上次运行过程中对软件一些选项的修改没有被保存,或者软件根本无法运行。那么为什么又会造成这样的情况?

在介绍这个原因之前先看一个比较“典型”的程序。这个程序在安装时会直接将程序本身安装到系统的“c:\xxx”目录下(哪怕当前系统并没有安装在C盘),并且不提供任何选项让用户修改安装位置。同时软件中和当前用户有关的设置会被保存在注册表的HKEY_LOCAL_MACHINE根键下,另外软件运行后的一些配置文件会被写入到Windows目录下。

对于一般用户,可能会觉得这没什么大不了的。但在熟悉Windows的人看来,这样的软件问题非常多。

首先,软件为什么会自动安装到C盘(而非系统盘,因为很多时候我们可能把Windows安装在D盘或者E盘)根目录,这是因为软件的开发者依然在遵循Windows 9x时代落后的设计思想,认为C盘就是用来安装Windows的。那么为什么放着系统盘下默认的“Program Files”文件夹不用,而是在C盘根目录下单独创建一个文件夹来保存?这很可能是因为软件的开发人员认为应该独辟蹊径,这样别人才能注意到自己的软件,或者根本没有意识到Windows和DOS的不同。那么和当前用户相关的设置为什么不保存在注册表的HKEY_CURRENT_USER根键下,而是保存在HKEY_LOCAL_MACHINE根键下?这估计是因为设计人员没有意识到现在的多用户操作系统和以往的单用户操作系统之间的本质区别。至于将配置文件写入到Windows目录下,你应该知道自己的Windows使用很长时间后为什么会出现那么多乱七八糟不清楚作用的文件了吧。

让我们看看这样的程序在安装和运行过程中会遇到多少因为UAC导致的兼容性问题,下文中简述的安装和运行过程中可能导致触发UAC的事件都会标记出来。首先,在安装时,需要在C盘根目录下创建文件夹,而标准权限的账户可能无权这样做,这可能会触发UAC进行提升(一次)。在随后的运行过程中,和用户有关的配置因为需要写入HKEY_LOCAL_MACHINE根键,而标准权限的用户是无权直接写入这里的,因此会再次触发UAC(两次)。最后,因为需要给Windows目录下保存配置文件,而标准权限的用户无权直接写入这个目录,会触发UAC(三次)。当然,上述情况只是模拟的过程,实际的安装和运行过程中需要的提升次数可能会更多,或者虽然不需要提升,但软件的正常功能受到影响,无法使用。

那么对于设计良好的软件,在这个过程中会有怎样的表现?首先,在安装过程中,软件会根据系统的实际情况判断系统盘的盘符,并将默认的安装位置设置为系统盘的“Program Files”目录下,这个过程需要UAC提升(一次)。在随后的运行过程中,和用户有关的配置被保存到注册表的HKEY_CURRENT_

USER根键下,因为每个登录的账户对该根键都具有所有权限,因此不需要UAC提升。最后,如果软件需要生成配置文件,那么也许会将配置文件保存在软件的安装目录下,或者当前用户的“我的文档”文件夹中,这两种情况下可能根本不需要UAC的提升。

可见,如果我们使用的程序能够严格遵循设计标准,那么无论是在安装还是运行过程中,受到UAC的干预次数将会被降到最少,只是很遗憾,因为各种原因目前很多软件对相应设计标准的支持程度依然不是很足,但这已经不是某几家公司或者用户本身可以决定的了。

二、用户账户控制干扰的缓解

虽然目前的大环境导致UAC在实际使用过程中会遇到各种问题,不过我们依然可以通过一些方法让UAC对我们的干扰能够降到最低。

1.禁用UAC

虽然强烈建议不这样做,但如果你确实习惯不了UAC,或者自己必须使用的软件在启用UAC的情况下会遇到各种问题,那么也可以考虑禁用UAC。

打开“控制面板”,依次进入“用户账户和家庭安全→用户账户”,在出现的窗口中点击“打开或关闭用户账户控制”选项,并再次响应UAC的提升操作。然后取消“使用用户账户控制(UAC)帮助保护你的计算机”选项,点击“确定”按钮。这样,重启动系统后,UAC已经被禁用。

如果希望重新启用UAC,只要选中上述选项,并重启动系统即可。

在禁用UAC后,Windows Vista会使用安全中心通过气球图标通知我们当前的系统配置存在安全隐患,并且这个通知不会消失,会一直显示在通知区域。如果觉得每次登录后都面对这个提示信息有些烦人,则可以按照下列步骤操作:

打开控制面板,依次进入到“安全→安全中心”,点击左侧窗口中的“更改安全中心通知我的方法”链接。在随后出现的窗口中,如果选择“不通知我,但显示图标”选项,那么以后在通知区域就会显示一个红色的盾牌图标,告诉我们系统有安全性问题,但是不会出现气球图标;如果选择“不通知我,且不显示该图标(不推荐)”选项,则不仅不会显示气球图标,而且通知区域也不会显示任何盾牌图标。

注意:上述选项不仅会对UAC起作用,任何安全中心程序可以监控的安全状态都会受到影响。例如,如果反病毒软件过期或者防火墙被关闭,安全中心也会按照我们在上文中的设置处理,可能不会出现任何安全提示。因此在使用该方法后请注意定期手工检查系统的安全状态。

2.在不重启动系统的情况下临时绕过UAC

很多人可能会遇到这样的问题:新安装好的系统,需要对很多系统选项进行调整,这时往往会频繁触发UAC。次数太多,难免有些烦人,但是自己又不想临时禁用UAC,在调整完毕之后重新启用,因为这样需要重启动操作系统。这时可以试试看下述方法:

在任务栏的空白处点击右键,选择“任务管理器”命令,打开“Windows任务管理器”对话框。

点击“进程”选项卡,从进程列表中选中“explorer.exe”进程,点击“结束进程”按钮,将该进程结束。点击“显示所有用户的进程”按钮,这时候UAC会需要进行提升。

点击“文件→新建任务(运行)”菜单命令,并在随后出现的对话框中输入“explorer.exe”并按下回车,然后按照正常情况对系统设置进行更改。

在进行上述操作时,当点击“显示所有用户的进程”按钮时,我们已经对任务管理器进行了提升,这样任务管理器将使用管理员访问令牌运行。而随后我们使用任务管理器运行了“explorer.exe”,这属于Windows的外壳,也就是我们看到的任务栏、开始菜单、桌面图标等内容,因为任务管理器已经经过了提升,因此重新运行的Windows外壳也将直接使用管理员令牌运行。进而通过Windows外壳再次调整系统设置时,我们直接可以提供管理员的访问令牌,而不再需要提升。

那么在设置完所有选项,想要重新使用标准访问令牌运行Windows外壳时又该怎样?其实很简单,只要注销后重新登录或者重启动系统即可。或者你也可以关闭之前提升过的任务管理器程序,然后重新运行,这时候任务管理器将使用标准令牌运行。在进程选项卡上结束explorer.exe进程,然后重新启动该进程即可。

3.直接使用管理员身份运行程序

有时候我们可能会面临这样的情况:一个程序,平时使用标准令牌运行即可,但偶尔可能需要使用管理员身份运行。对于这种程序,我们可以这样操作:

找到运行该程序的快捷方式,或者对应的可执行文件,用鼠标右键点击。选择“以管理员身份运行”命令,然后接受UAC的提升。

通过上述方法,我们可以直接以管理员身份运行一个程序一次。

但如果某个程序每次都需要使用管理员程序运行,而直接运行时并不会弹出UAC提升对话框(发生这种现象的主要原因在于程序和Windows Vista兼容性不好,无法在运行时向系统宣告自己所需的特权),那么可以这样操作:

在程序的快捷方式,或者对应的可执行文件上点击鼠标右键,选择“属性”命令,在打开的对话框中点击“兼容性”选项卡。选中“请以管理员身份运行该程序”选项,点击“确定”按钮(如图5所示)。经过上述设置,当前用户再次直接双击运行该程序时将直接弹出UAC提升对话框。

uac5.jpg
图5

如果希望本机的所有用户在执行该程序时都可以自动进行提升,也就是说希望将自己的设置应用给其他账户,那么可以点击“显示所有用户的设置”按钮,然后再选择上述选项。

如果一个程序在Windows Vista下直接双击执行时会遇到各种奇怪的问题,那么建议试试看选中上述选项。如果是UAC的问题,那么在按照上文方法操作后应该可以解决问题。

三、用户账户控制策略调整

如果你的Windows Vista版本是商业版、企业版或者旗舰版,那么通过调整本地安全策略,可以对UAC的行为作进一步调整。

提示:Windows Vista家庭基础版和家庭高级版不具备下列功能。

在“开始”菜单的“开始搜索”框里输入“secpol.msc”并回车,打开“本地安全策略”窗口,然后在左侧窗格中依次进入“安全设置→本地策略→安全选项”,随后右侧窗格中将会出现很多策略。这里主要接收以“用户账户控制”字样开头的策略。

1.标准用户的提升提示行为

该策略决定了是否允许标准用户进行提升。这里有两个选项可供选择:“提示凭据”和“自动拒绝提升请求”。其中,前者可以允许标准用户进行提升,也就是说,标准用户如果知道管理员用户的密码,那么就可以通过输入密码的方式运行原本自己无权运行的东西;如果选择后一个选项,那么在标准用户的某些操作需要提升时,系统根本不会提供输入管理员密码的选项,而是直接禁止。

如果你的电脑别人也在使用,而你不希望别人通过提升来运行你不希望对方使用的功能,那么可以将该策略设置为“自动拒绝提升请求”。

2.管理员批准模式中管理员的提升提示行为

该策略决定了当使用管理员账户登录后,一旦需要提升,系统可以采取的操作。可用的选项有“不提示,直接提升”、“提示凭据”和“同意提示”三种。

如果选择“不提示,直接提升”,那么当管理员运行的程序需要提升时,系统将不会出现上文中图3所示的要求确认的对话框,而是直接运行。这等于说UAC对所有管理员账户将处于不生效的状态(其实还是生效,只不过不需要进行提升而已)。

如果选择“提示凭据”,那么当管理员运行的程序需要提升时,系统将显示类似上文中图4所示的对话框,要求管理员用户也必须在输入自己或者其他管理员用户的密码后才可以提升。

如果选择“同意提示”,那么管理员运行的程序需要提升时,系统将显示类似上文中图3所示的对话框,管理员账户只需要确认即可继续(这是Windows Vista的默认选项)。

对于安全性要求较高的用户,完全可以将该策略设置成“提示凭据”,这样管理员也必须在输入自己的密码后才可以提升。这就避免了你使用管理员账户登录,但短时间离开电脑后他人使用你的帐号直接提升并进行操作的可能。

3.提示提升时切换到安全桌面

默认情况下,无论当前用户是管理员账户还是标准账户,当需要进行UAC提升时,屏幕会首先“黑”一下,然后屏幕上其他内容变暗,只有提升对话框是亮的,这就是安全桌面。安全桌面的功能主要是为了进一步提高系统的安全性,以防止其他程序伪造安全桌面来诱骗用户提交自己的用户名和密码。

应该说,这是一种很安全的行为,因为在安全桌面上其他程序都将在后台运行,除了UAC的提升对话框外,其他程序都将变得不可操作。但是安全桌面可能会令一些电脑的速度变慢,因为安全桌面的实际原理是对整个桌面截图,然后全屏显示在屏幕上,并在截图的上层显示UAC的提升对话框。这个过程对于一些配置较低的计算机来说确实有些慢,因此我们可以将该策略禁用。

4.以管理员批准模式运行所有管理员

该策略决定了是否对管理员账户启用UAC,并且默认设置是“启用”。在默认设置下,管理员账户都将受到UAC的限制,进行某些操作时需要提升(至于具体的提升方式则取决于上文介绍的相应策略)。

如果希望UAC只对非管理员账户生效,那么大可将该策略禁用,不过这样做会降低安全性,如果不是因为有什么特殊的原因,不建议这样做。

5.用于内置Administrator账户的管理员批准模式

该策略决定了系统内置的Administrator账户是否受到UAC的影响,并且默认设置是“已禁用”,这就表示除了系统内置的Administrator账户外,其他管理员账户都会受到UAC的限制。如果启用该策略,那么Administrator账户也将受到UAC的限制。如果对系统安全性要求较高,那么可以考虑启用该策略。