在计算机工业界,访问控制指的是管理不一样的人对计算机和计算机资源的访问权限。本文简要介绍了在工业界内被承认并普遍应用的主流访问控制机制(概念及模型),并简要分析了它们的使用场景与局限性。可让读者更好的理解各个机制的区别来帮助读者选择最适合本身项目的模型和方法。安全
访问控制(Access Control)正如其名字,是一种经过验证用户权限规范用户访问资源的一种安全措施。所以标识(Identification)、认证(authentication)以及受权(authorization)就是组成一个访问控制模型的三个重要部分。ide
若是读者看过与安全或权限相关的书或有过相关实践应该对这三个概念的区别熟悉一些,若是不太了解的话能够经过identification-authentication-authorization了解一下spa
访问控制机制容许主体(Subject,表明了当前“用户”,不必定是人,也能够是爬虫或robot)使用它们的凭证(Credential,好比密码或Token)去标识(identify)它们本身是合法的用户,并让主体可以访问资源。一个简单的例子就是Linux系统中的访问控制,在Linux系统中用户能访问什么文件都经过一个预先定义好的Access Control List(ACL)作了限制。翻译
访问控制有时被划分为两大类Discretionary 和 non-Discretionary,被流传和应用最广的主要有三类访问控制模型:强制访问控制(MAC,Mandatory access control),自主访问控制(DAC,Discretionary access control),基于角色的访问控制(RBAC,Role Based Access Control)设计
DAC是由对象(Object,能够是系统中的file或data)的全部人制定policy,全部者决定谁可以访问这个对象(Object),以及它有什么Privileges(读写等)。code
部分中文把policy翻译成策略我以为不是很妥,这里干脆就直接用英语,policy一词会常常出如今和安全相关的话题中en.wikipedia.org/wiki/Comput…。cdn
DAC有两个重要概念:对象
主流的DAC模型中常用ACL或ACM(Access Control Matrix)来记录policy,好比在casbin中经过以下内容表示policyblog
p alice data1 read
p bob data2 write
复制代码
拥有对象权限的用户,又能够将该对象的权限分配给其余用户,因此称之为“自主(Discretionary)”控制。 这种设计最多见的应用就是文件系统的权限设计,如微软的NTFS。进程
DAC最大缺陷就是对权限控制比较分散,不便于管理,好比没法简单地将一组文件设置统一的权限开放给指定的一群用户。同时主体的权限太大无心间就可能泄露信息,并且不能防备木马攻击访问控制表。
MAC是一种更加“严格”的系统。这样的访问控制规则一般对数据和用户按照安全等级划分标签,访问控制机制经过比较安全标签来肯定的授予仍是拒绝用户对资源的访问。用户只能根据被授予的安全标签的权限去访问对应的对象。
在强制访问控制系统中,全部Subject(用户,进程)和Object(文件,数据)都被分配了安全标签,安全标签标识一个安全等级。访问控制执行时对主体和客体的安全级别进行比较,是一种强加给Subject(即系统强制Subject服从访问控制策略)的一种访问方式,它利用上读/下写来保证数据的完整性,利用下读/上写来保证数据的保密性。
主要有Bell LaPadula(BLP) Model,以及Lattice Model。
MAC的访问控制方式经过梯度安全标签实现信息的单向流通,能够有效地阻止木马的攻击,但其实现工做量较大,且管理不便、不够灵活,并且它太重强调保密性,对系统连续工做能力、受权的可管理性方面考虑不足,在商用软件中较少使用,主要出如今军事以及对信息保密要求极高的组织中使用。
RBAC是继MAC和DAC后的一个主要选择,由于它对于商业软件来讲比DAC以及MAC都更加合适。Role-based access control (RBAC)指的是将系统中的用户的权限以角色(role)划分,好比在一个系统中医生有权限新建病例,而普通护工没有。它提供了细粒度的控制,并提供了一种简单,易于管理的访问控制方法,与单独为用户分配权限(好比ACL)相比,它更不容易出错。
本文介绍了访问控制并介绍了相关的主流几个模型,一些好比ABAC和一些模型的变种就没详细介绍。留待后续文章详细介绍。