| 关键词: 权限 nbsp 对象 主体 安全 Windows 系统 用户 进程 令牌 |
只要系统中有所动作,主体(可以是代表用户或服务执行操作的进程或线程)都会在对象上执行一些操作。比较常见的对象有文件、目录和注册表项。Windows 的基本安全机制包括使用可信的系统组件在执行操作之前检查权限和权利 (AccessCheck)。因此,可以通过设置权限和权利管理系统行为。因为在尚未理解权限和权利工作原理的情况下可能无法正确设置权限,所以我将首先介绍对象的安全设置及其处理方式,然后介绍如何为它们设置值。 在深入探讨技术细节之前,让我们先使用Windows 访问控制列表 (ACL) GUI 看看 Windows Server 2008 中的系统驱动器根目录权限。如果打开 Windows 资源管理器,选择“安全”选项卡、右键单击“本地磁盘 (C:)”,并选择“属性”,我们会看到管理员具备完全控制权限。如果单击“组或用户名”下的 SYSTEM,将会看见 SYSTEM 同样具有完全控制权限。当单击“组或用户名”下的 Users 时,权限情况则比较复杂:图1 中系统上的用户组具备 Read & Execute、List、Read 等权限。单击“高级”按钮将显示出与该用户组相关联的权限的详细视图(请参阅图2)。 图1 本地磁盘C 的用户权限 图2 C盘的用户权限高级视图 用户组的成员可以在系统驱动器根目录下创建文件夹并向文件添加数据。如果单击“编辑”按钮,您将看到另一项对子文件夹的“特殊”授权,如图3 所示。此操作需要管理员权限。 图3 用户特殊权利的编辑视图 您可以看到在 Windows Server 2008 中,普通用户默认可以在系统驱动器的根目录创建子文件夹,并向这些文件夹添加内容。为 Windows Server 2008 中用户组的成员提供该功能的原因是某些第三方软件假定存在这些权限,而 Microsoft 不想破坏应用程序的兼容性。 现在让我们开始讨论这些问题涉及的技术,并了解这些权限在用户所能看见的 GUI 界面之下的工作原理。在 Windows 中所有命名的对象都具有安全描述符,它提供有关其所有者的信息,并列出哪些用户和主体具有特定权限。描述符还可以指定必须在系统事件日志中记录哪些对象访问权限。 允许哪些主体(用户、进程等)操作某个对象或资源的信息在称为 ACL 的数据结构中指定。ACL 枚举谁(哪个主体)对具体对象具有哪类访问权限。自由 ACL (DACL) 是 ACL 的一种,在这种类型中对象的所有者可以更改权限。无论何时访问对象,都会将安全描述符与主体的权限进行比较以检验是否允许所请求的访问。 请注意:Windows 还支持针对对象的系统 ACL (SACL),并已在许多版本中使用 SACL 设置建立了需要记录到审核日志的事件。在 Windows Server 2008 和 Windows Vista 中,SACL 已扩展至能够携带完整性级别信息。 该完整性标签将用于建立“低级”标签,用它标记 LowRights Internet Explorer 中的 Internet Explorer 进程。“系统”和“高级”标签用于保护重要的系统资源。Windows 消息泵可以根据消息的完整性级别过滤消息。例如,中级进程不会接收低级进程发送的消息,而高级进程不会接收来自低级或中级进程的消息。 此时,完整性级别保护起到的是缓解的作用,而不是真正用于安全保护的安全屏障。在后续版本中,随着它逐渐成为真正的安全屏障,它的作用会大大加强。 与其它现代操作系统一样,Windows 依靠 DACL 进行常规访问控制决策。此处我将重点介绍 DACL。系统要决定是否允许某个主体对某个对象执行操作需要检查以下几项内容:主体的权限、主体的令牌,以及对象的安全描述符。对象的二进制安全描述符将随主体的令牌一起传递给 AccessCheck 例程。随后将准备所请求的访问掩码位向量,该向量代表访问权限检查成功所必须具备的访问权利。该向量将随主体的安全描述符一同传递给 AccessCheck 例程,然后由该例程根据所请求的访问和对象的 DACL 检查用户的安全令牌并考量主体权限(通常基于角色或成员关系,例如管理员)。 如果主体的权限满意所请求的访问,则授予访问权限。否则将按顺序检查 DACL 访问控制条目 (ACE)。一旦安全系统能够证明允许所有请求的访问组件或拒绝其中任何请求,它将相应返回成功或失败。 因此,ACE 的 DACL 列表应该按照适当的顺序排序。标准(规范)的排序应当是首先安排显式拒绝,然后是显式允许、一般(组)拒绝和组允许。如果不使用规范排序可能会导致预想不到的允许或拒绝。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|