Windows(R) 7 针对具有标准用户权限的最终用户帐户的运行提供了一套简单的机制,同时又消除了执行常见任务(如安装打印机驱动程序或连接到无线网络)时需要提供管理员权限的要求。这一根本性的转变提供了操作系统级别的安全性,这一安全性是通过阻止恶意软件和 root kit 损坏公司范围内的文件和设置而实现的。

用户帐户控制 (UAC) 基于最低权限安全理论,即用户应该拥有执行分配的任务所需的绝对最低的权限的理念。在基于 UNIX 的应用程序的子系统中所做的与 UAC 兼容的更改包括最低权限用户帐户 (LUA) 的使用。

用户帐户控制

“用户帐户控制”是 Windows 7 中随 Windows Vista 引入的一项安全功能。

用户帐户控制的主要目标是,通过要求所有用户在标准用户模式下运行并限制管理员级别人员对已授权进程的访问,来降低 Windows 7 操作系统的暴露程度和减少其受攻击面。这一限制可将用户的更改能力减至最低,避免由于用户的更改造成计算机稳定性下降,也可避免不经意间使网络可能受到已感染计算机但尚未被检测出的恶意软件所传播的病毒的侵害。

默认情况下,Windows 7 使用标准用户运行所有应用程序,即使当前用户作为管理员组成员身份登录也是如此。相反,当用户尝试启动已标记为要求管理员权限的应用程序时,Windows 7 将提示用户是否确实要这样做。只有以管理员权限运行的应用程序才可修改系统和全局设置及行为。

有关用户帐户控制的详细信息,请参阅 Microsoft 网站上主题为“了解和配置 Windows Vista 中的用户帐户控制”的页面 (https://go.microsoft.com/fwlink/?LinkId=70242)(可能为英文网页)。

基于 UNIX 应用程序的子系统中的用户帐户控制和最低权限

当基于 UNIX 应用程序的子系统用户(该用户为管理员组成员)启动应用程序、shell 或其他任务时,这些应用程序将在标准用户的安全上下文中运行。

以下示例演示了用户帐户控制如何阻止拥有管理员组成员身份但没有提升的权限的用户执行管理任务。

用户 A 是管理员组的成员,要在 /(根)目录中创建名为 test 的新目录。只有管理员组成员才有资格在根目录中创建新目录。但是,尽管用户 A 是管理员组的成员,由于 LUA 限制,该用户也无法创建新目录。用户 A 可使用提升的权限打开 Korn shell,这样即可在根目录中创建 test 目录。

若要使用提升的权限运行应用程序或执行任务,请参阅以下过程。

以管理员身份运行应用程序的方法

凭借基于 UNIX 应用程序的子系统及其下载的工具软件包和安装的实用程序,提供了两种以管理员身份运行应用程序的方法。

使用 Windows 界面

使用基于 UNIX 的命令行

使用 Windows 界面

若要在需要管理权限的 Windows 用户界面上运行应用程序,请执行以下步骤。

以管理员身份在 Windows 界面中运行应用程序的步骤
  1. 右键单击应用程序的可执行文件。

  2. 在快捷菜单上,单击“以管理员身份运行”

使用基于 UNIX 的命令行

若要在需要管理权限的基于 UNIX 的 Korn shell 环境中运行应用程序,请执行以下步骤。

以管理员身份在 Korn shell 中运行应用程序的步骤
  1. 依次单击“开始”“所有程序”“基于 UNIX 的应用程序子系统”,然后指向“Korn shell”

  2. 右键单击“Korn shell”,然后单击“以管理员身份运行”

  3. 当提示是否允许 shell 以管理员身份运行时,单击“是”

  4. 运行需要管理员权限的程序。

  5. 在运行完毕需要提升的权限的应用程序之后,请关闭 shell 会话。

    若要在不需要管理员权限的基于 UNIX 的 shell 环境中执行其他任务,请打开一个新的 shell 会话而不要使用“以管理员身份运行”命令。

EnableSuToRoot 注册表项

默认情况下,用户帐户控制已启用。如果已启用用户帐户控制,任何模拟管理员组成员的其他用户(通过使用 sucronlogin 实用程序(如 setuid、任一 setuidexec_asuser 调用系列)进行模拟)的应用程序或任务总是在标准用户帐户的安全上下文中运行。

注意

当应用程序模拟标准用户运行时,它将具有标准用户全部的安全上下文。有关标准用户的详细信息,请参阅 Microsoft 网站上主题为“最低权限环境中使用的应用程序的开发人员最佳实践和指南”简介部分 (https://go.microsoft.com/fwlink/?LinkId=70243)(可能为英文网页)。

使用默认设置,应用程序无法模拟根用户。可以通过修改注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SUA\EnableSuToRoot 来控制此行为。

修改 EnableSuToRoot 注册表项的方法

重要

默认情况下,在 Windows 7 和 Windows Server 2008 R2 中,管理员帐户为禁用状态,这有助于防止未授权用户或恶意用户访问计算机和数据,而管理员帐户必须是启用状态用户才能模拟根用户或管理员。因为必须首先启用管理员帐户才能更改 EnableSuToRoot 注册表项的设置,所以完成此任务的过程紧随其后。您必须是本地计算机上管理员组的成员,才能完成以下过程。

启用管理员帐户的步骤
  1. 单击“开始”,右键单击“计算机”,然后单击“管理”

  2. “计算机管理”管理单元的层次结构窗格中,打开“本地用户和组”

  3. 选择“用户”

  4. 在结果窗格中,右键单击“管理员”,然后单击“属性”

  5. 清除“帐户已禁用”选项的复选框。

  6. 单击“确定”

  7. 关闭“属性”窗口,然后关闭“计算机管理”管理单元。

在安装基于 UNIX 应用程序的子系统之后,请执行以下步骤来更改 EnableSuToRoot 注册表项的设置。

更改 EnableSuToRoot 注册表项的设置的步骤
  1. 单击“开始”,在“开始搜索”文本框中单击,然后键入 regedit 以打开注册表编辑器。

  2. 在层次结构窗格中,打开 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SUA

  3. 在结果窗格中,双击“EnableSuToRoot”

  4. “数值数据”框中,输入 0 以禁止模拟根用户,或者输入 1 以允许模拟根用户。

    默认设置为 0。

  5. 单击“确定”

  6. 关闭注册表编辑器;如果提示保存,请保存更改。

当此项的值设置为 0(默认设置)时,将不允许模拟根用户。当该值设置为 1 时,将允许模拟根用户。当应用程序模拟根用户或 Administrator 帐户运行时,该应用程序将具有根 (Administrator) 用户的管理安全上下文。

Setuid 权限和管理权限

如果管理员组成员的用户尝试使用 setuid 属性标记应用程序,则只有该用户在管理安全环境中可以运行应用程序和执行任务时,该操作才会成功。

下面是如何标记二进制文件 /bin/regpwd 的一个示例,通常使用 setuid 属性进行标记:

  1. 使用本主题所述的提升权限打开 Korn shell (ksh)。

  2. 键入 chmod +s /bin/regpwd,然后按 “Enter”

  3. 键入 exit 以关闭 ksh 会话。

请参阅