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包过滤 ...
随机推荐
- Linux-tar命令(2)
tar 用于可以为文件和目录创建档案.可以为某一特定文件打包(备份文件), 也可以在档案中改变文件,或者向档案中加入新的文件. 主选参数: 主选参数仅能存在一个!不可同时存在!因为不可能同时压缩与解压 ...
- Linux下undefined reference to ‘pthread_create’问题解决
Linux下undefined reference to 'pthread_create'问题解决 在试用Linux 线程模块时,试用pthread_create 函数. 编译命令为 gcc main ...
- 团队作业8----第二次项目冲刺(Beta阶段) 第七天
BETA阶段冲刺第六天 1.小会议ing 2.每个人的工作 (1)昨天已完成的工作 完成查重部分 (2) 今天计划完成的工作 (3) 工作中遇到的困难: 尤少辉:在测试的时候发现了,文件名保存到数据 ...
- 201521123061 《Java程序设计》第十一周学习总结
201521123061 <Java程序设计>第十一周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 本周学习的是如何解决多线程访问中的互斥 ...
- 201521123068《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 查看脑图->多态与接口 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 1.代码阅读:Child压缩包内源 ...
- Java 第四周总结
1. 本周学习总结 2. 书面作业 注释的应用: (1)源文件注释采用 /** -- */,在每个源文件的头部要有必要的注释信息,包括:文件名:文件编号:版本号:作者:创建时间:文件描述包括本文件历史 ...
- 201521123003《Java程序设计》第3周学习总结
1. 本章学习总结 你对于本章知识的学习总结 了解和学会使用更多已有的类,如Calendar类.Math类.Arrays类等等 public.private的权限修饰 学会使用在Eclipse工具栏中 ...
- 201521123072《Java程序设计》第1周学习总结
201521123072<Java程序设计>第1周学习总结 标签(空格分隔): JAVA学习 1,本周学习总结 了解了JDK,JRE,JVM,学会使用cmd中一些简单的命令 了解了Java ...
- 201521123027 <java程序设计>第十二周作业总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2.书面作业 将Student对象(属性:int id, String name,int age,double ...
- Hyperledger Fabric 1.0 从零开始(一)——吐槽
在HyperLedger/Fabric发布0.6的时候,公司就已经安排了一个团队研究这一块,后来也请IBM的专家组过来培训了一批人,不幸的是,这批人后来全走了,然后没过多久1.0就发布了.自从2017 ...