信息系统安全(第三章——自主访问控制)

目录

一、自主访问控制

二、能力表

三、访问控制表

三、属主/同组用户/其他用户

四、局限性


一、自主访问控制

自主访问控制是最常用的一类存取控制机制。在自主访问控制策略下,每个客体有且仅有一个属主,系统允许客体属主按照自己的意愿,指定访问该客体的主体及访问的方式。亦即,使用自主访问控制机制,一个用户可以自主地指定,允许系统中哪些用户以何种权限共享其资源。从这种意义上讲,这种访问控制是“自主”的。

根据属主管理客体权限的程度,自主访问控制策略可以进一步分为三种:第一种是严格的自主访问控制策略,客体属主不能让其他用户代理客体的权限管理,也可以进行多次客体管理的转交;第三种是属主权可以转让的自主访问控制策略,属主能讲作为属主的权利转交给其他用户。

最早的自主访问控制模型是访问矩阵模型,它将整个系统可能出现的客体访问情况用一个矩阵表示,主体、客体及授权的任何变化都将造成客体访问情况的变化,系统将检查这些变化是否符合已经定义好的安全特性要求,并进行相应的控制。在访问矩阵模型以后出现的自主访问控制模型在权限传播、控制与管理方面扩展了访问矩阵模型。

自主访问控制策略的三种常见实现方式:能力表、访问控制表以及Unix/Linux中所实现的“属主/同组用户/其他用户”的访问控制方式。

二、能力表

能力表是每个主体上附加的一张该主体可访问客体的明细表,它用能力表描述主体是否可以对客体进行访问,以及进行何种模式的访问(读、写、执行)。只有拥有相应能力的主体才可以按照给定的模式访问客体。

主体Si访问能力表,图中每一表项包括客体的标识和Si对该客体的访问能力,表中所示的能力有四项:拥有(o),读(r),写(w),执行(x)。在系统的最高层上,即与主体和客体相联系的位置,对于每个主体,系统有一个能力表。为了确保安全,要采用硬件、软件或加密技术对系统的能力表进行保护,防止非法修改。

在能力机制中,能力拥有者可以在主体中转移能力。在转移能力中有一种叫做“转移能力”,它允许接收能力的主体继续转移能力。主体为了在能力取消时从所有主体中彻底清除自己的能力,需要跟踪所有的转移。

基于能力表实现访问控制时,系统需要维护每个用户的状态表,该表保存了成千上万条目。当一个文件被删除以后,系统必须从每个用户的表上清除与哪个文件相应的能力。对于指定文件,如果要查询有哪些用户可以访问它,也要从每个用户的能力表中逐一查找,从而花费系统大量开销。因此,目前基于能力表实现自主访问控制的系统并不多,而在这些为数不多的系统中,只有少数系统试图实现完备的自主访问控制机制。

三、访问控制表

访问控制表是每个客体上附加的一张可访问它的主体的明细表,表中的每一项都包括主体的身份信息和主体对该客体的访问权限。

访问控制表的一般结构,它标识:对于客体Oi,主体S1对它具有读、写和执行的权力;主体S2对它具有读、写和运行的权力;主体Sm对它只有读的权力。

在实际应用中,当可访问某客体的主体很多时,访问控制表将会变得很长。而在一个大系统中,客体和主体都非常多,这时使用这种一般形式的访问控制表将会占用很多CPU开销。因此,需要对访问控制表进行简化。采用缺省设置,可以提高访问控制系统的易用性。

三、属主/同组用户/其他用户

“属主/同组用户/其他用户”是UNIX/Linux等系统中实现的一种十分简单而又有效的自主访问控制机制,其方法是在每个文件上附加一段有关访问控制信息的二进制位。

这些二进制位反映了文件属主、与文件属主同组的用户、余下的其他用户等不同类别用户对文件的存取权限,其中:

(1)owner:表示此客体属主对它的访问权限;

(2)group:表示与owner同组用户对此客体的访问权限;

(3)other:表示余下其他用户对此客体的访问权限。

这种自主访问控制实现方式的一个很大缺点,是客体属主不能够精确控制某个用户对其客体的访问权,系统只能将存取权限分配到组或所有其他用户,访问控制的粒度较粗。在实际实现的一些安全操作系统中,将“属主/同组用户/其他用户”机制和访问控制机制结合使用,从而将访问控制粒度细化到了系统中的单个用户。系统能够赋予或排除某一个用户对一个文件或目录的存取权限,客服了原UNIX访问控制粒度较粗的局限性。

四、局限性

在自主访问控制策略下,每一个客体有且仅有一个属主,由客体属主决定该客体的保护策略,系统决定某主体能否以某种方式访问某客体的依据,是系统中是否存在相应属主的授权。自主访问控制的最大特点是自主,即资源的拥有者对资源的访问策略具有决策权,因此是一种比较宽松的访问控制。虽然这种自主性为用户提供了较多的灵活性,但若让众多属主都参与授权管理,容易造成安全缺陷。另外,自主访问控制允许在主体间的传递权限,使得某些主体有可能通过继承其他主体的权限,得到了其本身不应具有的访问权限,从而给系统带来安全隐患。比如,大多数交互系统的工作流程是这样的:用户首先登录,然后启动某个进程为其做某项工作,这个进行就因此继承了该用户的属性,包括访问权限。因此,自主访问控制不适用于一些高安全要求的环境。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 13:24:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 13:24:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 13:24:05       58 阅读
  4. Python语言-面向对象

    2024-07-16 13:24:05       69 阅读

热门阅读

  1. Oracle 常用系统

    2024-07-16 13:24:05       20 阅读
  2. @Profile注解的作用是什么?

    2024-07-16 13:24:05       19 阅读
  3. C#身份证核验、身份证查询API、身份认证接口

    2024-07-16 13:24:05       21 阅读
  4. mysql服务器CPU利用率过高排查

    2024-07-16 13:24:05       19 阅读
  5. VUE中使用this.$emit()的使用进行父子组件之间传值

    2024-07-16 13:24:05       22 阅读
  6. Python-数据爬取(爬虫)简介

    2024-07-16 13:24:05       23 阅读
  7. 讲解机器学习中的 K-均值聚类算法及其优缺点

    2024-07-16 13:24:05       25 阅读
  8. c++单例模式

    2024-07-16 13:24:05       29 阅读
  9. ArrayList详解

    2024-07-16 13:24:05       22 阅读
  10. 系统架构设计师知识点总结目录篇

    2024-07-16 13:24:05       22 阅读
  11. StudentRequest

    2024-07-16 13:24:05       17 阅读