🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁
下面我们来学习访问控制。首先来学习防控制的基本概念和模型,访问控制是网络安全防护的主要策略之一,防控制是依据授权规则对提出的资源访问加以控制,它限制访问主体,包括用户以及代表用户的进程服务等,对任何资源,包括计算资源,通信资源和信息资源进行未授权的访问,使计算机系统在合法范围内使用。一方面防止非法用户使用资源,另外一方面还要防止合法用户滥用权限,它具体就是决定一个用户能够在系统当中做什么,或者代表用户的程序能够做什么。
我们来看一下访问控制与其他安全措施的关系。用户首先会经过安全管理员对他进行授权,建立他的授权关系,然后当用户在登录系统的时候,先对它进行认证,确认他的身份之后,通过引用监视器去获取他的授权,然后这个是访问控制,就根据用户的授权去确定用户是否能够访问他想要访问的目标。
在这个过程当中,系统会对用户的所有的行为进行审计。
我们再来看访问控制的组成,访问控制有三个主要的要素,一个是主体,第二个就是客体,然后是访问控制策略,然后就是安全访问策略。形式化描述可以描述成一个三元函数,f(s,a,o)s代表主体,o代表客体,而安全访问策略就是o。
我们访问控制的模型如图所示,包括了主体客体,访问控制、实施功能和访问控制决策功能。主体首先向访问控制实施功能提交一个访问的请求,然后访问控制实施功能,像防控制决策功能,请请求决策,访问控制实施功能,像访问控制决策功能,发起一个请求决策,然后由这个防控制决策功能下发决策给访问控制实施功能。这个决策就是依据用户授权来进行决策,然后这个时候如果这个请求是被允许的,访问控制实时功能,就把这个用访问控制实施功能,就把这个主体的这个访问请求再发送到客体,然后让用户然后让主体去访问客体。
接下来我们来学习防控制的一般实现机制和方法。
防控制的一般实现机制主要有两大类,一类是基于防控的属性的,也就是为主体或者客体,然后通过它的属性去进行控制,包括访问控制表、访问能力表,访问控制、矩阵,然后另外一类就是对主体和客体,也就是用户和资源,我们去给他贴安全的标签,其实就是进行一个分级,然后形成这种多级的访问控制。常见的实现方法主要就包括访问控制表、访问能力表、访问控制矩阵、授权关系和访问控制的安全标签,还有一些其他的安全机制。
访问控制表就是为系统当中每一个客体附加一个可以访问它的主体的明细表,如下图所示,比如有一个客体,有一个资源叫做object1,这个时候系统当中有三个用户可以对他进行访问,而且具有不同的访问控制权限,这个时候就可以用一个类似链表的形式,把这三个用户以及他们具体的权限串联起来,构成一个访问控制表。每一个表象代表当前这个用户可以对这个客体进行访问以及具体的访问控制权限。比如user a它就可以对这个客体进行访问,具有这个拥有权,读权限和写权限,而user B就只有这个读权限,而这个user c有这个读写权限。这种访问控制方法在现在的操作系统当中也是在使用的,比如window系统当中,如果大家选择一个文件,然后去点击右键查看它的属性的话,再来选择这个安全这个标签,可以看到上下两个窗口,上面这个窗口就代表当前这个文件他被授权给了哪些组和用户,然后下面这个窗口就代表了某一个授权的组和用户,它具体的权限是什么。另外还可以通过这个页面上面的编辑高级等等按钮,对这个授权的这个权限进行相应的修改。
接下来就是访问能力表,访问能力表就是从主体的视角出发,为系统当中每一个主体附加一个该主体可以访问的客体的明细表,如下图所示,如果系统当中有这个用户USer,他可以访问三个客体,三个资源,分别是object一,object2和object3,这样的话,就构成了这样一个链表形式的访问能力表,每个表项就代表当前这个主体可以访问一个这个客体以及具体的访问权限是什么。
接下来我们再来看访问控制矩阵,访问控制矩阵是用一个矩阵,去管理系统当中所有的主体对系统当中所有的客体,他的访问授权关系。其中这个矩阵当中的每一个单元格代表了当前这个单元格所对应的主体,对对应的客体的这个访问权限,比如说这个举证当中的第二行,第二列的这个单元格,就代表了第二行的这个用户Alice对这个第二列的这个客体文件。二他的访问权限,包括了拥有权,读和写的权限。这个访问控制矩阵,如果从列的角度来看的话,实际上它就是一个访问控制表,就代表了这个系统当中这一列对应的客体,它的访问控制表,哪些用户可以对他进行访问,怎么样去访问?如果从行的角度去看访问控制矩阵的话,它实际上就是一个用户的访问能力表,比如说第二行,就是这个用户Alice他的访问能力表,他可以访问哪些客体,具有什么样的权限。
我们再来看授权关系表,授权关系表是把系统当中所有的主体,然后能够访问的客体以及这个访问的权限,用一个三列的表格把它一一的罗列出来。然后这个授权关系表,如果从客体的角度来进行排序的话,就可以构成访问控制表,把系统当中所有的这个嗯客体,它的访问控制表实际上串联起来,如果按照主体来排序的话,我们就可以得到一个所有用户他的能力表。
我们再来看访问控制的安全标签,访问控制的安全标签就是对系统当中所有的用户,主体以及所有的客体,然后从某一个角度对它进行一个安全的分级,比如从用户的角度,我们通常可以分成绝密的、机密的、秘密的、未涉密的等等若干个级别客体,也可以把它分成这样一些级别,然后对主体和客体分级之后,就可以按照主体客体他们之间的安全级别来确定这个主体能否去访问客体,以及以什么样的方式去访问它。
接下来我们再来看锁和钥匙,这里的锁和钥匙实际上就代表加密和解密,采用这样一种方式进行访问控制的时候,我们就对客体资源,用一个密钥对它进行加密,就把它控制起来了。当要授权的时候,我们把这个对应的解密密钥授予我们这个有权访问的主体,就完成了授权。
这种访问控制的实现方法,同时具有访问控制表和能力表的特征,这个客体它的密钥被授予了哪些主体,这样就构成了一个访问控制表。而从主体的角度,主体拥有了哪些客体的密钥,就构成了访问能力表,这个主体手里的密钥实际上就体现了他的访问能力,这种机制它具有动态性,可以动态的给客体进行加密,用密钥对它进行加密,然后同时也可以动态的把这个客体的解密密钥授予主体。
接下来我们来学习访问控制的一般策略。
防控制的一般策略主要分为三种,自主防控策略,强制防控策略和基于角色的防控策略。
首先来看自主访问控制策略,自主访问控制策略DAC。这种策略是客体的属主,也就是拥有者,他可以自主的管理对客体的访问控制权限,这个属主他可以自主的负责赋予或者收回其他主体对客体资源的访问权,而得到授权的主体,它可以直接或者间接的向其他主体转让这个访问权限。
这种策略被一些操作系统所使用,比如说Linux操作系统,我们可以用ls -l这样一个命令去查看一个文件它的完整属性。我们就可以看到这个文件在系统当中它的授权情况,
这个授权通常分成了三段,如这个事例当中所示,第一段就是属主就是拥有者对这个文件的权限。第二段就是拥有者所在的主其他的成员对这个文件的权限。剩下第三段就是其他用户对这个文件的权限,这个权限通常是三种这个r,wx。如何体现这个自主,Linux系统当中提供了两条命令,section、mode、Seto,这个chmod,chown,也就是说亲也就是说这两条命令分别可以改变授权关系,改变这个文件资源的这个所有权,只要是授权的主体或者是这个资源,它的属主就可以通过这两条命令去自主的去转让,去改变这个客体的访问权限。
自主访问控制它具有如下的特点以及缺点,一个就是可以根据主体的身份和权限来进行决策,然后授权主体可以自主的将某一个权限的某个子集授予其他的主体,。这种访问控制的策略它灵活度比较高,所以被大量的采用。当然也是有缺点的,缺点就是访问权限的关系,它是动态变化的,而且有时候是无法控制这个权限的流动。比如说日常生活当中,某一个小朋友或者某一个同学有一本这个图书,然后在班里边流传,这个拥有者这个某个同学把这个书首先可能借给他的好友来借阅,好友拿拿到,这个这个他的好友拿到这个书之后,如果他看完了,那他又可以根据他的朋友关系,再把这个书又转借给其他同学,然后如此一直持续下去的话,这个书最终到了谁的手里面,最初的这个拥有者他都可能没法知道和掌控的。
接下来我们再来介绍强制访问控制策略。
这种策略是为系统当中的每一个主体和客体分配一个固定的安全级别,这个级别只有系统管理员可以修改,从用户的角度可以是可信任的级别,而从信息的角度,从客体的角度就是敏感程度,通常可以分为绝密的、机密的、秘密,无密等等这样一些级别,这个就是基于前面的这个安全标签,依据主体和客体的安全级别,来决定是否主体可以去访问客体,这种策略多用一些安全级别比较高的军事应用当中,
比如说下面我们这个事例,系统当中有一个用户,Kevin它的安全级别是机密,他要访问新闻当中两个文件,一个文件是导弹计划,安全级别是高密,另外一个这个文件是电话本,安全级别是秘密,这个时候由于用户的这个安全级别是机密,是高于电话本的,它访问这个电话本就是被允许的,由于用户级别是低于这个导弹计划这个文件的级别的,所以这个访问就被拒绝了。
强制访问控制,依据主体和客体的安全级别,可以有4种访问方式,分别是下读、上写、上读、下写,其中这个读写代表了信息流动的方向,其实主要是这个写,写实际上就是推送信息,这个读写实际上就类似于生产者和消费者,写信息实际上就是产生了信息,而读信息实际上是对这个信息进行消费去读取它。
我们首先来看下读上写,下读就是向下读,就是主体,它的级别高于客体的时候,就允许主体去读这个客体的信息,然后反过来就是第一级别的用户或者主体,它不能去读高敏感度的信息。
再来看上写向上写,就是主体低于客体的时候,你可以去写入信息,反过来当主体高于客体的时候就不允许写,也就是不允许高敏感度的信息写入到低敏感度的区域当中。
这个下读和上写这两种访问方式进行结合,就可以保证数据的机密性。也就是说数据信息流只能从低级别流向高级别,反过来则不行,生活当中也有这样的场景,比如说下级向上级汇报工作的情况,或者是电子投票,这些都可以保证数据的机密性。
我们再来看上读和下写这两种模式的结合,上读就向上读,就是主体低于客体的时候,是允许他去读取的,去访问的,这个时候这个低级别的用户就能够去读高敏感度的信息。再来看向下写就是主体它的级别高于客体的时候就允许他去写,这个时候就允许高敏感度的信息写入到低敏感度的区域,这两种模式的结合就可以保证数据的完整性,数据可以从高级别流向这个低级别,这个时候生活当中的场景就类似于上级向下级下发文件,下发一些精神。另外的web资讯有专门的这个新闻机构,然后发布这个信息,从这个这些新闻实训从这个高级别流向了低级别的用户。
我们再来看常见的强制访问控制模型,通过对刚才访问方式的组合,就可以产生一些具体的强制访问控制模型,使用这个下读上写就可以构建这个 blp模型,然后反过来上读和下写就可以构建这个 bible模型。
我们首先来看这个 blp模型,基于这个下读和上写,反过来就是不上读不下写,这个模型就可以保证机密性,就是主体,当它的级别是高于客体的时候,就允许他去读取信息,当他的级别是低于客体的时候,就允许他去写入信息。像这张图当中的示例,一个用户他的级别是高密的,这个时候他就可以去读取一个秘密级别的这个文件,当用户的安全级别是秘密的时候,就允许他去写出一个高密的这个文件。
Blp模型它的典型应用就是防火墙。防火墙位于网络的边界,通常把网络分成了内部网络和外部网络,也就是外部的internet,自然就形成了两个不同的安全级别,内部网络要保护它的机密性,就可以假设设定它为机密这个级别,而外部的internet就是公开的,防火墙它就可以隔离内部网络,然后形成单向的访问机制。利用这个 brp模型的下读和上写,这个下读就是不上读,防火墙在这儿的话,就可以阻止internet当中的用户去访问内部网络,仅允许由内向外发起的数据通过,这个上写反过来就是不下写,不允许内部网络的敏感数据,然后流向internet。
我们再来看这个 biba模型,这个bad模型它是这个使用上读和下写这两个组合,它保证完整性,就是当主体的级别是高于客体的时候,允许他去写入信息。当主体的级别低于客体的时候,就允许他去读取
bible模型的典型应用就是web服务器,,web服务器相对internet它的级别是高一些的,比如说设置为秘密级别,而internet是公开的公开级别,这个时候web模型它的上读不上写,就保证了web数据的完整性。也就是说internet上面的用户只能去读取web服务器上的数据,但是不能去改写它,从而保证了web上面数据它的完整性。
这个强制访问控制它的优缺点,我们来简单分析一下。强制访问控制策略它的优点是比较严格,便于控制和管理,特别适合军事领域,缺点就是不够灵活。当用户和资源数比较多的时候,这个配置的工作量比较大,你需要对所有的用户所有的资源都来设置相应的安全级别。
接下来我们来看基于角色的访问控制策略。
基于角色的访问控制策略,是访问控制与现代应用环境相结合的一个产物,它是起源于UNIX系统以及其他一些操作系统当中组的概念。我们首先来看一下组的策略,一组用户对一个目标具有相同的访问权限,就可以把它们放到一个组里面去。实际使用的时候,先定义组的成员,比如说若干个用户,s1s2s3,我们让他们构成一个集合,然后再对这个集合进行授权,把一个具体的访问权限分配给一个组,那这个时候这一主用户都具有这个权限了,这个基于主的策略,主的成员是可以动态的改变的。
基于角色的访问控制,就是在刚才基于主的策略之上,再来定义一个角色,什么是角色?就是一个用户组以及它的许可的集合,什么是许可?就是完成一项任务必须访问的资源以及相应的操作权限。比如我们完成一项任务,需要访问资源a一,相应的操作是oe然后还要访问a二,相应的操作是o2,然后a3o三等等。这样这个 一组用户和他的许可级就构成了一种角色。我们再来看一下如何授权,就根据具体的任务来定义需要的角色,然后再为角色分配相应的许可。然后最后当一个用户需要到系统当中来的时候,我们就给这个用户指定一个角色。
我们再来看一下基于角色的访问控制与传统的访问控制的差别,传统的访问控制,用户直接发起对资源的一个访问,然后在这个过程当中,去对他的访问进行控制,然后基于角色的访问控制,就在用户和这个资源也就是客体之间加了一层角色,用户要访问资源,首先你得获取相应的角色,然后通过这个角色然后再去访问资源。
基于角色的访问控制,首先就是根据任务的需要,去定义许可,然后再来定义角色,在基于角色的防控的模型当中,一个用户可以获取不同的角色,同时一个角色也可以分属不同的用户。我们再来看角色和这个客体之间的关系,这个角色它可以以不同的权限去访问不同的客体,同时一个客体也可以被不同的角色所访问。这里我们总结一下用户角色和许可的关系,用户和角色是一个多对多的关系,一个用户可以授予多个角色,一个角色也可以授予给多个用户,然后角色和许可也是一个多对多的关系,每个角色可以拥有不同的多种许可,每个许可也可以授予不同的角色。我们进一步来看许可。许可它是针对某个资源,客体,施加的操作,这个操作和客体也是多对多的关系,每一个操作可以施加于多个客体,同时每个客体也可以接受多个操作。
现在我们来看一下基于角色访问控制的实例,一个银行系统,在银行当中有多种不同的角色,包括出纳员、分行管理者、顾客、系统管理员和审计员,授权的时候,出纳员就被授予了允许修改顾客账号记录的权限。所以当顾客在银行里面需要进行开户或者销户的操作的时候,出来员就不具备这样的权限了。所以通常他会请求分行管理者来给他授予权限或者来进行操作,而顾客仅仅允许查询自己的账号,而系统管理者他允许开关系统,但不允许读取或者修改用户的账户信息,而审计员允许读系统当中任何的数据,但是不允许做出任何的修改。
基于角色的访问控制策略当中的角色,它是可以继承的。这样的话可以避免角色权限的重复设置,我们就可以基于已有的角色,来创建新的角色,然后来减少这个角色设置的工作。这个基于继承的角色,它可以有自己的许可,可以继承其他角色的许可,这样就可以用祖先的这种关系来表达继承,角色二是角色一的子角色,它就可以继承角色一的部分许可。
这里我们看一下医院当中的这样一个场景,医院当中也是有不同的角色,比如实习医生、医生、专家,然后就是具体科室的专家,心脏病专家、风湿病专家,从上到下,首先来看从下到上就反映了一种继承关系。实习生他的权限是最小的,可以先定义实习生的角色,然后医生就可以从实习医生进行继承,继承他的许可,然后同时包含自己的特殊的许可,然后专家他又可以进一步继承医生,然后来构建这个专家的角色。而具体到不同的科室,心脏病的专家又可以从专家来进行继承,风湿病专家也是一样的,所以从下到上就是一种继承的关系,如果从上到下的话,实际上就是一种嵌套或者包含的关系,上面的角色包含了下面角色它的许可。从这个角度来看的话,这个基于角色的访问控制当中,这个角色,就好比是面向对象编程当中的对象。
我们再来看角色的管理分配和授权,这个角色的管理主要由系统管理员来进行管理,包括设定角色,设定权限,然后为用户分配角色取消角色,然后为角色分配权限撤销权限。
我们再来看角色的激活,系统当中常常有用户的概念,这个用户往往是静态的,系统当中的活动往往叫做会话,会话就是一个动态的概念,用户的一个活跃进程就是会话代表了用户和系统的交互,会话就构成了用户到角色的这样一种映射,也就是说会话可以实现这个用户静态的概念到角色这样一个动态概念的映射,然后在会话当中去分配角色,然后通过会话去激活用户授权角色集当中的某个子集,活跃角色集。刚才看到我们这个用户他可以获得多个角色,也就是说他获得的角色可能是一个集合,但是在具体的任务当中可能只有某些这个集合当中的子集或者部分,它是活跃的,这个叫做活跃角色肌。
我们再来看角色的限制,角色的限制主要有两种,一种是互斥,一种是基数限制。
我们首先看角色的互斥,角色的互斥就是两种角色,不能同时由一个用户担任。对于系统当中一些特定的操作级,某一个用户不能同时独立的完成所有这些操作,就把这些操作可以授予不同的角色,然后让这些角色进行互斥,这个时候这些角色就不能同时的授予同一个用户,从而避免这个用户同时完成这些操作。比如现实生活当中,我们经常说一个人不能既担任运动员,又担任裁判员,这个运动员和裁判员,他就是角色互斥的。另外就是角色的激素限制,在创建角色时要指定角色的基数,也就是说这个角色可以授予的用户的数量,在一个特定时间段内只有些角色只能由一定数量的用户所占有,这个就是基数。比如一个班级之内的话,选举班干部,一个班只能有一个班长,但是可能可以设一个到两位的副班长,然后还有其他一些生活委员,然后体育委员等等,都可以设置一定的数量,比如说体育委员生活委员等等只有一个人,这个就是激素。
我们再来看基于角色的访问控制策略它的特点,首先就是可以通过角色的定义,分配设置,可以描述比较复杂的灵活的安全策略,然后通过角色分成可以映射组织结构,现实生活当中的组织结构通常都是分层的这样一种结构,也可以让角色通过前面讲的继承,然后体现这样一种分层结构。然后另外就是容易实现最小特权原则,最小特权原则是信息安全当中的一个重要的原则,就是让用户只拥有完成他任务所需的最小权限。在设置角色的时候,我们就给角色分配他所要完成任务所需的最小的权限,从而就可以实现最小特权原则。另外基于角色的访问控制,能够满足职责分离的原则,通过角色互斥,可以实现用户的职责分离。然后另外可以通过角色的基数,然后来进行这个岗位上面用户数量的一个限制。
这里是基于角色的访问控制策略的具体的系统结构。这个系统结构主要分成两大模块,其中这个系统管理模块负责为角色进行这个定义,用户分配,然后角色与许可之间的分配,然后许可内部这个操作和这个具体客体的这样一种定义。然后会话管理模块就负责生成一个会话,在会话当中去对用户角色进行分配,激活角色。
最后我们再来看一下基于角色的访问控制系统它的运行步骤,首先就是用户登录,登录的时候,系统对用户的身份进行认证,获取用户的身份信息。然后第二步就根据用户的身份信息,去检索授权的角色库,然后会话管理模块就从基于角色的访问控制策略数据库当中去检索用户授权的决策及并返回给用户。然后第三就是根据本次用户的这个任务或者说会话,然后选择他的活跃角色级,然后这个期间会话管理模块会维持一个动态的角色互斥,接下来就创建会话通过,在会话当中去体现访问控制授权。第四步创建会话,根据用户的角色在会话当中去体现授权,通过菜单按钮,比如说当前这个用户他的权限可以执行什么样的操作,就可以让相应的菜单按钮可见可操作,而用户不具有的权限,这些菜单按钮就不可见或者不可操作。第五步在会话的过程当中,系统管理员若要更改用户角色或者许可,就必须要在会话结束之后或者终止会话之后才能够进行,然后最后就是会话结束,用户退出系统。
=======
作者: [ libin9iOak ]