windows访问控制列表 --ACL(Access Control List)
1、定义
ACL是一个windows中的表示用户(组)权限的列表。
Access Control List(ACL)
| Access Control Entry(ACE) |
| ... |
2、分类
ACL分为两类
1,Discretionary Access Control List (DACL) 自由访问控制列表
2,System Access Control List (SACL) 系统访问控制列表
DACL是 安全对象(securable object) 的一个属性(我的理解),用来表示 安全对象 的访问权限的列表。
当一个进程试图访问一个安全对象时,系统会检查该对向的DACL中的ACE。
如果该对象没有DACL,允许任何访问。
如果有DACL,但是其中没有ACE,拒绝所有访问。
DACL控制访问控制的详细原理 https://msdn.microsoft.com/en-us/library/aa446683(v=vs.85).aspx
SACL是系统中的一个列表,用来记录指定用户(组)、指定类型的访问的访问结果,并记录。
3、操作
为了保证ACL语法正确,ACL的修改必须通过指定的函数,不能直接修改。
1,描述ACE的结构体
typedef struct _EXPLICIT_ACCESS {
DWORD grfAccessPermissions;
ACCESS_MODE grfAccessMode;
DWORD grfInheritance;
TRUSTEE Trustee;
} EXPLICIT_ACCESS, *PEXPLICIT_ACCESS;
2,查看某用户访问权限
(1)调用 GetSecurityInfo 或 GetNamedSecurityInfo 得到对象的ACL(可选返回 DACL或 SACL)
DWORD WINAPI GetSecurityInfo(
_In_ HANDLE handle,
_In_ SE_OBJECT_TYPE ObjectType,
_In_ SECURITY_INFORMATION SecurityInfo,
_Out_opt_ PSID *ppsidOwner,
_Out_opt_ PSID *ppsidGroup,
_Out_opt_ PACL *ppDacl,
_Out_opt_ PACL *ppSacl,
_Out_opt_ PSECURITY_DESCRIPTOR *ppSecurityDescriptor
);
DWORD WINAPI GetNamedSecurityInfo(
_In_ LPTSTR pObjectName,
_In_ SE_OBJECT_TYPE ObjectType,
_In_ SECURITY_INFORMATION SecurityInfo,
_Out_opt_ PSID *ppsidOwner,
_Out_opt_ PSID *ppsidGroup,
_Out_opt_ PACL *ppDacl,
_Out_opt_ PACL *ppSacl,
_Out_opt_ PSECURITY_DESCRIPTOR *ppSecurityDescriptor
);
(2)调用 GetEffectiveRightsFromAcl ,将(1)中的ACL指针作为参数,得到某用户的访问权限
DWORD WINAPI GetEffectiveRightsFromAcl(
_In_ PACL pacl,
_In_ PTRUSTEE pTrustee,
_Out_ PACCESS_MASK pAccessRights
);
3,添加ACE到某个对象的ACL
(1)调用 GetSecurityInfo 或 GetNamedSecurityInfo 从对象的安全描述符中(security descriptor)得到ACL(可选返回 DACL或 SACL)
(2)调用 BuildExplicitAccessWithName 初始化一个ACE(也可以一个个属性赋值初始化ACE),若有多个要加入ACL,则将_EXPLICIT_ACCESS构造数组
VOID WINAPI BuildExplicitAccessWithName(
_Inout_ PEXPLICIT_ACCESS pExplicitAccess, //传入待初始化的_EXPLICIT_ACCESS,初始化后返回
_In_opt_ LPTSTR pTrusteeName,
_In_ DWORD AccessPermissions,
_In_ ACCESS_MODE AccessMode,
_In_ DWORD Inheritance
);
(3)调用 SetEntriesInAcl ,将自己要加入的ACE数组(_EXPLICIT_ACCESS数组)并入一个ACL
DWORD WINAPI SetEntriesInAcl(
_In_ ULONG cCountOfExplicitEntries, //数组中元素个数
_In_opt_ PEXPLICIT_ACCESS pListOfExplicitEntries, //数组指针
_In_opt_ PACL OldAcl, //若为空,则构造一个新的ACL;若不为空,则将该ACE(数组)并入该ACL
_Out_ PACL *NewAcl
);
(4)调用 SetSecurityInfo 或 SetNamedSecurityInfo,将自定义的ACL并入该对象的安全描述符。
DWORD WINAPI SetNamedSecurityInfo(
_In_ LPTSTR pObjectName,
_In_ SE_OBJECT_TYPE ObjectType,
_In_ SECURITY_INFORMATION SecurityInfo,
_In_opt_ PSID psidOwner,
_In_opt_ PSID psidGroup,
_In_opt_ PACL pDacl,
_In_opt_ PACL pSacl
);
DWORD WINAPI SetSecurityInfo(
_In_ HANDLE handle,
_In_ SE_OBJECT_TYPE ObjectType,
_In_ SECURITY_INFORMATION SecurityInfo,
_In_opt_ PSID psidOwner,
_In_opt_ PSID psidGroup,
_In_opt_ PACL pDacl,
_In_opt_ PACL pSacl
);
参考
ACL创建修改 https://msdn.microsoft.com/en-us/library/aa446596(v=vs.85).aspx
ACL查看 https://msdn.microsoft.com/en-us/library/aa446659(v=vs.85).aspx
原文 https://msdn.microsoft.com/en-us/library/aa374872(VS.85).aspx
windows访问控制列表 --ACL(Access Control List)的更多相关文章
- Linux访问控制列表(Access Control List,简称ACL)
Linux访问控制列表(Access Control List,简称ACL) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ACL概述 ACL:Access Control L ...
- 基本的访问控制列表ACL配置
摘要: 访问控制列表ACL (Access Control L ist)是由permit或 deny语句组成的一系列有顺序的规则集合,这些规则根据数据包的源地址.目的地址.源端口.目的端口等信息 来 ...
- [转载]ACM(访问控制模型),Security Identifiers(SID),Security Descriptors(安全描述符),ACL(访问控制列表),Access Tokens(访问令牌)
对于<windows核心编程>中的只言片语无法驱散心中的疑惑.就让MSDN中的解释给我们一盏明灯吧.如果要很详细的介绍,还是到MSDN仔细的看吧,我只是大体用容易理解的语言描述一下. wi ...
- Linux 系统访问控制列表ACL
常见的文件系统的一般权限(rwx).特殊权限(SUID,SGID,STICK).隐藏权限(chattr)其实有个共性——权限是针对某一类用户设置的.而如果希望对某个指定的用户进行单独的权限控制,那么就 ...
- 访问控制列表 ACL
访问控制列表(Access Control List,ACL) 是路由器和交换机接口的指令列表,用来控制端口进出的数据包.其目的是为了对某种访问进行控制. 作用 ACL可以限制网络流量.提高网络性能. ...
- 【windows 访问控制】三、访问控制列表 ACL=DACL+SACL
访问控制列表(ACL:Access Control List) ACL列表的结构 ACL 中的每个 ACE 标识一个受信者,并指定该受信者访问规则.安全对象的安全描述符 可以包含两种类型的 ACL:D ...
- CCNA网络工程师学习进程(8)访问控制列表ACL
前面几节我们介绍了路由器的路由配置,接下来几节我们将介绍路由器的高级配置应用,包括ACL.NAT.DHCP.PPP.VPN和远程连接等的配置. (1)ACL概述: ACL(Access C ...
- ACL(Access Control List)
一.ACL的简介 ACL(Access Control List 访问控制列表)是路由器和交换机接口的指令列表,用来控制端口进出的数据包.ACL的定义也是基于每一种被动路由协议的,且适用于所有的被动路 ...
- 用访问控制列表(ACL)实现包过滤
用访问控制列表(ACL)实现包过滤 一.ACL概述 1.ACL(Access Control List,访问控制列表)是用来实现数据包识别功能的 2.ACL可以应用于诸多方面 a>.b包过滤 ...
随机推荐
- Ibatis insert语句插入null引发的错误
公司使用的orm框架为ibatis,其中默认的insert语句一直都是这样写的: <insert id="insert" parameterClass="activ ...
- 【.net 深呼吸】WPF 中的父子窗口
与 WinForm 不同,WPF 并没有 MDI 窗口,但 WPF 的窗口之间是可以存在“父子”关系的. 我们会发现,Window 类公开了一个属性叫 Owner,这个属性是可读可写的,从名字上我们也 ...
- zabbix 问题汇总
1.Zabbix agent on Zabbix server is unreachable for 5 minutes 查看日志sudo tailf /var/log/zabbix/zabbix_a ...
- K好数--蓝桥杯
JAVA版K好数--蓝桥杯 历经千辛万苦,也算是研究出来了这道题了. 这道题主要运用了动态规划(Dynamic Planning)的思想,何谓动态规划?其实就是将一个大问题分成一个个小问题,然后先通过 ...
- 个人作业(2)---英语学习APP案例分析
第一部分 调研, 评测 1.下载并使用,描述最简单直观的个人第一次上手体验. PC上的必应词典主页面与其他英语学习APP类似,一些英文读物的推送,但是每日阅读需要去浏览器去看有点不太方便,我觉得直接在 ...
- 201521123106 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 List中指定元素的删除(题目4-1 ...
- 201521123093 java 第七周学习总结
1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 //contains()方法 public boolean contains ...
- 201521123099《java程序设计》第五周学习总结
本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现 ...
- 201521123112《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点 1.2 使用常规方法总结其他上课内容 关于多态,多态性就是相同的形态,不同的定义.在简单点说的话就是不同类的对象对同一个消息作出的相应 ...
- 201521123070 《JAVA程序设计》第1周学习总结
本周学习总结 1.认识了三大平台Java SE.Java EE.Java ME. 2.认识了解了JDK,JVM与JRE,且熟悉JDK的操作并下载安装. 3.学会用博客写作业了. 书面作业 Q1.为什么 ...