设为首页 加入收藏

TOP

权限控制和OAuth(一)
2019-09-17 18:42:12 】 浏览:56
Tags:权限 控制 OAuth
目录
权限实际上是一种能力,对权限的合理分配,一直是安全设计中的核心问题。本文主要讲了权限控制是什么,有哪些成熟的模型可学习参考。简单了解一下~

1 权限控制是什么

认证(Authentication)和 授权(Authorization)是两个概念:

  • 认证的目的是为了认出用户是谁,解决的是『Who am I』的问题;

  • 而授权的目的是为了决定用户能够做什么,解决的是『What can I do』的问题。

形象的来说:假设系统是一个屋子,持有钥匙的人可以开门进入屋子。那么屋子就是通过锁和钥匙来进行『认证』的,开门的过程对应的就是登陆。开门之后,能访问哪个屋子,什么事情能做,什么事情不能做,就是『授权』的管辖范围了。

某个主体(subject)对某个客体(object)需要实施某种操作(operation),系统对这种操作的限制就是权限控制。在一个安全的系统中,通过认证来确认主体的身份。客体是一种资源,是主体发起请求的对象。主体所能做什么,就是权限,权限可以细分为不同的能力,例如:在Linux文件系统中,将权限分为 读、写、执行 三种能力。"基于角色的访问控制"和"基于数据的访问控制"是进行系统安全设计时经常用到的两种控制方式,下文会涉及到。

以下是一些常见的权限控制模型: 

 

1.1 ACL

ACL(Access Control List) 控制访问列表。在ACL中,包含用户(User)、资源(Resource)、资源操作(Operation)三个关键要素。每一项资源,都配有一个列表,记录哪些用户可以对这项资源执行哪些操作。当系统试图访问这项资源时,会检查这个列表中是否有关于当前用户的操作权限。

总的来说,ACL是面向"资源"的访问控制模型,机制是围绕"资源"展开的。模型如下图所示:

 

ACL典型的例子:

在 Linux 中,主体是系统用户,客体是被访问的文件,一个文件所能执行的操作分为读(r)、写(w)、执行(x),这三种操作同时对应着三种主体:文件拥有者、文件拥有者所在的用户组、其他用户。主体-客体-操作这三种的对应关系构成了 ACL 控制访问列表,当用户访问文件时,能否成功将由 ACL 决定。 

 

1.2 RBAC

1.2.1 名词术语

用户(user):人、机器、网络等,进行资源或服务访问的实施主体

角色(role):一个工作职能,被授予角色的用户将具有相应的权威和责任

会话(session):从用户到其激活的角色集合的一个映射

权限(permission):对受RBAC保护的一个或多个对象执行某个操作的许可

操作(operation):一个程序可执行的映像,被调用时为用户执行某些功能

客体(object):需要进行访问控制的系统资源,例如:文件、打印机、数据库记录等 

 

1.2.2 RBAC定义

RBAC(Role-Based Access Control):基于角色的访问控制。 RBAC认为授权实际就是 who,what,how 三者之间的关系,即 who 对 what 进行 how 的操作。

  • Who:权限的拥用者或主体(如 User、Group、Role 等等)

  • What:权限针对的对象或资源

  • How:具体的权限

RBAC的关注点在于 Role 和 User, Permission 的关系。称为 User assignment(UA) 和 Permission assignment(PA)。关系的左右两边都是 Many-to-Many 关系。就是 user 可以有多个 role,role 可以包括多个 user。User 通过成为 Role 而得到这些 Role 的 Permission,Role 隔离了 User 和 Permission 的逻辑关系。

RBAC支持三个著名的安全原则:

  • 最小权限原则:要求系统只授予主体必要的权限,而不要过度授权,这样能有效减少系统、网络、应用、数据库出错的机会。RBAC可以将其角色配置成其完成任务所需要的最小的权限集

  • 责任分离原则:调用相互独立互斥的角色来共同完成敏感的任务。例如:记账员和财务管理员共同参与同一过账

  • 数据抽象原则:权限的抽象。如:财务操作用借款、存款等抽象权限,而不用操作系统提供的典型的读、写、执行权限。 

 

1.2.3 RBAC分类

1.2.3.1 RBAC0

RBAC0:RBAC的核心部分,是通用的权限模型,其他的版本都是建立在 RBAC0 的基础上并进行相应的扩展。 模型图如下:

use和role关系:N:N

role和permission关系:N:N

在用户的会话中保持激活状态的角色的权限构成了用户的可用权限

 

1.2.3.2 RBAC1

RBAC1:基于 RBAC0 的角色层次模型,角色层次定义了角色间的继承关系,例如:角色 r1 继承了角色 r2,r1 则拥有了 r2 的所有权限。模型图如下: 

使用第一种模型也可以,不过会存在数据冗余,没有RBAC1更面向对象 

 

1.2.3.3 RBAC2

RBAC2:基于 RBAC0 的约束模型,增加了职级分离关系,用来实施利益冲突策略防止组织中用户的越权行为,限制了用户的权限。包含SSD(静态职级分离)和DSD(动态职级分离)概念。

SSD:用户/角色分配约束,由2个参数定义 :

  • 包含2或2个以上角色的角色集合

  • 用户拥有的角色在该角色集中小于某个阀值

DSD:会话与角色之间的约束,约束一个用户会话可以激活的角色来限制用户的权限。例如:一个用户拥有3个角色,一个会话中只激活1个角色。模型图如下

 

 

1.2.4 RBAC 接口

RBAC接口定义规范,可参考:GBT 25062-2010 信息安全技术 鉴别与授权 基于角色的访问控制模型与管理规范

 

2 垂直权限(功能权限)

访问控制是建立用户与权限之间的关系,目前常用的一种方法就是基于 RBAC 模型,我们可称之为『垂直权限』。例如:在一个论坛中,有admin、普通用户、匿名用户三种角色,admin有删除、编辑、置顶帖子的权限,普通用户有评论和浏览帖子的权限,匿名用户只有浏览帖子的权限。目前已有 Shiro,Spring Security 等基于 RBAC 模型的成熟框架来处理功能权限管理和鉴权的问题。

垂直权限的漏洞举例:Web应用程序在服务端没有做权限控制,只是在前端菜单显

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇23.C++- 继承的多种方式、显示调.. 下一篇RESTful三问

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目