访问控制列表(ACL)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
访问控制列表(ACL)
第1节
理解ACL如何工作
最重要,也最强大的事情是需要一系列的访问控制。访问控制列表是一种细粒度,易维护以及易管理的方式来管理应用程序权限。访问控制列表或
ACL[1]处理2件主要的事情:他们想要的事情,以及想要他们的事情。按照ACL的行话来说,事情想要的使用的原料(最常见的是用户)称为访问请求对象,或者ARO(Access Request Object)。这些实体之所以称为'对象',是因为有的时候请求的对象不是一个人-有的时候你可能想限制访问某个Cake Controller,而此Controller在应用程序的其它部分不得不初始化逻辑。ACO可以是你想控制的任何东西,从一个Controller动作,到一个Web Service,或到一个你祖母的在线日记上去。
为了即刻使用所有的缩写形式,可以如下:ACL是用来决定一个ARO什么时候可以访问一个ACO。
现在,为了帮助你理解它,让我们使用一个实际的例子吧。假想一下,再过一会,一个冒险家们使用的计算机系统。这组冒险家的老大在为其他人员维护一个正常程度的隐私和安全时,他又想继续处理他们的请求。其中涉及到的ARO如下:
Gandalf
Aragorn
Bilbo
Frodo
Gollum
Legolas
Gimli
Pippin
Merry
这些就是系统里的实体,他们会请求系统的东西(ACO)。你应该注意到ACL并“不是”一个系统,它的意思是指认证的用户。你也应该有一种方式来存储用户信息,而且当用户进入系统时,能够验证他们的身份。一旦你知道用户是谁时,这就是ACL真正发光之处!OK,还是让我们回到冒险家那里吧。
Gandalf需要做的下一件事情是制作一个系统会处理的东西(或ACO)的初始化列表.他的列表可能如下:
武器(Weapon)
环(Ring)
咸肉(Salted Pork)
外交策略(Diplomacy)
啤酒(Ale)
传统上,我们会使用一组矩阵来管理系统,此矩阵展示了一组用户和与之相关对象的权限。如果此信息存储在一个表里,它可能会像下面这样,其中X表示拒绝访问,O代表允许访问:
让我们看第一眼,看起来这组系统工作得非常出色。这里的分配可以保护安全(只有Frodo 可以使用环),并且可以保护突发事件(让Hobbit得不到咸肉)
[2]。他们读起来看似已经足够细致,足够容易,真的吗?
对于像这样的一个小型系统,也许一个矩阵就可以完成。但是对于一个逐步增长的系统或者一个带有大数量的资源(ACO)和用户(ARO)的系统来说,一个表格可能变得笨重,而不是变得快捷。例如,假设我们打算想控制对几百个战争驻扎地的访问,以及试图按单元管理他们。矩阵的另外一个缺点是你不会真正的按逻辑将这些用户分组,或者对已按逻辑分组的用户做出一连串的权限变化。例如,一旦战争结束,它肯定会很好的自动允许Hobbit访问啤酒和猪肉:当对所有…Hobbit'做出一连串权限改变很容易时,实现一个基于独立用户的基本原则则是令人乏味的,也是有错误倾向的。
以树结构实现ACL是最常见的。通常有一个ARO树和ACO树。通过将他们以树结构组织,权限仍然可以以细粒度来处理,但也可以很好的保持对大蓝图的把握。作为一个英明的老大,在他的新系统里,Gandalf选择使用ACL,并将他的对象像下面一样进行组织:
环的团体关系:
战士
Aragorn
Legolas
Gimli
指挥家
Gandalf
Hobbit
Frodo
Bilbo
Merry
Pippin
访问者
Gollum
按这种方式建立我们团体,我们可以定义树的访问控制,并将这些权限应用到任何子节点中。缺省的权限是拒绝访问任何东西。与你处理树的方式一样,挑选一些权限并使用他们,最后应用的权限(将它应用到你正想知道的ACO上)就是你保持的那一个,因此,使用我们的ARO树,Gandalf可以出挂起一些权限:
环的团体关系: [Deny: ALL]
战士 [Allow: Weapons, Ale, Elven Rations, Salted Pork]
Aragorn
Legolas
Gimli
指挥家 [Allow: Salted Pork, Diplomacy, Ale]
Gandalf
Hobbit [Allow: Ale]
Frodo
Bilbo
Merry
Pippin
访问者 [Allow: Salted Pork]
Gollum
如果你想使用ACL查看是否允许Pippin访问啤酒,我们先得获取他在树上的路径,即Fellowship->Hobbits->Pippin.然后我们得看看依附在这些节点上的不同权限,并使用与Pinppin和啤酒相关的最具体的权限。
1.Fellowship = DENY Ale,拒绝(因为它被设置为拒绝所有ACO)
2.Hobbits = ALLOW Ale, 允许
3.Pippin = ?;确实不存在任何指定的啤酒信息,因此我们可以为ALLOW。
4.最后结果: 允许啤酒.
树也允许我们对更细粒度的控制做出更好的调整,但同时仍然可以保持对ARO组做出交替的变化:
Fellowship of the Ring: [Deny: ALL]
Warriors [Allow: Weapons, Ale, Elven Rations, Salted Pork] Aragorn [Allow: Diplomacy]
Legolas
Gimli
Wizards [Allow: Salted Pork, Diplomacy, Ale]
Gandalf
Hobbits [Allow: Ale]
Frodo [Allow: Ring]
Bilbo
Merry [Deny: Ale]
Pippin [Allow: Diplomacy]
Vistors [Allow: Salted Pork]
Gollum