访问控制项

具体内容 : https://docs.microsoft.com/zh-cn/windows-hardware/drivers/ifs/access-control-entry

 

访问控制条目(ACE)是访问控制列表(ACL)中的元素。一个ACL可以包含零个或多个ACE。每个ACE控制或监视指定受托者(Trustees)对对象的访问。
ACE有六种类型,所有安全对象都支持其中三种。其他三种类型是目录服务对象支持的特定于对象的ACE.
所有类型的ACE都包含以下访问控制信息:

  • 安全标识符(SID),用于标识ACE适用于的受托者
  • 一个访问掩码(Access Mask),该掩码指定了具体的访问权限(Access Rights),也就是可以对该对象执行的操作(此掩码非常重要,后续很多漏洞会用到)
  • 一个位标记,指示ACE类型的标志。拒绝(deny)还是允许(allow)
  • 一组位标志,指示了安全描述符所属对象的子对象是否继承这个ACE。访问控制项

DACL中的ACE顺序

当进程尝试访问安全对象时,系统逐步浏览该对象的任意访问控制列表(DACL)中的访问控制项(ACE),直到找到允许或拒绝所请求访问的ACE。 DACL允许用户的访问权限可能会根据DACL中ACE的顺序而有所不同。因此,Windows XP操作系统在安全对象的DACL中为ACE定义了首选顺序。首选顺序提供了一个简单的框架,可确保拒绝访问的ACE实际上拒绝访问。上一节已经对该顺序有过介绍。
  对于Windows Server 2003和Windows XP,引入特定于对象的ACE和自动继承会使得ACE的正确顺序变得复杂。
以下步骤描述了首选顺序:
1、对于继承的ACE的每个级别,将拒绝访问的ACE放置在允许访问的ACE之前。
2、另外,并不是ACL中需要所有ACE类型
3、将所有显式ACE(即手动设置的ACE)放在一个组中,然后放在任何继承的ACE之前。
4、在显式ACE组中,拒绝访问的ACE放置在允许访问的ACE之前。
5、继承的ACE按照继承的顺序放置。从子对象的父对象继承的ACE首先出现,然后是从祖父母那里继承的ACE,依此类推。

ACE继承

对象的ACL可以包含从其父容器继承的ACE。例如,注册表子项可以从注册表层次结构中位于其上方的项继承ACE。同样,NTFS文件系统中的文件可以从包含该文件的目录继承ACE。
    ACE的ACE_HEADER结构(该结构见本节最后一小节)包含一组继承标志,这些继承标志控制ACE继承以及ACE对它所连接的对象的影响。系统根据ACE继承规则解释继承标志和其他继承信息。
    这些规则通过以下功能得到增强:
    1、支持自动传播可继承的ACE。
    2、  一个标志,用于区分继承的ACE和直接应用于对象的ACE。
   3、 特定于对象的ACE,允许指定可以继承ACE的子对象的类型。
   4、 通过将除SYSTEM_RESOURCE_ATTRIBUTE_ACE和SYSTEM_SCOPED_POLICY_ID_ACE之外的安全描述符的控制位中的SE_DACL_PROTECTED或SE_SACL_PROTECTED位设置来防止DACL或SACL继承ACE的能力。

自动传播可继承的ACE

SetNamedSecurityInfo和SetSecurityInfo函数支持可继承访问控制项(ACE)的自动传播。例如,如果使用这些功能将可继承的ACE添加到NTFS中的目录,则系统会将ACE适当地应用于任何现有子目录或文件的访问控制列表(ACL)。
直接应用的ACE优先于继承的ACE。系统通过将直接应用的ACE放在任意访问控制列表(DACL)中继承的ACE之前来实现此优先级。当调用SetNamedSecurityInfo和SetSecurityInfo函数设置对象的安全信息时,系统会将当前继承模型强加于目标对象下方层次结构中所有对象的ACL上。对于已转换为当前继承模型的对象,在对象的安全描述符的控制字段中设置SE_DACL_AUTO_INHERITED和SE_SACL_AUTO_INHERITED位。
当构建一个反映当前继承模型的新安全描述符时,注意不要更改安全描述符的语义。因此,允许和拒绝ACE绝不会彼此相对移动。如果需要进行此类移动(例如,将所有非继承的ACE放在ACL的前面),则将该ACL标记为受保护,以防止语义更改。
将继承的ACE传播到子对象时,系统使用以下规则:
1、如果自动继承导致从子对象的DACL中删除所有ACE,则子对象具有空的DACL,而不是没有DACL。

2、如果没有DACL的子对象继承了ACE,则结果是带有DACL的子对象仅包含继承的ACE。
3、如果带有空DACL的子对象继承了ACE,则结果是带有DACL的子对象仅包含继承的ACE。
4、如果从父对象中删除可继承的ACE,则自动继承将删除子对象继承的ACE的所有副本。
这些规则可能会产生意外结果,即将没有DACL的对象转换为具有空DACL的对象。没有DACL的对象允许完全访问,但是具有空DACL的对象不允许访问。作为这些规则如何创建空DACL的示例,假设将可继承的ACE添加到对象树的根对象。自动继承将可继承的ACE传播到树中的所有对象。现在,没有DACL的子对象具有带有继承的ACE的DACL。如果从根对象中删除可继承的ACE,则系统会自动将更改传播到子对象。现在,没有DACL(允许完全访问)的子对象具有空的DACL(不允许访问)。
为确保没有DACL的子对象不受继承ACE的影响,在对象的安全描述符中设置SE_DACL_PROTECTED标志。

C# 新建一个ACE 代码如下:

方式一、

FileSecurity sonFileSecurity=sonFile2.GetAccessControl();
sonFileSecurity.AddAccessRule(new FileSystemAccessRule("HP", FileSystemRights.Modify, AccessControlType.Deny));
sonFile2.SetAccessControl(sonFileSecurity);

方式二、

FileSystemAccessRule ace =new FileSystemAccessRule("HP",FileSystemRights.Write,InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow);
DirectorySecurity ds= substrDir1.GetAccessControl();
ds.AddAccessRule(ace);
substrDir1.SetAccessControl(ds);

"HP":表示账户名,也可以是IdentityReferenc类型
InheritanceFlags.ContainerInherit:指定继承给目录,如果要继承给文件和目录请用InheritanceFlags.ObjectInherit
PropagationFlags.InheritOnly:这个是配合InheritanceFlags一起用的。构成

【windows 访问控制】四、访问控制项ACE的更多相关文章

  1. 【windows安全性 之访问控制】 访问控制 详细解说

    windows的安全性的两个基本支柱是身份验证(登入)和授权(访问控制). 身份验证是标识用户的过程 ,授权在验证了所标识用户是否可以访问特定资源之后进行. 相关的命名空间和类: System.Sec ...

  2. 关于Windows下的访问控制模型

    在探索Windows操作系统的过程中,发现很多有意思 的东西. Windows下的访问控制模型也是我在Github上浏览代码时,无意中发现的. 项目地址 https://github.com/Krut ...

  3. [Windows Phone] 地图控制项的经纬度

    原文:[Windows Phone] 地图控制项的经纬度 前言 本文主要示范如何使用地图经纬度以及显示地标和行人街道,并透过卷轴控制地图缩放比例的功能. ? 实作 step1 建立专案. ? step ...

  4. Windows Server 2016-配置Windows Defender防病毒排除项

    Windows Server 2016 的计算机上的 Windows Defender 防病毒自动注册你在某些排除项,由你指定的服务器角色定义. 这些排除项不会显示在Windows 安全中心应用中所示 ...

  5. Windows Phone 四、控件模版

    控件模版的概念 Windows Phone中每一个控件都有一个默认的模版,用于描述控件的内部组成结构和外观样式 相对于原本的样式外观操作,自定义模版的可自定义性更强 最基本的重写控件模版 <Gr ...

  6. 安装centos 7后恢复windows 2008R2 (Windows7)启动项

    安装CentOS 7,安装之后发现Win2008R2的启动项不见了(Windows7同理).一般安装Linux过程中会自动识别windows系统并添加引导项,centos的问题在于默认不支持ntfs分 ...

  7. Windows的四类消息

    Windows的三类消息1.标准消息宏名称 对映消息 消息处理函数(名称已由系统预设)ON_WM_CHAR WM_CAHR OnCharON_WM_CLOSE WM_CLOSE OnCloseON_W ...

  8. windows添加开机启动项

    http://www.cnblogs.com/jokey/archive/2010/06/17/1759370.html添加开机启动项(通过注册表) 例子:增加QQ开机启动项 第一步:找到注册表的启动 ...

  9. Nginx访问控制_IP访问控制(http_access_module)原理、局限性、解决方法讲解

    基于IP的访问控制,基于Nginx的http_access_module模块,是Nginx本身内置的模块,不需要安装的时候配置.也就是允许哪些IP访问,不允许哪些IP访问 server { liste ...

随机推荐

  1. Apple历代Mac系统汇总

    编号 系统名 版本号 名称 发布时间 01 macOS 11.0 Big Sur(大惊喜) 2020年6月 02 macOS 10.15 Catalina(卡特琳娜) 2019年9月 03 macOS ...

  2. 002 Linux 文件与目录命令的必会姿势!

    01这些命令真的很重要吗? 文件及目录的路径切换.显示.创建.复制.移动和删除操作的常用姿势,必会!因为这些命令是使用 Linux 系统进行工作的基础,是摆脱小白的第一步,是构建大厦的基石! 发现锅锅 ...

  3. Android 12(S) 图形显示系统 - createSurface的流程(五)

    题外话 刚刚开始着笔写作这篇文章时,正好看电视在采访一位92岁的考古学家,在他的日记中有这样一句话,写在这里与君共勉"不要等待幸运的降临,要去努力的掌握知识".如此朴实的一句话,此 ...

  4. 「BalkanOI 2018 Day1」Minmaxtree

    「BalkanOI 2018 Day1」Minmaxtree 每个点都有一个最大和最小权值的限制. 然后每一个权值的限制都必须要取到. 每个点显然可以直接让他取到最大或最小权值. 可以想到每个点匹配一 ...

  5. Swift数组

    数组的介绍 数组(Array)是一串有序的由相同类型元素构成的集合 数组中的集合元素是有序的,可以重复出现 Swift中的数组 swift数组类型是Array,是一个泛型集合 数组的初始化 数组分成: ...

  6. Python property动态属性

    from datetime import datetime, date class User: def __init__(self, name, birthday): self.name = name ...

  7. PMD的使用学习

    是什么? 静态代码分析器 能找出什么问题? 可能的 bugs - 空的 try/catch/finally/switch 声明 死码 - 未使用的本地变量,参数和私有方法 次优代码 - 无用的 Str ...

  8. sql作业题

    作业题:1.查询选修课程'3-105'且成绩在60到80之间的所有记录.注释:用于指定某个范围使用between and,也可以使用and连接符;答案:法1:select * from sc wher ...

  9. redis lua脚本学习

    语法格式(常见) a = 5 -- 全局变量 local b = 5 -- 局部变量 Eval的使用 EVAL script numkeys key [key ...] arg [arg ...] 首 ...

  10. nginx负载均衡中常见的算法及原理有哪些?

    一.nginx负载均衡常用算法 1.1 轮询 轮询,nginx默认方式.一次将请求分配给各个后台服务器. upstream backserver { server 10.0.0.7; server 1 ...