Vista重头戏-UAC (User Account Control)

来源:互联网 发布:js点击缓慢显示隐藏 编辑:程序博客网 时间:2024/04/27 14:47

·inamoto 发表于 2006-5-15 11:28:55

UAC的加入可以算是Vista中的一个重头戏,这个功能以前叫做User Account Protection(用户帐户保护),最近更名为User Account Control(用户帐户控制)。

为什么要使用UAC

  在介绍这个功能之前,我们先了解一下Windows中的各种权限是如何控制的。这部分主要以单机或工作组环境下的Windows XP Professional为例,同时也适用于Windows 2000/2003,不适用于Windows 9x。

  系统安装好后,所有用户的凭据信息(也就是用户名和密码)都被保存在SAM(Security Accounts Manager,安全帐户管理器)数据库中。当用户登录系统时,首先要输入用户名和密码,这些信息由winlogon进程获取,并由LSA(Local Security Authority,本地安全验证)子系统在SAM数据库中进行验证。如果SAM数据库中有符合条件的记录,那么LSA子系统就会生成一个访问令牌(Access Token),并传递给用户。当该用户需要运行程序或者访问资源的时候,系统首先会从用户持有的访问令牌中找到用户的权限信息,然后和想要进行的操作所需要具有的权限进行比较,如果权限足够大,那么就可以进行相应的操作;而如果权限不足,操作则会被禁止。

  以运行程序为例,当我们试图启动一个程序的时候,系统会使用我们的访问令牌来启动程序,这样这个程序就拥有了和本人一样的权限。为了证实这一点,我们可以打开Windows任务管理器的进程选项卡。该选项卡下列出了当前系统中的所有进程,每个进程在“用户名”一栏就显示了该进程的“身份”。以图6中的几个进程为例,csrss.exe是系统进程,因此用户名一栏显示的是“SYSTEM”;emeditor.exe是当前登录的用户启动的程序,因此用户名一栏显示的是当前用户的用户名;emule.exe虽然也是当前用户启动的,不过在启动的时候使用了Runas命令,因此看起来该程序就好像其他用户启动的。当然,因为这三个进程使用了不同的访问令牌(也就是用户身份),那么这三个程序的权限也就会有所不同。
       你可能觉得,这是一套相当安全并且方便的机制,因为只要在登录系统的时候输入一次用户名和密码,就可以在整个登录过程中直接执行任何具有权限的操作。同时只要保护好SAM数据库,也就不用担心系统的安全问题。然而事实远非如此,这样的做法虽然方便,不过却相当不安全。

  我们可以考虑这样的情况:使用管理员帐户登录系统后,我们运行的任何程序自然也将具有管理员权限。如果我们不小心运行了网上下载的含有恶意程序的文件会怎样?恶意程序在运行的时候会使用当前用户的访问凭据,也就是说程序的进程也具有了管理员权限,进而该进程可以对系统进行任何操作。意识到其中包含的风险了吧。

  所以很多介绍系统安全的文章都会建议,平时使用计算机的时候最好不要用管理员帐户登录,而是用权限小一些的帐户,只有在偶尔需要进行维护或者其他必要操作的时候才使用管理员帐户,或者直接使用Runas命令。这样才能保证系统安全。

  UAC是如何解决这个问题的

  启用UAC后,我们依然可以使用管理员帐户登录系统,不过即使这样,当我们运行程序的时候,程序所能得到的权限依然非常小,这些权限不足以对关键的系统设置进行修改,这样也就尽量避免了上文说到的问题。

  而当我们需要对某些重要的系统设置进行更改时,这里可以分两种情况讨论。

  假设当前登录的帐户已经具有更改系统设置所需的权限,那么Vista会显示一个警告对话框,询问我们是否继续,只有选择继续,才可以进行设置。

  而如果当前登录系统的帐户不具有相应的权限,Vista首先将会显示一个对话框,要求用户输入一个具有权限的帐户的用户名和密码,如果输入的信息是正确的,则可以完成操作,否则将会被拒绝。

  见识UAC

  当前我们已经使用管理员帐户登录了系统,而在5365中UAC默认是启用的。如何知道哪些操作需要UAC进行确认?我们试试看打开系统属性对话框,从图7可以看到,大部分选项都没有什么区别,不过在窗口左侧列出的各项任务名称前面都有一个彩色的盾牌。这些盾牌表明,该选项是受UAC保护的,需要确认权限之后才可以设置。
我们试试看点击一个受保护的选项,整个屏幕会黑一下,然后UAC窗口显示出来,与此同时屏幕上的其他内容都会变暗,以突出UAC窗口。在这个窗口中,我们可以看到发起该操作的程序的名称,以及将要进行的操作。如果确认这是自己想要进行的,就点击“Continue(继续)”按钮,否则就点击“Cancel(取消)”按钮。

  UAC的兼容性

  以前还叫UAP的时候,我们讨论最多的是UAP和其他软件的兼容性。现在改名叫UAC了,软件的兼容性问题依然存在,不过这里准备讨论一下硬件兼容性。

  写这篇文章用的测试机器使用了ATI Radeon 9800 Pro显卡(使用Vista自带驱动),Viewsonic VA1912w显示器,通过DVI接口将显示器和显卡连接。前面已经说过,当我们点击一个受UAC保护的选项后,屏幕首先会黑一下,UAC的硬件兼容性问题就在这“黑”一下中。

  “黑屏”的时候发生了什么?Smallfrogs在自己的Blog中有一个详细的介绍,大家可以在这里看到:http://blogs.itecn.net/blogs/smallfrogs/archive/2006/04/23/2195.aspx 。可以想象,经过这样的处理,UAC可以变得更安全,因为UAC窗口出现后,其他所有程序都将无法操作,只有在经过验证同意操作,或者取消验证返回Vista桌面后才可以继续操作其他程序。这样做可以有效避免其他软件干扰UAC的运作,提高安全性。

  可能是Vista的设计,或者显卡驱动的影响,或者其他原因,导致Vista使用“抓”出来的图片替换正常桌面的时候需要重绘Windows桌面(图8),而测试所用的LCD显示器在这种情况下会自动显示一个对话框,提醒用户当前正在显示来自DVI接口的数字信号。显示器本身并没有提供禁用这个对话框的选项,并且对话框的位置无法更改(显示在屏幕中央),而UAC窗口大部分情况下也会显示在屏幕中央。这就导致了显示器自己的提示窗口覆盖了UAC窗口的内容,只有等待几秒钟,显示器自己的提示窗口消失后才可以进行操作。或者我们也可以将UAC窗口拖动到屏幕的其他位置,不过这个位置无法保存,以后出现的每个UAC窗口都需要再次拖动。
    
      禁用UAC

  UAC只能由系统自动启用,想要关闭它可要费点心。运行msconfig打开系统配置实用程序,切换到Tools选项卡,在工具列表中选中“Disable UAP”(这里还是叫UAP,看来开发工作还是任重道远的),然后点击窗口右下角的“Launch(启动)”按钮,重启动系统后该功能就被禁用了。