与认证相对应的是授权。认证确定用户身份;授权指定该用户能做什么。通常认为是建立一种对资源的访问方式,例如文件和打印机,授权也能处理用户在系统或者网络上的特权。在最终使用过程中,授权甚至能指定特定的用户是否能访问系统。有各种类型的授权系统,包括用户权限,基于角色的授权,访问控制列表和基于规则的授权。
授权通常是描述的用户访问资源,如访问文件或行使特权,如关闭系统。然而,授权也专用于系统的特定区域。例如,很多操作系统分为用户空间和内核空间,运行一个可执行文件的能力在某个空间或其他空间上是受到严格控制的。在内核中运行可执行文件,必须拥有特权,这种权限通常仅限于本机操作系统组件。
特权或用户权限的权限不同。用户权限提供授权去做可以影响整个系统的事情。可以创建组,把用户分配到组,登录系统,以及多用户权限的分配。其他的用户权限是隐含的,默认分配给组——由系统创建的组而不是管理员创建。无法移除这些权限。
在典型的Unix系统实现中,隐含的特权是与账号绑定的。可以授权账号在系统上做任何事情。另一方面,用户拥有有限的权限,包括登录,访问某一文件,运行授权他们执行的应用程序。
在一些Unix系统上,系统管理员可以授予某一用户权限使用特定的命令,类似超级用户一样,而不需要提供给他们超级用户的密码。在公共领域可以做到这一点的应用程序,被称为sudo。
在公司中每个员工都有自己的工作职责。如果员工需要开展工作,则需要特权(做某些事情的权限)和权限(访问特定资源和做他们职责范围内的事情)。早期计算机系统的设计者认为用户对于系统的要求可能会有所不同,并不是所有用户都应该给予系统管理员权限。
早期计算机系统存在的两个角色是用户和管理员。早期的系统针对这些类型的用户,基于他们的组成员关系来定义角色和授权的访问。授予管理员(超级用户,root用户,系统管理员等等) 特权,并允许其比普通用户访问更多的计算机资源。例如,管理员可以增加用户,分配密码,访问系统文件和程序,并重启机器。这个群体后来扩展到包括审计员的角色(用户可以读取系统信息和在其他系统上的活动信息,但不能修改系统数据或执行其他管理员角色的功能)。
随着系统的发展,用户角色更加精细化。用户可以通过安全许可来量化,例如,允许访问特定的数据或某些应用程序。其他区别可能基于用户在数据库或者其他应用系统中的角色而定。通常情况下,角色由部门所分配,如财务,人力资源,信息技术和销售部门。
最简单的例子,在这些基于角色的系统中,将用户添加到具有特定权限和特权的组里。其他基于角色的系统使用更复杂的访问控制系统,包括一些专门为实现访问控制所设计的操作系统。在Bell-Lapadula安全模型中,例如,将数据资源分为层或区域。每个区域代表一种数据类型,在没有特定授权的情况下,数据不能从某个区域移动到其他区域,用户必须提供某个区域的访问权限才能使用数据。在这个角色中,用户不能往低层次区域中写入数据(例如,从机密区域到秘密区域),也不能从比他们更高层次的区域中读取数据(例如,用户获取了访问公共区域的权限,但不能读取秘密或机密区域)。
Unix中基于角色的访问控制工具可以将管理员权限委派给普通用户。它通过定义好的角色账号,或可以执行某些管理员任务的账号来进行工作。角色账号无法直接登录,只能通过su命令进行访问。
某些社交场合只有被邀请的人才能出席。为了确保只有邀请的嘉宾来参加欢迎派对,可能需要将一份被邀请人的名单提供给门卫那边。当你抵达时,门卫会将你的名字与名单进行比对,以此来判断你是否能够入内。通过照片的形式进行比对的认证,可能不会出现在这里,但这是简单使用访问控制列表(ACL)很好的例子。
信息系统可能也可以使用ACL来确定所请求的服务或资源是否有权限。访问服务器上的文件通常由保留在每个文件的信息所控制。同样,网络设备上不同类型的通信也可以通过ACL来控制。
Windows和Unix系统都使用文件权限来管理文件访问。实现方式虽然各不相同,但都适用于两个系统。只有当你需要互通性时,问题才会出现,请确保授权可以支持跨平台。
Windows文件——访问权限 Windows NTFS文件系统为每个文件和文件夹都提供了一个ACL。ACL由一系列的访问控制条目(ACEs)所组成。每个ACE都包含安全标识符(SID)和授予的权限。可以是允许或拒绝的权限,SIDs可能代表用户账号,计算机账号或组。系统管理员,文件所有者,或有权限的用户可以分配ACEs。
登录过程中会确定特权用户和组成员对特定的用户或计算机的权限。列表包括用户SID,以及该用户所在组的SIDs。当与计算机进行连接时,访问令牌为用户创建并附加到用户在系统上启动的所有正在运行的进程中去。
在Windows系统中权限细粒度非常高。下表1中列出的权限实际上代表的是权限集,但是权限也可以单独分配。
表1 Windows文件权限
注意:上表这些权限不同于表中所示的权限分组。表中列出的每个权限都可以单独应用。当试图访问资源时,安全子系统会对资源的ACEs列表和访问令牌中的SIDs和特权列表进行比对。如果SID和访问权限两者都比对成功,则授予权限,除非访问授权为拒绝。权限积累(也就是说,如果授予了用户读取和写的权限,那么用户将拥有读和写的权限),但是拒绝授权将导致否定,甚至在有访问权限的情况下。缺乏任何匹配结果都将导致拒绝。
值得注意的是在Windows中文件的权限和其他基于对象的权限,也可以通过共享文件夹的权限加以补充。也就是说,如果一个文件夹能够通过服务器消息块(SMB)协议直接从网络中访问,可以在可以文件夹上设置权限来控制访问。将这些权限与直接使用NTFS权限设置在文件夹上的相关权限进行评估。在两组权限之间存在冲突的情况下,选择最严格的权限。举例说明,如果给会计组共享了读和写的权限, Alice是其中一个成员,但底层的文件夹权限拒绝Alice访问,最终Alice也将无法访问该文件夹。
Unix 文件——访问权限 传统的Unix文件系统不使用ACL。相反,通过限制用户账号和组的访问权限来保护文件。例如,如果你想授予读的权限给所有者之外的人,是行不通的。如果你想授予读的权限给一个组,写的权限给另外一个组,也无法做到。这种缺乏细粒度的访问控制在有些Unix(例如Solaris)系统中,可以通过提供ACL来弥补,但是在我们看那个系统之前,我们将审视传统的文件保护系统。
有关文件的信息,除了文件名之外,都包括在索引之中。文件的索引包含文件信息、文件所有者、用户ID、文件所属组、文件模式,读/写/执行权限的设置。
文件的权限分配来控制访问,他们包含三个级别的访问权限:所有者,组和其他。所有者的特权包括确定谁可以访问该文件并读取它,写入文件,或者,如果它是一个可执行文件,执行这个文件的权限。对于这些细粒度比较小的权限。目录也可以有权限分配给所有者,组和其他。表2列出并解释了权限。
表2 传统的Unix文件权限
网络设备使用ACLs来控制网络的访问和授予的访问类型。具体来说,路由器和防火墙的访问控制列表指明了来访流量能够访问哪台计算机的哪个端口,或是设备能接受并路由到其他网络中的流量类型。
基于规则的授权需要开发一套规则来规定特定的用户在系统上能做什么。这些规则可能会提供如下信息,如“用户Alice能够访问资源Z但不能访问资源D”,更复杂的规则是指定组合,例如“用户Bob只有坐在数据中心的控制台时才能阅读文件P。”在小的系统中,基于规则的授权可能并不难维护,但是在大的系统和网络中,极其繁琐和难以管理。