热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

计算机系统安全2018【3】第五章:自主访问控制和强制访问控制比较

第5章1、理解和解释自主访问控制和强制访问控制,举例说明其含义。自主访问(DAC)控制是依据主体的判断力授予访问权限,通常由客体的拥有者授权。应用于

第5章

1、 理解和解释自主访问控制和强制访问控制,举例说明其含义。

自主访问(DAC)控制是依据主体的判断力授予访问权限,通常由客体的拥有者授权。应用于 UNIX, Windows系统。

强制访问控制 (MAC) 按照系统级策略限制主体对客体的访问。用户所创建的资源,也拒绝用户的完全控制。系统的安全策略完全取决于权限,权限由管理员设置。

2、比较ACL和能力表的差异

从静态角度比较ACL和capability模型是不够的,不能说明其逻辑等价性。因为安全机制是动态变化的。
这里提下,什么叫动态和静态:动态就是用户一直在改变,有些用户时间到了失去权限了,他的权限如何收回呢??这就要看ACL和能力表的区别了,由能力矩阵我们知道,acl收回权限困难,因为是对资源来发放权限,能力表收回就方便一些,因为是对角色来发权限。所以如果某个大公司员工辞职了,一般是把他的密码改成随意一个密码。因为一个个去收回权限几乎是不可能的。改掉密码,他就再也不能访问原来的账号了,这样就安全了。

自主访问控制:

缺点:

(1)
不适合用户多、用户经常变化的情况。不能授权用户在某时间段使用。(2)
运行时的安全检查不充分。比如查询某进程应用了哪些权限是困难的。(3)
不容易查询用户对哪些文件有权限,因为以文件为单位授权。(4)不能解决混淆责任问题

能力表:

优点:(1)运行时安全检查更加有效,授权更方便。(2)用户运行程序时,权责清晰。能解决混淆责任问题。缺点:(1)改变文件状态比较困难。

二者差别:


(1) 命名空间:ACL需要客体和主体的命名空间。能力表指定资源和权限。

(2) 能力表授权给主体相应的权限,是基于主体聚集的权限管理方式。ACL授权给资源访问权限,由文件拥有者指定权限。

(3) 权利边界:能力表的权限清晰,没有额外权限。ACL执行程序时权限边界不清晰,额外权限多,会引发混淆责任问题。

(4) 鉴别内容:ACL鉴别主体。能力表不需要鉴别主体,但需要控制权限的传播。

(5) 权限审查:ACL提供单客体的权限审查。能力表提供单主体的权限审查。

(6) 权限撤销:ACL基于单客体撤销权限。能力表基于单主体撤销权限。

(7) 最小特权:能力表提供细粒度的最小特权控制,可动态、短时间访问。ACL提供粗粒度的权限管理,不能实现短时间访问。

(8) 适用性:能力表适合于进程及共享。ACL适合用户级共享。


3、ACL和CAPBILITY中如何撤销权限,两种方式中撤销权限的不同之处

ACL以资源为单位进行授权。资源属于客体,文件、端口等。撤销权限时基于客体进行权限收回。当收回用户的权限时比较困难,需要遍历文件系统才能把该用对对应的文件和目录权限收回,还不能收回动态使用过程的权限。所以收回用户的权限比较困难,采用该密码,使用后不能登录的放式收回权限。

CAPBILITY:

能力表基于单主体撤销权限,授权时基于主体进行授权。可检查主体的权限,然后收回主体的权限。但要控制主体权限的分发。比如软件制造商,卖给用户软件的使用权,用户也可以把软件给他人使用,这时能力表对主体控制其权限分发就非常重要。能力表要能够检查权限是否被用户分发出去,且能控制被分发出去的权限。

4、ACL授权时为什么引发混淆责任问题,如何解决该问题

ACL:

以编译程序 SYSX/FORT为例,SYSX文件夹下的文件: STAT、BILL文件。编译程序需要在SYSX目录下写文件, 因此对目录SYSX授予写权限。一个普通用户可以运行编译程序SYSX/FORT,用户也可以自己指定输出文件。恶意用户:输出文件名指定为SYSX/BILL,导致编译程序的清单文件被替换。编译器运行时,执行两个用户的权限:编译用户和执行用户的权限,系统无法区分应为哪个用户服务。

能力表:

各用户的权限清晰,各用户写自己文件夹下的目录不会冲突。

编译程序compiler的权能:访问SYSX/STAT和SYSX/BILL, 权限存放在自己的能力槽(slots 1 & 2)。应用者运行compiler,有写文件权限, 其权限存放在能力槽(slot 3). 应用者没有写SYSX/BILL文件的权限,因为授权时没有赋予相应的权限。当写入billing信息时, 编译程序使用slot 2中的权限. 当写输出信息时, 使用slot 3中的权限。


推荐阅读
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了PHP常量的定义和使用方法,包括常量的命名规则、大小写敏感性、全局范围和标量数据的限制。同时还提到了应尽量避免定义resource常量,并给出了使用define()函数定义常量的示例。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
author-avatar
_子竹_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有