编程实现遍历ACL访问控制列表检查进程访问权限

阅读本文的朋友需要对Windows访问控制模型有初步的了解,了解Token(访问令牌),ACL(访问控制列表),DACL(选择访问控制列表),ACE(访问控制列表项)等与访问控制模型相关的名词含义及之间的关系,当然我也会在文中简要科普一下ACM。

写这篇文章的目的主要是最近在写一个Win下本地提权的东西,涉及到了对ACL的操作,以前对ACL总是避而远之,Windows访问控制模型很复杂很头疼一个API会牵出一大把初始化要用的API。毕竟涉及到用户访问的安全,肯定不能让编程人员随意更改这些机制,复杂一些也可以理解,相关API和结构体复杂,可是参考文献奇少,MSDN上关于一些访问控制相关API的使用和结构体的描述都含糊不清也没有什么代码实例。这篇文章也是在查阅国外了一些文献加上自己研究测试之后完成的,发出来希望对涉及这方面编程的朋友有帮助。

--->>熟悉Windows访问控制机制的可以跳过本段:

因为是科普我这里简单介绍下Windows访问控制模型(ACM),别嫌我啰嗦,懂得直接Pass往下看。ACM中最重要的两部分是访问令牌(Access Token)和安全描述符表(Security Descriptor)。访问令牌存在于访问主体中,安全描述符表存在于访问客体中。比如我去米国,我就是访问主体,米国就是访问客体,我持有的签证就是访问令牌。系统中访问主体是进程客体是一切系统对象。访问令牌中有当前用户的唯一标识SID,组唯一标识SID以及一些权限标志(Privilege)。安全描述符表(SD)存在于Windows系统中的任何对象中(文件,注册表,互斥量,信号量等等)。SD中包含对象所有者的SID,组SID以及两个非常重要的数据结构选择访问控制列表(DACL)和系统访问控制列表(SACL),其中SACL涉及系统日志用的很少可以先无视。DACL中包含一个个ACE访问控制入口也是权限访问判断的核心,当一个进程访问某一对象的时候,对象会将进程的Token与自身的ACE依次比对,直到被允许或被拒绝,前面的ACE优于后面的ACE。整体的一个权限检查过程如下图:

--->>

上面简单介绍了本文要用到的也是Windows访问控制模型核心部分的一些知识,下面来介绍下如何编程实现遍历ACL来进行访问权限的检查。本文主要针对文件对象进行介绍,其他类型的对象大同小异。要用到的两个主要API为GetFileSecurity()和AccessCheck()。GetFileSecurity能够获取指定文件的安全描述符表,而AccessCheck可以指定要检查的权限,函数能够将获得的安全描述符表与当前进程的Token进行检查来判断进程对该文件对象是否允许相应的权限。不过这两个API并不那么容易用,因为其中要涉及到安全描述符表和访问令牌的获取,因此又牵扯出一大把API也涉及一些访问控制的知识。下面依次介绍要使用到的API然后给出整体的代码。GetFileSecurity的函数原型如下:

BOOL WINAPI GetFileSecurity(
  __in          LPCTSTR lpFileName,
  __in          SECURITY_INFORMATION RequestedInformation,
  __out_opt     PSECURITY_DESCRIPTOR pSecurityDescriptor,
  __in          DWORD nLength,
  __out         LPDWORD lpnLengthNeeded
);

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索权限
, acm
, 安全
, 对象
, 访问量
, 进程
, 进程控制
, 唯一性检查
, 令牌
, 访问
, 访问权限控制
, 访问控制
, 控制
方法用户权限遍历配置
acl访问控制列表、h3c acl访问控制列表、华为acl访问控制列表、acl访问控制、acl访问控制列表配置,以便于您获取更多的相关知识。

时间: 2024-09-12 19:35:21

编程实现遍历ACL访问控制列表检查进程访问权限的相关文章

网络题:ACL访问控制列表的实现

题目需求: 首先给4台PC 配上ip地址 这里基本都会 不多讲解 列表的实现-"> 然后做vlan划分 0和1 划分到vlan2 里 pc2和3 划分到vlan3里 直接上图 我就不写步骤了.然后我们做单臂路由,有的同学不会,我前面的文档有专门的 单臂路由和vlan'的文章,今天主要acl访问控制列表.

ACM(访问控制模型),Security Identifiers(SID),Security Descriptors(安全描述符),ACL(访问控制列表),Access Tokens(访问令牌)

对于<windows核心编程>中的只言片语无法驱散心中的疑惑.就让MSDN中的解释给我们一盏明灯吧.如果要很详细的介绍,还是到MSDN仔细的看吧,我只是大体用容易理解的语言描述一下.   windows的安全访问控制(ACM,access control mode)是由两部分组成的.一个是访问令牌(access tokens),另一个是安全描述符(security identifiers).   访问令牌是欲进行访问的进程使用的表明自己身份和特权的信息数据. 安全描述符是欲被访问的安全对象的相

神州数码交换机利用mac-ip访问控制列表功能实现单端口下多条MAC-IP的绑定

神州数码交换机利用mac-ip访问控制列表功能实现单端口下多条MAC-IP的绑定 1.描述: 某集团公司办公网,核心交换机为神州数码DCRS-5950-28T,根据办公楼层划分若干个VLAN,为每个楼层分别划分不同的IP段并设定网关.接口ethernet 1/18-20为ACCESS口,18口所属VlanID1021,端口下分别连接各楼层的非网管交换机做为办公PC的接入交换机. 2.需求: 客户要求从核心交换机ethernet 1/18口上做MAC-IP绑定,避免集团PC私自更改IP地址,同时也

RHCSA 系列(七): 使用 ACL(访问控制列表) 和挂载 Samba/NFS 共享

在上一篇文章(RHCSA 系列(六))中,我们解释了如何使用 parted 和 ssm 来设置和配置本地系统存储. RHCSA 系列: 配置 ACL 及挂载 NFS/Samba 共享 – Part 7 我们也讨论了如何创建和在系统启动时使用一个密码来挂载加密的卷.另外,我们告诫过你要避免在挂载的文件系统上执行危险的存储管理操作.记住了这点后,现在,我们将回顾在 RHEL 7 中最常使用的文件系统格式,然后将涵盖有关手动或自动挂载.使用和卸载网络文件系统(CIFS 和 NFS)的话题以及在你的操作

配置 Linux 的访问控制列表(ACL)

配置 Linux 的访问控制列表(ACL) 使用拥有权限控制的Liunx,工作是一件轻松的任务.它可以定义任何user,group和other的权限.无论是在桌面电脑或者不会有很多用户的虚拟Linux实例,或者当用户不愿意分享他们之间的文件时,这样的工作是很棒的.然而,如果你是在一个大型组织,你运行了NFS或者Samba服务给不同的用户,然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求. Linux(和其他Unix等POSIX兼容的操作系统)有一种被称为访问控制列表(A

ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表

zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:http://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html#sc_ZooKeeperAccessControl 总体来说,ZK的节点有5种操作权限: CREATE.READ.WRITE.DELETE.ADMIN 也就是 增.删.改.查

文件和目录的访问控制(1) 访问控制列表

权限的概念相信你已经不陌生了,那么如何设置一个文件的访问权限呢?编程可不可以实现动态的控制文件权限信息呢?答案是肯定的,.NET可以做到这些. 自由访问控制列表(Discretionary Access Control List,DACL)(有时缩写为ACL)是一种 Microsoft Windows NT 和更高版本用于保护资源(例如文件和文件夹)的机制.DACL包含多个访问控制项(Access Control Entry,ACE).访问控制项将一个主体(通常是一个用户账户或用户账户组)与一个

在路由器上配置自反访问控制列表

自反访问列表会根据一个方向的 访问控制列表,自动创建出一个反方向的控制列表,是和原来的控制列表-IP的源地址和目的地址颠倒,并且源端口号和目的端口号完全相反的一个列表. 那么如何在路由器上完成自反访问控制列表的配置呢?下面我们开始逐步进行:注意必须是内部发起的!用命名的ACL做.不是很好理解,看个例子吧.先看下面的:ipaccess-listextendedabc denyicmpany192.168.1.00.0.0.255 permitipanyany exit ints0/0 ipacce

反向访问控制列表的用途及格式

我们使用 访问控制列表除了合理管理 网络访问以外还有一个更重要的方面,那就是防范病毒,我们可以将平时常见病毒传播使用的端口进行过滤,将使用这些端口的数据包丢弃.这样就可以有效的防范病毒的攻击.不过即使再科学的访问控制列表规则也可能会因为未知病毒的传播而无效,毕竟未知病毒使用的端口是我们无法 估计的,而且随着防范病毒数量的增多会造成访问控制列表规则过多,在一定程度上影响了网络访问的速度.这时我们可以使用反向控制列表来解决以上的问题.一.反向访问控制列表的用途反向访问控制列表属于ACL的一种高级应用