访问控制项

具体内容 : 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. HashMap和TreeMap的内部结构

    一.HashMap 1.基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Hash ...

  2. golang中的并发安全和锁

    1. 并发安全 package main import ( "fmt" "sync" ) var ( sum int wg sync.WaitGroup ) f ...

  3. (转引)数据库索引(MySQL)

    数据结构和算法基础 索引的本质:数据结构,帮助高效获取数据 数据库的查询:最基本的查询算法当然是顺序查找(linear search).二分查找(binary search).二叉树查找(binary ...

  4. Vue中的发布订阅分析(Vue2/3中的 emit 实现)

    Vue中的发布订阅模式分析 模块:instanceEventEmiiter.ts(在下方有简单实现和解析) 在Vue3中,已经取消了对这个模块的引用,故而不再支持 $on.$off.$once相关的方 ...

  5. django之集成第三方支付平台PaysAPI与百度云视频点播服务接入

    PaysAPI直接查看接口文档:https://www.paysapi.com/docindex,比较简单 百度云视频点播服务接入: 1. 准备工作:百度云的示例:http://cyberplayer ...

  6. 计算机网络再次整理————tcp例子前奏[三]

    前言 简单编写一下tcp例子. 正文 我们常说IOS有7层,实际上也只有4层,或者这样说简单的说是4层. 首先是数据链路层,首先这一层解决了什么问题呢?为什么要有这一层呢? 首先要抛开有操作系统的意识 ...

  7. swwager的使用

    最近弄swwager文档,被搞得恼火,故记录一下 先展示一下现有的页面,此页面由swwager自动生成 配置步骤: 一:导入swwager的依赖 <!-- =================== ...

  8. jar包冲突时怎么办

    因为项目中会依赖许多jar包,免不得就会有冲突,那怎么解决呢? 使用 mvn dependency:tree 可以看到各个包的依赖关系 [INFO] | +- commons-cli:commons- ...

  9. linux中统计文件中一个字符串出现的次数

    要统计一个字符串出现的次数,这里现提供自己常用两种方法: 1. 使用vim统计 用vim打开目标文件,在命令模式下,输入 :%s/objStr//gn 2. 使用grep: grep -o objSt ...

  10. IOS开发之----常用函数和常数--秀清

    介绍一下Objective-c常用的函数,常数变量 算术函数 [算术函数] 函数名 说明 int rand() 随机数生成.(例)srand(time(nil)); //随机数初期化int val = ...