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包过滤 ...
随机推荐
- input标签新增属性
<input list='list_t' type="text" name='user' placeholder='请输入姓名' value="" / ...
- CSS文本效果
前面的话 本文将详细介绍CSS文本效果 凸版印刷效果 这种效果尤其适用于中等亮度背景配上深色文字的场景:但它也可用于深色底.浅色字的场景,只要文字不是黑色并且背景不是纯黑或纯白就行 [浅色背景深色文本 ...
- grunt之clean、copy
心情不太好,正好这部分比较简单,记个流水账. ----------流水很清楚惜花这个责任,真的身份不过送运---------- clean.copy算是很重要也很简单的基本组件了. clean(V0. ...
- tkinter第一章
tk1 ------------------------------------------------------------------------------------------ impor ...
- 【DDD】领域驱动设计实践 —— 业务建模实例(‘发布帖子’)
本文是基于上一篇‘业务建模小招数’的实践,后面的多篇博文类似.本文主要讲解‘发表帖子’场景的业务建模,包括:业务建模.业务模型.示例代码:示例代码会使用java编写,文末附有github地址.相比于& ...
- java课程设计——博客作业教学数据分析系统(201521123083 戴志斌)
目录 一.团队课程设计博客链接 二.个人负责模块或任务说明 三.自己的代码提交记录截图 四.自己负责模块或任务详细说明 五.课程设计感想 (题外话,终于可以用markdown建目录) 一.团队课程设计 ...
- 【Beta】 第一次Daily Scrum Meeting
一.本次会议为第一次meeting会议 二.时间:20::0AM-20:50AM 地点:宿舍楼下 三.会议站立式照片 四.今日任务安排 成员 昨日任务 今日任务 林晓芳 对已完成的功能进行进一步测 ...
- 201521123037 《Java程序设计》第1周学习总结
#1.本章学习总结 了解java的发展历程 能够区分JVM.JRE.JDK之间的关系 了解文件名.类名要相同,且文件名大小写代表不同的名称 初步了解java编程语句 学会用控制台编译java程序 #2 ...
- 201521123035 《Java程序设计》第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 题目5-1 1.常用异常 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现 ...
- JavaSE(十)之Map总结
上一篇是总结了Collection接口的各种实现类,这一篇我将分享的是Map的总结,希望大家点评! 一.Map接口 1.1.为什么Collection不能满足集合的所有功能? Collection接口 ...