1访问控制
Windows可以通过相互关联的身份验证和授权机制来控制系统和网络资源的使用。在用户通过身份验证后,Windows 操作系统使用内置的授权和访问控制技术来实现资源的保护,在确定用户身份后,确认用户是否具有访问资源的正确权限。
授权用户、组和计算机访问网络或计算机上的对象的过程。构成访问控制的关键概念是权限、对象所有权、权限继承、用户权限和对象审计。
1.1特权
特权是一个帐户(如用户或组帐户)在本地计算机上执行各种系统相关操作(如关闭系统、加载设备驱动程序或更改系统时间)的权限。特权与访问权限有两个不同之处:
特权控制对系统资源和系统相关任务的访问,而访问权限控制对安全对象的访问。
系统管理员为用户和组帐户分配特权,系统根据安全对象的DACL中的ACE授予的访问权限授予或拒绝对安全对象的访问。
每个系统都有一个帐户数据库,该数据库存储用户和组帐户拥有的特权。当用户登录时,系统生成一个访问令牌,其中包含用户权限的列表,包括授予用户或用户所属组的权限。注意,这些特权只适用于本地计算机;域帐户可以在不同的计算机上拥有不同的特权。
当用户尝试执行特权操作时,系统检查用户的访问令牌,以确定用户是否拥有必要的特权,如果拥有,则检查是否启用了特权。如果测试失败,系统将不再执行该操作。
2Windows账户
本地用户帐户存储在服务器本地。可以为这些帐户分配特定的权限。本地用户帐户是安全主体,用于保护和管理服务或用户对独立服务器或成员服务器上的资源的访问
2.1Default local user accounts
默认本地用户帐户是安装 Windows 时自动创建的内置帐户。
Windows 安装后,默认的本地用户帐户无法删除。此外,默认本地用户帐户不提供对网络资源的访问。
2.1.1Administrator account
默认的本地管理员帐户是系统管理员的用户帐户。每台计算机都有一个管理员帐户(SID S-1-5-域-500,显示名称为管理员)。管理员帐户是在 Windows 安装过程中创建的第一个帐户。
管理员帐户可以完全控制本地计算机上的文件、目录、服务和其他资源。管理员帐户可以创建其他本地用户、分配用户权限和分配权限。管理员帐户可以随时通过更改用户权限和权限来控制本地资源。
默认管理员帐户无法删除或锁定,但可以重命名或禁用。
2.1.2来宾帐户
安装时默认禁用来宾帐户。来宾帐户允许在计算机上没有帐户的临时用户或一次性用户以有限的用户权限临时登录到本地服务器或客户端计算机。默认情况下,Guest 帐户的密码为空。由于Guest 帐户可以提供匿名访问,因此存在安全风险。因此,最好禁用 Guest 帐户,除非完全有必要使用它。
2.1.3HelpAssistant account (installed with a Remote Assistance session)
helassistant帐户是在运行远程协助会话时启用的默认本地帐户。当没有等待的远程协助请求时,此帐户将自动禁用。
helassistant是用于建立远程协助会话的主要帐户。远程协助会话用于连接到另一台运行Windows操作系统的计算机,它是由邀请端发起的。接受用户的远程协助会话邀请后,将自动创建默认的helassistant帐户,以限制提供协助的人访问计算机。
2.1.4DefaultAccount
DefaultAccount,也称为默认系统管理帐户(Default System Managed Account, DSMA),是Windows 10版本1607和Windows Server 2016中引入的内置帐户。DSMA是一种众所周知的用户帐户类型。它是一个用户中立帐户,可用于运行多用户感知或用户不可知的进程。
2.2Default local system accounts
2.2.1SYSTEM
SYSTEM 帐户由操作系统和在 Windows 下运行的服务使用。Windows 操作系统中有许多服务和进程需要能够在内部登录,例如在 Windows 安装期间。SYSTEM 帐户就是为此目的而设计的,Windows 管理 SYSTEM 帐户的用户权限。它是一个内部帐户,不会显示在用户管理器中,也不能添加到任何组中。
另一方面,SYSTEM 帐户确实出现在“文件管理器”中“安全”菜单的“权限”部分中的NTFS 文件系统卷上。默认情况下,SYSTEM 帐户被授予对 NTFS 卷上所有文件的完全控制权限。此处 SYSTEM 帐户与管理员帐户具有相同的功能权利和权限。
2.2.2NETWORK SERVICE
NETWORK SERVICE 帐户是服务控制管理器 (SCM) 使用的预定义本地帐户。在 NETWORK SERVICE 帐户上下文中运行的服务向远程服务器提供计算机的凭据。
2.2.3LOCAL SERVICE
LOCAL SERVICE 帐户是服务控制管理器使用的预定义本地帐户。它在本地计算机上具有最低权限,并在网络上提供匿名凭据
2.3Active Directory Accounts
活动目录(Active Directory)主要提供以下功能:
服务器及客户端计算机管理:管理服务器及客户端计算机账户,所有服务器及客户端计算机加入域管理并实施组策略。
用户服务:管理用户域账户、用户信息、企业通讯录(与电子邮件系统集成)、用户组管理、用户身份认证、用户授权管理等,按省实施组管理策略。
资源管理:管理打印机、文件共享服务等网络资源。
桌面配置:系统管理员可以集中的配置各种桌面配置策略,如:用户使用域中资源权限限制、界面功能的限制、应用程序执行特征限制、网络连接限制、安全配置限制等。
应用系统支撑:支持财务、人事、电子邮件、企业信息门户、办公自动化、补丁管理、防病毒系统等各种应用系统。
2.4Service Accounts
服务帐户是为在 Windows Server 操作系统上运行的服务提供安全上下文而明确创建的用户帐户。安全上下文决定了服务访问本地和网络资源的能力。Windows 操作系统依靠服务来运行各种功能。这些服务可以通过应用程序、服务管理单元、任务管理器或使用 Windows PowerShell 进行配置。
2.5微软账户
3用户帐户控制(User Account Control)
3.1什么是UAC
用户帐户控制 (UAC) 有助于防止恶意软件损坏 PC,并帮助组织部署更好管理的桌面。使用 UAC,应用程序和任务始终在非管理员帐户的安全上下文中运行,除非管理员专门授权管理员级别的系统访问权限。UAC 可以阻止未经授权的应用程序的自动安装并防止无意中更改系统设置。
UAC 允许所有用户使用标准用户帐户登录他们的计算机。使用标准用户令牌启动的进程可以使用授予标准用户的访问权限来执行任务。例如,Windows 资源管理器自动继承标准用户级别权限。此外,使用 Windows 资源管理器启动的任何应用程序(例如,通过双击快捷方式)也以标准用户权限集运行。许多应用程序,包括操作系统本身附带的应用程序,都旨在以这种方式正常工作。
当应用程序需要以超过标准的用户权限运行时,UAC 可以将其他用户组恢复到令牌。这使用户能够明确控制对其计算机或设备进行系统级别更改的应用程序。
3.2工作原理
每个需要管理员访问令牌的应用程序都必须让用户同意授权。唯一的例外是父进程创建子进程,子进程从父进程继承用户的访问令牌。但是,父进程和子进程必须具有相同的完整性级别。Windows 10通过标记进程的完整性级别(integrity level)来保护进程。完整性级别是账户控制的衡量标准。
为了更好地理解这个过程是如何发生的,让我们看看Windows登录过程。
3.2.1登录流程
下面显示了管理员的登录过程与标准用户的登录过程有何不同。
默认情况下,标准用户和管理员在标准用户的安全上下文中访问资源和运行应用程序。当用户登录到计算机时,系统会为该用户创建访问令牌。访问令牌包含有关授予用户的访问级别的信息,包括特定的安全标识符 (SID) 和 Windows 权限。
当管理员登录时,会为用户创建两个单独的访问令牌:标准用户访问令牌和管理员访问令牌。标准用户访问令牌包含与管理员访问令牌相同的用户特定信息,但删除了管理 Windows 权限和 SID。标准用户访问令牌用于启动不执行管理任务的应用程序(标准用户应用程序)。然后使用标准用户访问令牌来显示桌面 (explorer.exe)。Explorer.exe 是所有其他用户启动的进程从中继承其访问令牌的父进程。因此,除非用户提供同意或凭据以批准应用程序使用完整的管理访问令牌,否则所有应用程序都以标准用户身份运行。
作为管理员组成员的用户可以在使用标准用户访问令牌的同时登录、浏览 Web 和阅读电子邮件。当管理员需要执行需要管理员访问令牌的任务时,Windows 10 会自动提示用户批准。此提示称为提升提示,可以使用本地安全策略管理单元 (Secpol.msc) 或组策略配置其行为
3.3UAC架构
3.3.1虚拟化
Windows 10 包括文件和注册表虚拟化技术,适用于不符合 UAC 并且需要管理员的访问令牌才能正确运行的应用程序。当不符合 UAC 标准的管理应用程序尝试写入受保护的文件夹(例如 Program Files)时,UAC 会为应用程序提供它自己尝试更改的资源的虚拟化视图。虚拟化副本保存在用户的配置文件中。此策略为运行不合规应用程序的每个用户创建单独的虚拟化文件副本。
大多数应用程序任务通过使用虚拟化功能正常运行。尽管虚拟化允许大多数应用程序运行,但它是一种短期解决方案,而不是长期解决方案。应用程序开发人员应尽快修改他们的应用程序以使其合规,而不是依赖文件、文件夹和注册表虚拟化。
特殊情况:
• 虚拟化不适用于提升并使用完整管理访问令牌运行的应用程序。
• 虚拟化仅支持 32 位应用程序。未提升的 64 位应用程序在尝试获取 Windows 对象的句柄(唯一标识符)时只会收到拒绝访问消息。本机 Windows 64 位应用程序需要与 UAC 兼容并将数据写入正确的位置。
• 如果应用程序包含具有请求的执行级别属性的应用程序清单,则禁用虚拟化。
3.4简单设置UAC
可以使用安全策略来配置用户帐户控制在您的组织中的工作方式。它们可以使用本地安全策略管理单元 (secpol.msc) 在本地配置,也可以通过组策略为域、OU 或特定组配置。
3.4.1管理员审批模式
此策略设置控制内置管理员帐户的管理员批准模式的行为。
•已启用内置管理员帐户使用管理员批准模式。默认情况下,任何需要提升权限的操作都会提示用户批准该操作。
• 禁用(默认) 内置管理员帐户以完全管理权限运行所有应用程序。
3.4.2允许 UIAccess 应用程序在不使用安全桌面的情况下提示提升
此策略设置控制用户界面辅助功能(UIAccess 或 UIA)程序是否可以为标准用户使用的提升提示自动禁用安全桌面。
•已启用的UIA 程序,包括 Windows 远程协助,会自动禁用安全桌面的提升提示。如果您不禁用“用户帐户控制:提示提升时切换到安全桌面”策略设置,提示会出现在交互式用户的桌面上,而不是安全桌面上。
•禁用(默认)安全桌面只能由交互式桌面的用户禁用,或者通过禁用“用户帐户控制:提示提升时切换到安全桌面”策略设置。
3.4.3管理员批准模式下管理员提升提示的行为
此策略设置控制管理员提升提示的行为。
•不提示提升权限 允许特权帐户执行需要提升权限的操作,而无需同意或凭据。
注意: 仅在最受限制的环境中使用此选项。
•在安全桌面上提示输入凭据当操作需要提升权限时,会在安全桌面上提示用户输入特权用户名和密码。如果用户输入有效凭据,操作将继续使用用户的最高可用权限。
•在安全桌面上提示同意当操作需要提升权限时,安全桌面上会提示用户选择“允许”或“拒绝”。如果用户选择 Permit,操作将继续使用该用户的最高可用权限。
•提示输入凭据当操作需要提升权限时,系统会提示用户输入管理用户名和密码。如果用户输入有效凭据,操作将继续使用适用的权限。
•同意提示当操作需要提升权限时,系统会提示用户选择“允许”或“拒绝”。如果用户选择 Permit,操作将继续使用该用户的最高可用权限。
•提示同意非 Windows 二进制文件(默认)当非 Microsoft 应用程序的操作需要提升权限时,安全桌面上会提示用户选择“允许”或“拒绝”。如果用户选择 Permit,操作将继续使用该用户的最高可用权限
3.4.4检测应用程序安装并提示提升
此策略设置控制计算机的应用程序安装检测行为。
•已启用(默认)当检测到需要提升权限的应用安装包时,系统会提示用户输入管理用户名和密码。如果用户输入有效凭据,操作将继续使用适用的权限。
•未检测到禁用的应用安装包并提示提升。运行标准用户桌面并使用委派安装技术(例如组策略或 Microsoft Endpoint Manager)的企业应禁用此策略设置。在这种情况下,不需要安装程序检测。
4访问控制模型
访问控制模型使用户能够控制进程访问安全对象或执行各种系统管理任务的能力。
访问控制模型有两个基本部分:
•访问令牌,其中包含有关登录用户的信息
•安全描述符,其中包含保护安全对象的安全信息。
当用户登录时,系统会验证用户的帐号名和密码。如果登录成功,系统将创建一个访问令牌。代表该用户执行的每个进程都将拥有该访问令牌的副本。访问令牌包含标识用户帐户和用户所属的任何组帐户的安全标识符。该令牌还包含用户或用户组拥有的特权列表。当进程试图访问安全对象或执行系统管理任务时,系统使用此令牌标识关联的用户
创建安全对象时,系统会为其分配一个安全描述符,该描述符包含其创建者指定的安全信息,如果未指定,则为默认安全信息。应用程序可以使用函数来检索和设置现有对象的安全信息。
4.1访问令牌
4.1.1访问令牌(Access Tokens)
访问令牌是描述进程或线程安全上下文的对象。令牌中的信息包括与进程或线程关联的用户帐户的身份和特权。当用户登录时,系统通过比对存储在安全数据库中的信息来验证用户的密码。如果验证了密码,系统将生成一个访问令牌。代表该用户执行的每个进程都有该访问令牌的副本。
当线程与安全对象交互或试图执行需要特权的系统任务时,系统使用访问令牌来标识用户。访问令牌包含以下信息:
每个进程都有一个主令牌,用于描述与该进程相关联的用户帐户的安全上下文。默认情况下,当进程的线程与安全对象交互时,系统使用主令牌。而且,线程可以模拟客户端帐户。模拟允许线程使用客户机的安全上下文与安全对象交互。模拟客户端的线程同时具有一个主令牌和一个模拟令牌。
4.1.2受限令牌(Restricted Tokens)
受限令牌是由CreateRestrictedToken函数修改的主或模拟访问令牌。在受限制令牌的安全上下文中运行的进程或模拟线程访问安全对象或执行特权操作的能力受到限制。
CreateRestrictedToken函数可以通过以下方式限制令牌:
• 从令牌中删除privileges
• 将deny-only属性应用于令牌中的sid,这样它们就不能用于访问受保护的对象。
• 指定一个限制sid的列表,它可以限制对安全对象的访问。
系统在检查令牌对安全对象的访问时使用限制 SID 列表。当受限进程或线程尝试访问安全对象时,系统会执行两种访问检查:一种使用令牌启用的 SID,另一种使用限制 SID 列表。仅当两个访问检查都允许请求的访问权限时才授予访问权限
4.1.3访问令牌中的SID属性(SID Attributes in an Access Token)
访问令牌中的每个用户和组安全标识符(SID)都有一组属性,用于控制系统在访问检查中如何使用SID。下表列出了控制访问检查的属性。
4.1.4令牌对象的访问权限(Access Rights for Access-Token Objects)
除非应用程序有权这样做,否则应用程序不能更改对象的访问控制列表。这些权限由对象访问令牌中的安全描述符控制
以下是访问令牌对象的有效访问权限:
ELETE、READ_CONTROL、WRITE_DAC 和 WRITE_OWNER标准访问权限。访问令牌不支持 SYNCHRONIZE 标准访问权限。
在对象的安全描述符中获取或设置 SACL的ACCESS_SYSTEM_SECURITY 权限。
访问令牌的具体访问权限,如下表所示。
4.2安全描述符
安全描述符包含与可安全对象关联的安全信息。安全描述符由SECURITY_DESCRIPTOR结构及其相关的安全信息组成。安全描述符可以包含以下安全信息:
应用程序不得直接操作安全描述符的内容。Windows API 提供用于设置和检索对象安全描述符中的安全信息的函数。此外,还有为新对象创建和初始化安全描述符的函数。
在 C++ 中为新对象创建安全描述符
4.3访问控制列表
ACL (access control list)是ACE (access control entry)的列表。ACL中的每个ACE标识一个受信者,并指定该受信者允许、拒绝或审计的访问权限。安全对象的安全描述符可以包含两种类型的acl: DACL和SACL。
自由访问控制列表(DACL)标识允许或拒绝访问安全对象的受托人。当进程试图访问安全对象时,系统会检查对象的DACL中的ace,以确定是否授予对该对象的访问权。如果对象没有DACL,系统将授予所有人完全访问权。如果对象的DACL没有ACEs,系统将拒绝所有访问对象的尝试,因为DACL不允许任何访问权限。系统依次检查ace,直到找到一个或多个允许所有请求的访问权限的ace,或者拒绝任何请求的访问权限。
系统访问控制列表(SACL)使管理员能够记录访问安全对象的尝试。每个ACE都指定指定受信者的访问尝试类型,这些访问尝试会导致系统在安全事件日志中生成一条记录。SACL中的ACE可以在访问尝试失败、成功或两者同时发生时生成审计记录。
4.4访问控制项Access Control Entries
ACE (access control entry)是访问控制列表(ACL)中的一个元素。一个ACL可以有0个或多个ace。每个ACE控制或监视指定受信者对对象的访问,其他三种类型是目录服务对象支持的Object-specific ACEs
4.4.1Trustees
Trustees是被授予使用一个资源或访问这个文件系统权力的用户。
4.4.2DACL 中 ACE 的顺序
当一个进程试图访问一个安全对象时,系统会遍历对象的自由访问控制列表(DACL) 中的访问控制条目(ACE),直到它找到允许或拒绝请求访问的 ACE。DACL 允许用户的访问权限可能因 DACL 中 ACE 的顺序而异。
以下步骤描述了首选顺序:
- 所有显式 ACE 都放置在任何继承的 ACE 之前的组中。
- 在显式 ACE 组中,拒绝访问的 ACE 放置在允许访问的 ACE 之前。
- 继承的 ACE 按照它们被继承的顺序放置。首先是从子对象的父对象继承的 ACE,然后是从祖父对象继承的 ACE,依此类推。
- 对于每一级继承的 ACE,拒绝访问的 ACE 放置在允许访问的 ACE 之前。
4.4.3ACE继承
对象的 ACL 可以包含它从其父容器继承的 ACE。例如,注册表子项可以从注册表层次结构中位于其上方的项继承 ACE。同样,NTFS 文件系统中的文件可以从包含它的目录继承 ACE。
ACE的ACE_HEADER结构包含一组继承标志,用于控制 ACE 继承和 ACE 对它所附加的对象的影响。系统根据ACE继承规则对继承标志和其他继承信息进行解释。
这些规则已通过以下功能得到增强:
支持可继承 ACE 的自动传播。
区分继承的 ACE 和直接应用于对象的 ACE 的标志。
特定于对象的 ACE,允许您指定可以继承 ACE 的子对象的类型。
通过在安全描述符的控制位中设置 SE_DACL_PROTECTED 或 SE_SACL_PROTECTED 位来防止 DACL 或 SACL 继承 ACE 的能力,SYSTEM_RESOURCE_ATTRIBUTE_ACE 和 SYSTEM_SCOPED_POLICY_ID_ACE 除外。
4.5访问权限和访问掩码
访问权限是一个位标志,它对应于线程可以在一个安全对象上执行的一组特定操作。例如,注册表项具有KEY_SET_VALUE访问权限,这与线程在键下设置值的能力相对应。如果线程试图对一个对象执行操作,但没有对该对象的必要访问权限,则系统不会执行该操作。
访问掩码是一个32位的值,对应对象支持的访问权限。所有Windows安全对象都使用访问掩码格式,该格式包含以下访问权限类型的位:
4.5.1访问掩码格式
所有安全对象都使用下图所示的访问掩码格式来安排其访问权限。
在这种格式中,低 16 位用于特定对象的访问权限,接下来的 8 位用于标准访问权限,适用于大多数类型的对象,高 4 位用于指定通用访问权限每个对象类型都可以映射到一组标准的和特定于对象的权限。ACCESS_SYSTEM_SECURITY 位对应于访问对象的 SACL 的权限。
4.5.2通用访问权限
4.5.3标准的访问权限
Constant Meaning
DELETE 删除对象的权限。
READ_CONTROL 读取对象安全描述符中信息的权限,不包括系统访问控制列表(SACL)中的信息
SYNCHRONIZE 使用对象进行同步的权利。这使线程能够等待,直到对象处于信号状态。某些对象类型不支持此访问权限。
WRITE_DAC 修改对象安全描述符中的自由访问控制列表(DACL)的权利。
WRITE_OWNER 在对象的安全描述符中更改所有者的权利。
4.6安全标识符
安全标识符(SID)是用于标识受信者的唯一可变长度值。每个帐户都有一个由权威机构(如Windows域控制器)颁发的唯一SID,并存储在安全数据库中。每当用户登录时,系统从数据库中检索该用户的SID,并将其放在该用户的访问令牌中。系统使用访问令牌中的SID在所有后续与Windows安全的交互中标识用户。当SID已被用作一个用户或组的唯一标识符时,就不能再用它来标识另一个用户
Windows安全在以下安全元素中使用sid:
在安全描述符中标识对象和主要组的所有者
在访问控制条目中,标识允许、拒绝或审核访问的受托人
在访问令牌中,标识用户和用户所属的组
了分配给特定用户和组的唯一创建的、特定于域的 SID 之外,还有用于标识通用组和通用用户的众所周知的 SID。例如,Everyone 和 World SID 标识一个包含所有用户的组。
4.6.1安全标识符结构
安全标识符是二进制格式的数据结构,包含可变数量的值。结构中的第一个值包含有关 SID 结构的信息。其余值按层次结构排列(类似于电话号码),它们标识 SID 颁发机构(例如,“NT 颁发机构”)、SID 颁发域以及特定的安全主体或组。下图说明了 SID 的结构。
Comment Description
Revision 指示在特定SID中使用的SID结构的版本
Identifier authority 标识可以为特定类型的安全主体发出sid的最高权限级别。例如,Everyone组的SID中的标识符权威值是1(世界权威)。特定Windows Server帐户或组的SID中的标识符权限值为5 (NT权限)。
Subauthorities 在SID中保存最重要的信息,这些信息包含在一系列一个或多个子权限值中。本系列中直到最后一个值(不包括最后一个值)的所有值共同标识企业中的一个域。本系列的这一部分称为域标识符。本系列中的最后一个值称为相对标识符(RID),它标识相对于域的特定帐户或组。
例如,内置管理员组的 SID 以标准化的 SID 表示法表示为以下字符串:
S-1-5-32-544
此 SID 有四个组成部分:
• 修订级别 (1)
• 标识符权限值(5,NT 权限)
• 域标识符(32,内置)
• 相对标识符(544,管理员)
Contoso\Domain Admins 的 SID 具有:
• 修订级别 (1)
• 一个标识符授权(5,NT Authority)
• 域标识符(21-1004336348-1177238915-682003330,Contoso)
• 相对标识符(512,域管理员)
Contoso\Domain Admins 的 SID 与同一企业中其他 Domain Admins 组的 SID 区别在于其域标识符:21-1004336348-1177238915-682003330。企业中没有其他域使用此值作为其域标识符。Contoso\Domain Admins 的 SID 通过其相对标识符 512 与在 Contoso 域中创建的其他帐户和组的 SID 区分开来。域中没有其他帐户或组的 SID 最终值为 512。
5AccessCheck是如何工作的
当一个线程试图访问一个安全的对象时,系统授予或拒绝访问。如果对象没有自由支配的访问控制列表(DACL),则系统授予访问权限;否则,系统将在对象的DACL中寻找应用于线程的访问控制项(ACEs)。对象的DACL中的每个ACE指定受信者允许或拒绝的访问权限,受信者可以是用户帐户、组帐户或登录会话。
系统将每个 ACE 中的受托人与线程的访问令牌中标识的受托人进行比较。访问令牌包含标识用户和用户所属的组帐户的安全标识符(SID)。令牌还包含标识当前登录会话的登录 SID。在访问检查期间,系统会忽略未启用的组 SID。
通常,系统使用请求访问的线程的主要访问令牌。但是,如果该线程正在模拟另一个用户,系统将使用该线程的模拟令牌。
系统按顺序检查每个 ACE,直到发生以下事件之一:
• 拒绝访问的 ACE 明确拒绝向线程的访问令牌中列出的受托者之一请求的任何访问权限。
• 线程的访问令牌中列出的受托者的一个或多个允许访问的 ACE 明确授予所有请求的访问权限。
• 所有 ACE 都已检查,但仍有至少一个请求的访问权限未被明确允许,在这种情况下,访问被隐式拒绝。
下图显示了对象的 DACL 如何允许访问一个线程同时拒绝访问另一个线程。
对于线程 A,系统读取 ACE 1 并立即拒绝访问,因为拒绝访问的 ACE 适用于线程访问令牌中的用户。在这种情况下,系统不检查 ACE 2 和 3。对于线程 B,ACE 1 不适用,因此系统继续执行允许写访问的 ACE 2 和允许读和执行访问的 ACE 3。
因为当请求的访问被明确授予或拒绝时,系统会停止检查 ACE,所以 DACL 中 ACE 的顺序很重要。请注意,如果示例中的 ACE 顺序不同,则系统可能已授予对线程 A 的访问权限。对于系统对象,操作系统在 DACL 中定义了首选的 ACE 顺序。
6开发需要管理员权限的应用程序
标准用户使用管理员权限运行程序的方法:
Topic Description
Elevated Task Model 以标准用户身份运行的应用程序通过启动计划任务来执行需要管理员权限的操作。
Operating System Service Model 通过使用远程过程调用(Remote Procedure Call, RPC)与作为SYSTEM运行的服务进行通信。
Administrator Broker Model 该应用程序分为两个程序。其中一个程序以标准用户身份运行,另一个程序以管理员权限运行。
Administrator COM Object Model 作为标准用户运行的应用程序通过创建提升的组件对象模型对象来执行需要管理员权限的操作。